@eui/ecl 22.0.0-alpha.30 → 22.0.0-alpha.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/docs/changelog.html +76 -0
  2. package/docs/components/EclMultiselectComponent.html +88 -605
  3. package/docs/components/EclMultiselectDropdownComponent.html +204 -2316
  4. package/docs/components/EclMultiselectInputComponent.html +3 -545
  5. package/docs/components/EclMultiselectOptionComponent.html +48 -443
  6. package/docs/components/EclRatingFieldComponent.html +0 -45
  7. package/docs/components/EclSearchFormComponent.html +4 -447
  8. package/docs/directives/EclMultiselectOptionDirective.html +21 -286
  9. package/docs/interfaces/EclMultiselectOption.html +6 -6
  10. package/docs/js/search/search_index.js +2 -2
  11. package/docs/json/EclMultiselectComponent.md +6 -6
  12. package/docs/json/EclMultiselectDropdownComponent.md +1 -6
  13. package/docs/json/EclMultiselectInputComponent.md +1 -1
  14. package/docs/json/EclMultiselectOptionComponent.md +2 -1
  15. package/docs/json/EclMultiselectOptionDirective.md +1 -1
  16. package/docs/json/documentation.json +834 -1416
  17. package/docs/llms.txt +33 -95
  18. package/docs/properties.html +1 -1
  19. package/fesm2022/eui-ecl-components-ecl-multiselect.mjs +320 -430
  20. package/fesm2022/eui-ecl-components-ecl-multiselect.mjs.map +1 -1
  21. package/fesm2022/eui-ecl-components-ecl-rating-field.mjs +4 -6
  22. package/fesm2022/eui-ecl-components-ecl-rating-field.mjs.map +1 -1
  23. package/fesm2022/eui-ecl-components-ecl-search-form.mjs +22 -27
  24. package/fesm2022/eui-ecl-components-ecl-search-form.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/types/eui-ecl-components-ecl-multiselect.d.ts +163 -192
  27. package/types/eui-ecl-components-ecl-multiselect.d.ts.map +1 -1
  28. package/types/eui-ecl-components-ecl-rating-field.d.ts.map +1 -1
  29. package/types/eui-ecl-components-ecl-search-form.d.ts +14 -14
  30. package/types/eui-ecl-components-ecl-search-form.d.ts.map +1 -1
@@ -1143,12 +1143,12 @@
1143
1143
  },
1144
1144
  {
1145
1145
  "name": "EclMultiselectOption",
1146
- "id": "interface-EclMultiselectOption-115fbadeae769a42c78a13540193aa94dc4770f87a690c07353109c23a8fc17e975322528c15a412b23338da2e8e01e355a4616608a07a48ad298cdc21fba9aa",
1146
+ "id": "interface-EclMultiselectOption-823cca2f0773a2a83719a57a2a22c21133966e29e23d3b7e6b4b0dc145c50ef30ec4154754cb8cfff1d6bcbe3561a0f3b0d3eaa2e5c3731ccebdeb36b61ddcd2",
1147
1147
  "file": "packages/ecl/components/ecl-multiselect/models/ecl-multiselect-option.model.ts",
1148
1148
  "deprecated": false,
1149
1149
  "deprecationMessage": "",
1150
1150
  "type": "interface",
1151
- "sourceCode": "export interface EclMultiselectOption {\n id?: string;\n label?: string;\n value?: string;\n isActive: boolean;\n isChecked: boolean;\n}\n",
1151
+ "sourceCode": "import { InputSignal, ModelSignal } from '@angular/core';\n\nexport interface EclMultiselectOption {\n id?: string;\n label?: InputSignal<string>;\n value?: InputSignal<string>;\n isActive: boolean;\n isChecked: ModelSignal<boolean>;\n}\n",
1152
1152
  "displayName": "EclMultiselectOption",
1153
1153
  "properties": [
1154
1154
  {
@@ -1160,7 +1160,7 @@
1160
1160
  "indexKey": "",
1161
1161
  "optional": true,
1162
1162
  "description": "",
1163
- "line": 2,
1163
+ "line": 4,
1164
1164
  "rawdescription": "\n"
1165
1165
  },
1166
1166
  {
@@ -1172,7 +1172,7 @@
1172
1172
  "indexKey": "",
1173
1173
  "optional": false,
1174
1174
  "description": "",
1175
- "line": 5,
1175
+ "line": 7,
1176
1176
  "rawdescription": "\n"
1177
1177
  },
1178
1178
  {
@@ -1180,11 +1180,11 @@
1180
1180
  "coverageIgnore": false,
1181
1181
  "deprecated": false,
1182
1182
  "deprecationMessage": "",
1183
- "type": "boolean",
1183
+ "type": "ModelSignal<boolean>",
1184
1184
  "indexKey": "",
1185
1185
  "optional": false,
1186
1186
  "description": "",
1187
- "line": 6,
1187
+ "line": 8,
1188
1188
  "rawdescription": "\n"
1189
1189
  },
1190
1190
  {
@@ -1192,11 +1192,11 @@
1192
1192
  "coverageIgnore": false,
1193
1193
  "deprecated": false,
1194
1194
  "deprecationMessage": "",
1195
- "type": "string",
1195
+ "type": "InputSignal<string>",
1196
1196
  "indexKey": "",
1197
1197
  "optional": true,
1198
1198
  "description": "",
1199
- "line": 3,
1199
+ "line": 5,
1200
1200
  "rawdescription": "\n"
1201
1201
  },
1202
1202
  {
@@ -1204,11 +1204,11 @@
1204
1204
  "coverageIgnore": false,
1205
1205
  "deprecated": false,
1206
1206
  "deprecationMessage": "",
1207
- "type": "string",
1207
+ "type": "InputSignal<string>",
1208
1208
  "indexKey": "",
1209
1209
  "optional": true,
1210
1210
  "description": "",
1211
- "line": 4,
1211
+ "line": 6,
1212
1212
  "rawdescription": "\n"
1213
1213
  }
1214
1214
  ],
@@ -26801,38 +26801,33 @@
26801
26801
  },
26802
26802
  {
26803
26803
  "name": "EclMultiselectOptionDirective",
26804
- "id": "directive-EclMultiselectOptionDirective-8b66d7a79b47c8f710330e652c6acb40b41163f328b678f7613360b2b3a080a0008fd0e86a49a1d33ed6ea2b28a182cc4b0be121ea98d11d1a4c72119d95a210",
26804
+ "id": "directive-EclMultiselectOptionDirective-0039fce5ceed212a856e0b9398a316963228a76be8e4eb6e8d0cf3b33cb0c5d6e461beff3a3c8994e00085efc6d3a2a7b5e11d7de3b419ffe53bb10b7f10f1af",
26805
26805
  "file": "packages/ecl/components/ecl-multiselect/ecl-multiselect-option.directive.ts",
26806
26806
  "type": "directive",
26807
26807
  "description": "<p>Directive used to decorate <option> and <optgroup> elements within a multiselect.\nAdds support for value, label, disabled, selected states and styling.</p>\n",
26808
26808
  "rawdescription": "\n\nDirective used to decorate <option> and <optgroup> elements within a multiselect.\nAdds support for value, label, disabled, selected states and styling.\n",
26809
- "sourceCode": "import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, HostBinding, Input, forwardRef, inject, input, contentChildren } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive used to decorate <option> and <optgroup> elements within a multiselect.\n * Adds support for value, label, disabled, selected states and styling.\n */\n@Directive({\n selector: 'optgroup[eclMultiselectOptgroup], option[eclMultiselectOption]',\n})\nexport class EclMultiselectOptionDirective extends ECLBaseDirective {\n\n /**\n * Nested option directives (used for optgroups).\n */\n readonly eclOptionItems = contentChildren(forwardRef(() => EclMultiselectOptionDirective));\n\n /**\n * Value assigned to the option.\n */\n readonly value = input<string>(undefined);\n\n /**\n * Label displayed for the option.\n */\n readonly label = input<string>(undefined);\n\n /**\n * Emits whenever the option's state changes (used internally).\n */\n changes = new Subject();\n\n /**\n * Indicates that the option is disabled.\n */\n @Input()\n @HostBinding('attr.disabled')\n get disabled(): boolean {\n return this._disabled || null;\n }\n set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled = false;\n\n /**\n * Indicates that the option is selected.\n */\n @Input()\n @HostBinding('attr.selected')\n get selected(): boolean {\n return this._selected || null;\n }\n set selected(value) {\n this._selected = coerceBooleanProperty(value);\n }\n private _selected = false;\n private elRef = inject(ElementRef);\n\n /**\n * Applies ECL checkbox styling class to the option.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-checkbox')].join(' ').trim();\n }\n\n /**\n * Returns true if this directive is applied to an <optgroup> element.\n */\n isOptGroup(): boolean {\n return this.elRef.nativeElement.nodeName === 'OPTGROUP';\n }\n}\n",
26809
+ "sourceCode": "import { Directive, ElementRef, booleanAttribute, forwardRef, inject, input, contentChildren } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * Directive used to decorate <option> and <optgroup> elements within a multiselect.\n * Adds support for value, label, disabled, selected states and styling.\n */\n@Directive({\n selector: 'optgroup[eclMultiselectOptgroup], option[eclMultiselectOption]',\n host: {\n '[attr.disabled]': 'disabled() || null',\n '[attr.selected]': 'selected() || null',\n '[class]': 'cssClasses',\n },\n})\nexport class EclMultiselectOptionDirective extends ECLBaseDirective {\n\n /**\n * Nested option directives (used for optgroups).\n */\n readonly eclOptionItems = contentChildren(forwardRef(() => EclMultiselectOptionDirective));\n\n /**\n * Value assigned to the option.\n */\n readonly value = input<string>(undefined);\n\n /**\n * Label displayed for the option.\n */\n readonly label = input<string>(undefined);\n\n /**\n * Indicates that the option is disabled.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Indicates that the option is selected.\n */\n readonly selected = input(false, { transform: booleanAttribute });\n\n /**\n * Applies ECL checkbox styling class to the option.\n */\n protected get cssClasses(): string {\n return [super.getCssClasses('ecl-checkbox')].join(' ').trim();\n }\n\n private readonly elRef = inject(ElementRef);\n\n /**\n * Returns true if this directive is applied to an <optgroup> element.\n */\n isOptGroup(): boolean {\n return this.elRef.nativeElement.nodeName === 'OPTGROUP';\n }\n}\n",
26810
26810
  "selector": "optgroup[eclMultiselectOptgroup], option[eclMultiselectOption]",
26811
26811
  "providers": [],
26812
26812
  "hostDirectives": [],
26813
26813
  "standalone": false,
26814
26814
  "inputsClass": [
26815
26815
  {
26816
- "coverageIgnore": false,
26817
26816
  "name": "disabled",
26818
- "deprecated": false,
26819
- "deprecationMessage": "",
26820
- "rawdescription": "\n\nIndicates that the option is disabled.\n",
26821
- "description": "<p>Indicates that the option is disabled.</p>\n",
26822
- "line": 40,
26823
- "type": "boolean",
26824
- "decorators": []
26825
- },
26826
- {
26827
26817
  "coverageIgnore": false,
26828
- "name": "selected",
26818
+ "defaultValue": "false",
26829
26819
  "deprecated": false,
26830
26820
  "deprecationMessage": "",
26831
- "rawdescription": "\n\nIndicates that the option is selected.\n",
26832
- "description": "<p>Indicates that the option is selected.</p>\n",
26833
- "line": 53,
26834
26821
  "type": "boolean",
26835
- "decorators": []
26822
+ "indexKey": "",
26823
+ "optional": false,
26824
+ "description": "<p>Indicates that the option is disabled.</p>\n",
26825
+ "line": 36,
26826
+ "rawdescription": "\n\nIndicates that the option is disabled.\n",
26827
+ "modifierKind": [
26828
+ 148
26829
+ ],
26830
+ "required": false
26836
26831
  },
26837
26832
  {
26838
26833
  "name": "label",
@@ -26844,7 +26839,7 @@
26844
26839
  "indexKey": "",
26845
26840
  "optional": false,
26846
26841
  "description": "<p>Label displayed for the option.</p>\n",
26847
- "line": 28,
26842
+ "line": 31,
26848
26843
  "rawdescription": "\n\nLabel displayed for the option.\n",
26849
26844
  "modifierKind": [
26850
26845
  148
@@ -26852,308 +26847,211 @@
26852
26847
  "required": false
26853
26848
  },
26854
26849
  {
26855
- "name": "value",
26850
+ "name": "selected",
26856
26851
  "coverageIgnore": false,
26857
- "defaultValue": "undefined",
26852
+ "defaultValue": "false",
26858
26853
  "deprecated": false,
26859
26854
  "deprecationMessage": "",
26860
- "type": "string",
26855
+ "type": "boolean",
26861
26856
  "indexKey": "",
26862
26857
  "optional": false,
26863
- "description": "<p>Value assigned to the option.</p>\n",
26864
- "line": 23,
26865
- "rawdescription": "\n\nValue assigned to the option.\n",
26858
+ "description": "<p>Indicates that the option is selected.</p>\n",
26859
+ "line": 41,
26860
+ "rawdescription": "\n\nIndicates that the option is selected.\n",
26866
26861
  "modifierKind": [
26867
26862
  148
26868
26863
  ],
26869
26864
  "required": false
26870
26865
  },
26871
26866
  {
26867
+ "name": "value",
26872
26868
  "coverageIgnore": false,
26873
- "name": "class",
26874
- "deprecated": false,
26875
- "deprecationMessage": "",
26876
- "rawdescription": "\n",
26877
- "description": "",
26878
- "line": 8,
26879
- "type": "string",
26880
- "decorators": [],
26881
- "inheritance": {
26882
- "file": "ECLBaseDirective"
26883
- }
26884
- },
26885
- {
26886
- "coverageIgnore": false,
26887
- "name": "e2eAttr",
26888
- "deprecated": false,
26889
- "deprecationMessage": "",
26890
- "rawdescription": "\n",
26891
- "description": "",
26892
- "line": 10,
26893
- "type": "any",
26894
- "decorators": [],
26895
- "inheritance": {
26896
- "file": "ECLBaseDirective"
26897
- }
26898
- },
26899
- {
26900
- "coverageIgnore": false,
26901
- "required": false,
26902
- "name": "tabindex",
26903
- "deprecated": false,
26904
- "deprecationMessage": "",
26905
- "rawdescription": "\n",
26906
- "description": "",
26907
- "line": 13,
26908
- "type": "number",
26909
- "decorators": [],
26910
- "inheritance": {
26911
- "file": "ECLBaseDirective"
26912
- }
26913
- }
26914
- ],
26915
- "outputsClass": [],
26916
- "deprecated": false,
26917
- "deprecationMessage": "",
26918
- "hostBindings": [
26919
- {
26920
- "coverageIgnore": false,
26921
- "name": "class",
26922
- "actualName": "cssClasses",
26869
+ "defaultValue": "undefined",
26923
26870
  "deprecated": false,
26924
26871
  "deprecationMessage": "",
26925
- "rawdescription": "\n\nApplies ECL checkbox styling class to the option.\n",
26926
- "description": "<p>Applies ECL checkbox styling class to the option.</p>\n",
26927
- "line": 66,
26928
26872
  "type": "string",
26929
- "decorators": []
26930
- }
26931
- ],
26932
- "hostListeners": [],
26933
- "propertiesClass": [
26934
- {
26935
- "name": "changes",
26936
- "coverageIgnore": false,
26937
- "defaultValue": "new Subject()",
26938
- "deprecated": false,
26939
- "deprecationMessage": "",
26940
- "type": "unknown",
26941
- "indexKey": "",
26942
- "optional": false,
26943
- "description": "<p>Emits whenever the option&#39;s state changes (used internally).</p>\n",
26944
- "line": 33,
26945
- "rawdescription": "\n\nEmits whenever the option's state changes (used internally).\n"
26946
- },
26947
- {
26948
- "name": "eclOptionItems",
26949
- "coverageIgnore": false,
26950
- "defaultValue": "contentChildren(forwardRef(() => EclMultiselectOptionDirective))",
26951
- "deprecated": false,
26952
- "deprecationMessage": "",
26953
- "type": "unknown",
26954
26873
  "indexKey": "",
26955
26874
  "optional": false,
26956
- "description": "<p>Nested option directives (used for optgroups).</p>\n",
26957
- "line": 18,
26958
- "rawdescription": "\n\nNested option directives (used for optgroups).\n",
26875
+ "description": "<p>Value assigned to the option.</p>\n",
26876
+ "line": 26,
26877
+ "rawdescription": "\n\nValue assigned to the option.\n",
26959
26878
  "modifierKind": [
26960
26879
  148
26961
- ]
26962
- }
26963
- ],
26964
- "methodsClass": [
26965
- {
26966
- "name": "isOptGroup",
26967
- "coverageIgnore": false,
26968
- "args": [],
26969
- "optional": false,
26970
- "returnType": "boolean",
26971
- "typeParameters": [],
26972
- "line": 73,
26973
- "deprecated": false,
26974
- "deprecationMessage": "",
26975
- "rawdescription": "\n\nReturns true if this directive is applied to an <optgroup> element.\n",
26976
- "description": "<p>Returns true if this directive is applied to an <optgroup> element.</p>\n"
26977
- },
26978
- {
26979
- "name": "getCssClasses",
26980
- "coverageIgnore": false,
26981
- "args": [
26982
- {
26983
- "name": "rootClass",
26984
- "type": "string",
26985
- "optional": false,
26986
- "dotDotDotToken": false,
26987
- "deprecated": false,
26988
- "deprecationMessage": ""
26989
- }
26990
26880
  ],
26991
- "optional": false,
26992
- "returnType": "string",
26993
- "typeParameters": [],
26994
- "line": 15,
26995
- "deprecated": false,
26996
- "deprecationMessage": "",
26997
- "rawdescription": "\n",
26998
- "description": "",
26999
- "jsdoctags": [
27000
- {
27001
- "name": "rootClass",
27002
- "type": "string",
27003
- "optional": false,
27004
- "dotDotDotToken": false,
27005
- "deprecated": false,
27006
- "deprecationMessage": "",
27007
- "tagName": {
27008
- "text": "param"
27009
- }
27010
- }
27011
- ],
27012
- "inheritance": {
27013
- "file": "ECLBaseDirective"
27014
- }
27015
- }
27016
- ],
27017
- "coverageIgnore": false,
27018
- "jsdoctags": [
27019
- {
27020
- "pos": 279,
27021
- "end": 444,
27022
- "kind": 321,
27023
- "id": 0,
27024
- "flags": 16777216,
27025
- "modifierFlagsCache": 0,
27026
- "transformFlags": 0,
27027
- "comment": "Directive used to decorate <option> and <optgroup> elements within a multiselect.\nAdds support for value, label, disabled, selected states and styling."
27028
- }
27029
- ],
27030
- "extends": [
27031
- "ECLBaseDirective"
27032
- ],
27033
- "accessors": {
27034
- "disabled": {
27035
- "name": "disabled",
27036
- "setSignature": {
27037
- "name": "disabled",
27038
- "type": "void",
27039
- "deprecated": false,
27040
- "deprecationMessage": "",
27041
- "args": [
27042
- {
27043
- "name": "value",
27044
- "type": "BooleanInput",
27045
- "optional": false,
27046
- "dotDotDotToken": false,
27047
- "deprecated": false,
27048
- "deprecationMessage": ""
27049
- }
27050
- ],
27051
- "returnType": "void",
27052
- "line": 43,
27053
- "rawdescription": "\n",
27054
- "description": "",
27055
- "jsdoctags": [
27056
- {
27057
- "name": "value",
27058
- "type": "BooleanInput",
27059
- "optional": false,
27060
- "dotDotDotToken": false,
27061
- "deprecated": false,
27062
- "deprecationMessage": "",
27063
- "tagName": {
27064
- "text": "param"
27065
- }
27066
- }
27067
- ]
27068
- },
27069
- "getSignature": {
27070
- "name": "disabled",
27071
- "type": "boolean",
27072
- "returnType": "boolean",
27073
- "line": 40,
27074
- "rawdescription": "\n\nIndicates that the option is disabled.\n",
27075
- "description": "<p>Indicates that the option is disabled.</p>\n"
27076
- }
27077
- },
27078
- "selected": {
27079
- "name": "selected",
27080
- "setSignature": {
27081
- "name": "selected",
27082
- "type": "void",
27083
- "deprecated": false,
27084
- "deprecationMessage": "",
27085
- "args": [
27086
- {
27087
- "name": "value",
27088
- "type": "unknown",
27089
- "optional": false,
27090
- "dotDotDotToken": false,
27091
- "deprecated": false,
27092
- "deprecationMessage": ""
27093
- }
27094
- ],
27095
- "returnType": "void",
27096
- "line": 56,
27097
- "rawdescription": "\n",
27098
- "description": "",
27099
- "jsdoctags": [
27100
- {
27101
- "name": "value",
27102
- "type": "unknown",
27103
- "optional": false,
27104
- "dotDotDotToken": false,
27105
- "deprecated": false,
27106
- "deprecationMessage": "",
27107
- "tagName": {
27108
- "text": "param"
27109
- }
27110
- }
27111
- ]
27112
- },
27113
- "getSignature": {
27114
- "name": "selected",
27115
- "type": "boolean",
27116
- "returnType": "boolean",
27117
- "line": 53,
27118
- "rawdescription": "\n\nIndicates that the option is selected.\n",
27119
- "description": "<p>Indicates that the option is selected.</p>\n"
27120
- }
26881
+ "required": false
27121
26882
  },
27122
- "cssClasses": {
27123
- "name": "cssClasses",
27124
- "getSignature": {
27125
- "name": "cssClasses",
27126
- "type": "string",
27127
- "returnType": "string",
27128
- "line": 66,
27129
- "rawdescription": "\n\nApplies ECL checkbox styling class to the option.\n",
27130
- "description": "<p>Applies ECL checkbox styling class to the option.</p>\n"
27131
- }
27132
- }
27133
- },
27134
- "relationships": {
27135
- "incoming": [],
27136
- "outgoing": [
27137
- {
27138
- "name": "ECLBaseDirective",
27139
- "type": "directive"
27140
- }
27141
- ]
27142
- }
27143
- },
27144
- {
27145
- "name": "EclNavigationListImageDirective",
27146
- "id": "directive-EclNavigationListImageDirective-9cb3681323fae8e533ce375b3729896913f79a0a618674c55b8206cd78a12259138517e880b3cc808951adad470cb5e9c9531fbdfb4363027da6fc89d9bde452",
27147
- "file": "packages/ecl/components/ecl-navigation-list/ecl-navigation-list-picture.directive.ts",
27148
- "type": "directive",
27149
- "description": "<p>This directive adds specific class to the image element, used in &#39;ecl-navigation-list-item&#39;.</p>\n",
27150
- "rawdescription": "\n\nThis directive adds specific class to the image element, used in 'ecl-navigation-list-item'.\n",
27151
- "sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * This directive adds specific class to the picture element, used in 'ecl-navigation-list-item'.\n */\n@Directive({\n selector: 'picture[eclNavigationListPicture]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclNavigationListPictureDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-picture ecl-navigation-list__picture')].join(' ').trim();\n }\n}\n\n/**\n * This directive adds specific class to the image element, used in 'ecl-navigation-list-item'.\n */\n@Directive({\n selector: 'img[eclNavigationListImage]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclNavigationListImageDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-navigation-list__image')].join(' ').trim();\n }\n}\n",
27152
- "selector": "img[eclNavigationListImage]",
27153
- "providers": [],
27154
- "hostDirectives": [],
27155
- "standalone": false,
27156
- "inputsClass": [
26883
+ {
26884
+ "coverageIgnore": false,
26885
+ "name": "class",
26886
+ "deprecated": false,
26887
+ "deprecationMessage": "",
26888
+ "rawdescription": "\n",
26889
+ "description": "",
26890
+ "line": 8,
26891
+ "type": "string",
26892
+ "decorators": [],
26893
+ "inheritance": {
26894
+ "file": "ECLBaseDirective"
26895
+ }
26896
+ },
26897
+ {
26898
+ "coverageIgnore": false,
26899
+ "name": "e2eAttr",
26900
+ "deprecated": false,
26901
+ "deprecationMessage": "",
26902
+ "rawdescription": "\n",
26903
+ "description": "",
26904
+ "line": 10,
26905
+ "type": "any",
26906
+ "decorators": [],
26907
+ "inheritance": {
26908
+ "file": "ECLBaseDirective"
26909
+ }
26910
+ },
26911
+ {
26912
+ "coverageIgnore": false,
26913
+ "required": false,
26914
+ "name": "tabindex",
26915
+ "deprecated": false,
26916
+ "deprecationMessage": "",
26917
+ "rawdescription": "\n",
26918
+ "description": "",
26919
+ "line": 13,
26920
+ "type": "number",
26921
+ "decorators": [],
26922
+ "inheritance": {
26923
+ "file": "ECLBaseDirective"
26924
+ }
26925
+ }
26926
+ ],
26927
+ "outputsClass": [],
26928
+ "deprecated": false,
26929
+ "deprecationMessage": "",
26930
+ "hostBindings": [],
26931
+ "hostListeners": [],
26932
+ "propertiesClass": [
26933
+ {
26934
+ "name": "eclOptionItems",
26935
+ "coverageIgnore": false,
26936
+ "defaultValue": "contentChildren(forwardRef(() => EclMultiselectOptionDirective))",
26937
+ "deprecated": false,
26938
+ "deprecationMessage": "",
26939
+ "type": "unknown",
26940
+ "indexKey": "",
26941
+ "optional": false,
26942
+ "description": "<p>Nested option directives (used for optgroups).</p>\n",
26943
+ "line": 21,
26944
+ "rawdescription": "\n\nNested option directives (used for optgroups).\n",
26945
+ "modifierKind": [
26946
+ 148
26947
+ ]
26948
+ }
26949
+ ],
26950
+ "methodsClass": [
26951
+ {
26952
+ "name": "isOptGroup",
26953
+ "coverageIgnore": false,
26954
+ "args": [],
26955
+ "optional": false,
26956
+ "returnType": "boolean",
26957
+ "typeParameters": [],
26958
+ "line": 55,
26959
+ "deprecated": false,
26960
+ "deprecationMessage": "",
26961
+ "rawdescription": "\n\nReturns true if this directive is applied to an <optgroup> element.\n",
26962
+ "description": "<p>Returns true if this directive is applied to an <optgroup> element.</p>\n"
26963
+ },
26964
+ {
26965
+ "name": "getCssClasses",
26966
+ "coverageIgnore": false,
26967
+ "args": [
26968
+ {
26969
+ "name": "rootClass",
26970
+ "type": "string",
26971
+ "optional": false,
26972
+ "dotDotDotToken": false,
26973
+ "deprecated": false,
26974
+ "deprecationMessage": ""
26975
+ }
26976
+ ],
26977
+ "optional": false,
26978
+ "returnType": "string",
26979
+ "typeParameters": [],
26980
+ "line": 15,
26981
+ "deprecated": false,
26982
+ "deprecationMessage": "",
26983
+ "rawdescription": "\n",
26984
+ "description": "",
26985
+ "jsdoctags": [
26986
+ {
26987
+ "name": "rootClass",
26988
+ "type": "string",
26989
+ "optional": false,
26990
+ "dotDotDotToken": false,
26991
+ "deprecated": false,
26992
+ "deprecationMessage": "",
26993
+ "tagName": {
26994
+ "text": "param"
26995
+ }
26996
+ }
26997
+ ],
26998
+ "inheritance": {
26999
+ "file": "ECLBaseDirective"
27000
+ }
27001
+ }
27002
+ ],
27003
+ "coverageIgnore": false,
27004
+ "jsdoctags": [
27005
+ {
27006
+ "pos": 168,
27007
+ "end": 333,
27008
+ "kind": 321,
27009
+ "id": 0,
27010
+ "flags": 16777216,
27011
+ "modifierFlagsCache": 0,
27012
+ "transformFlags": 0,
27013
+ "comment": "Directive used to decorate <option> and <optgroup> elements within a multiselect.\nAdds support for value, label, disabled, selected states and styling."
27014
+ }
27015
+ ],
27016
+ "extends": [
27017
+ "ECLBaseDirective"
27018
+ ],
27019
+ "accessors": {
27020
+ "cssClasses": {
27021
+ "name": "cssClasses",
27022
+ "getSignature": {
27023
+ "name": "cssClasses",
27024
+ "type": "string",
27025
+ "returnType": "string",
27026
+ "line": 46,
27027
+ "rawdescription": "\n\nApplies ECL checkbox styling class to the option.\n",
27028
+ "description": "<p>Applies ECL checkbox styling class to the option.</p>\n"
27029
+ }
27030
+ }
27031
+ },
27032
+ "relationships": {
27033
+ "incoming": [],
27034
+ "outgoing": [
27035
+ {
27036
+ "name": "ECLBaseDirective",
27037
+ "type": "directive"
27038
+ }
27039
+ ]
27040
+ }
27041
+ },
27042
+ {
27043
+ "name": "EclNavigationListImageDirective",
27044
+ "id": "directive-EclNavigationListImageDirective-9cb3681323fae8e533ce375b3729896913f79a0a618674c55b8206cd78a12259138517e880b3cc808951adad470cb5e9c9531fbdfb4363027da6fc89d9bde452",
27045
+ "file": "packages/ecl/components/ecl-navigation-list/ecl-navigation-list-picture.directive.ts",
27046
+ "type": "directive",
27047
+ "description": "<p>This directive adds specific class to the image element, used in &#39;ecl-navigation-list-item&#39;.</p>\n",
27048
+ "rawdescription": "\n\nThis directive adds specific class to the image element, used in 'ecl-navigation-list-item'.\n",
27049
+ "sourceCode": "import { Directive } from '@angular/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\n\n/**\n * This directive adds specific class to the picture element, used in 'ecl-navigation-list-item'.\n */\n@Directive({\n selector: 'picture[eclNavigationListPicture]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclNavigationListPictureDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-picture ecl-navigation-list__picture')].join(' ').trim();\n }\n}\n\n/**\n * This directive adds specific class to the image element, used in 'ecl-navigation-list-item'.\n */\n@Directive({\n selector: 'img[eclNavigationListImage]',\n host: {\n '[class]': 'cssClasses',\n },\n})\nexport class EclNavigationListImageDirective extends ECLBaseDirective {\n get cssClasses(): string {\n return [super.getCssClasses('ecl-navigation-list__image')].join(' ').trim();\n }\n}\n",
27050
+ "selector": "img[eclNavigationListImage]",
27051
+ "providers": [],
27052
+ "hostDirectives": [],
27053
+ "standalone": false,
27054
+ "inputsClass": [
27157
27055
  {
27158
27056
  "coverageIgnore": false,
27159
27057
  "name": "class",
@@ -65811,12 +65709,13 @@
65811
65709
  },
65812
65710
  {
65813
65711
  "name": "EclMultiselectComponent",
65814
- "id": "component-EclMultiselectComponent-84ee2ba58e6be588ac6285fe9dacced7fd5818c9efa739c676e2d2060b967f68577540432304bbb7c9ee4c10273565a0be4414b11d2dbce84a74152e92380830",
65712
+ "id": "component-EclMultiselectComponent-9f13ff28d7eec9996acc2bef9dab276820f8a649482f8ba00072c1c1996e5fb5809989fd7252ca4e565a1fd47a595fa9ee68fcaf270b7d53960f7ab549d15b7f",
65815
65713
  "file": "packages/ecl/components/ecl-multiselect/ecl-multiselect.component.ts",
65816
65714
  "encapsulation": [
65817
65715
  "ViewEncapsulation.None"
65818
65716
  ],
65819
65717
  "entryComponents": [],
65718
+ "host": {},
65820
65719
  "inputs": [],
65821
65720
  "outputs": [],
65822
65721
  "providers": [
@@ -65835,88 +65734,126 @@
65835
65734
  "hostDirectives": [],
65836
65735
  "inputsClass": [
65837
65736
  {
65737
+ "name": "ariaDescribedby",
65838
65738
  "coverageIgnore": false,
65839
- "name": "counterLabel",
65739
+ "defaultValue": "undefined",
65840
65740
  "deprecated": false,
65841
65741
  "deprecationMessage": "",
65842
- "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: 'ecl.multiselect.SELECTED'.\n",
65843
- "description": "<p>Label for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: &#39;ecl.multiselect.SELECTED&#39;.</p>\n",
65844
- "line": 151,
65845
- "type": "string",
65846
- "decorators": []
65742
+ "type": "string | undefined",
65743
+ "indexKey": "",
65744
+ "optional": false,
65745
+ "description": "<p>Defines the <code>aria-describedby</code> attribute for accessibility.</p>\n",
65746
+ "line": 42,
65747
+ "rawdescription": "\n\nDefines the `aria-describedby` attribute for accessibility.\n",
65748
+ "modifierKind": [
65749
+ 148
65750
+ ],
65751
+ "required": false
65847
65752
  },
65848
65753
  {
65754
+ "name": "counterLabel",
65849
65755
  "coverageIgnore": false,
65850
- "name": "disabled",
65756
+ "defaultValue": "'ecl.multiselect.SELECTED'",
65851
65757
  "deprecated": false,
65852
65758
  "deprecationMessage": "",
65853
- "rawdescription": "\n\nDisables the multiselect component when set to true.\n",
65854
- "description": "<p>Disables the multiselect component when set to true.</p>\n",
65855
- "line": 71,
65856
- "type": "BooleanInput",
65857
- "decorators": []
65759
+ "type": "string",
65760
+ "indexKey": "",
65761
+ "optional": false,
65762
+ "description": "<p>Label for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: &#39;ecl.multiselect.SELECTED&#39;.</p>\n",
65763
+ "line": 98,
65764
+ "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: 'ecl.multiselect.SELECTED'.\n",
65765
+ "modifierKind": [
65766
+ 148
65767
+ ],
65768
+ "required": false
65858
65769
  },
65859
65770
  {
65771
+ "name": "disabled",
65860
65772
  "coverageIgnore": false,
65861
- "name": "eclPlaceholder",
65773
+ "defaultValue": "false",
65862
65774
  "deprecated": false,
65863
65775
  "deprecationMessage": "",
65864
- "rawdescription": "\n\nPlaceholder text to show in the multiselect input field when no options are selected.\n",
65865
- "description": "<p>Placeholder text to show in the multiselect input field when no options are selected.</p>\n",
65866
- "line": 131,
65867
- "type": "string",
65868
- "decorators": []
65776
+ "type": "boolean",
65777
+ "indexKey": "",
65778
+ "optional": false,
65779
+ "description": "<p>Disables the multiselect component when set to true.</p>\n",
65780
+ "line": 62,
65781
+ "rawdescription": "\n\nDisables the multiselect component when set to true.\n",
65782
+ "modifierKind": [
65783
+ 148
65784
+ ],
65785
+ "required": false
65869
65786
  },
65870
65787
  {
65788
+ "name": "eclPlaceholder",
65871
65789
  "coverageIgnore": false,
65872
- "required": false,
65873
- "name": "hasSearchBox",
65790
+ "defaultValue": "'Select item'",
65874
65791
  "deprecated": false,
65875
65792
  "deprecationMessage": "",
65876
- "rawdescription": "\n\nEnables the search box within the dropdown.\n",
65877
- "description": "<p>Enables the search box within the dropdown.</p>\n",
65878
- "line": 98,
65879
65793
  "type": "string",
65880
- "decorators": []
65794
+ "indexKey": "",
65795
+ "optional": false,
65796
+ "description": "<p>Placeholder text to show in the multiselect input field when no options are selected.</p>\n",
65797
+ "line": 87,
65798
+ "rawdescription": "\n\nPlaceholder text to show in the multiselect input field when no options are selected.\n",
65799
+ "modifierKind": [
65800
+ 148
65801
+ ],
65802
+ "required": false
65881
65803
  },
65882
65804
  {
65805
+ "name": "eclSize",
65883
65806
  "coverageIgnore": false,
65884
- "required": false,
65885
- "name": "hasSelectAll",
65807
+ "defaultValue": "'m'",
65886
65808
  "deprecated": false,
65887
65809
  "deprecationMessage": "",
65888
- "rawdescription": "\n\nDisplays the \"Select all\" option in the dropdown.\n",
65889
- "description": "<p>Displays the &quot;Select all&quot; option in the dropdown.</p>\n",
65890
- "line": 109,
65891
65810
  "type": "string",
65892
- "decorators": []
65811
+ "indexKey": "",
65812
+ "optional": false,
65813
+ "description": "<p>Multiselect size: &#39;s&#39; | &#39;m&#39; | &#39;l&#39;. Default is &#39;m&#39;.</p>\n",
65814
+ "line": 92,
65815
+ "rawdescription": "\n\nMultiselect size: 's' | 'm' | 'l'. Default is 'm'.\n",
65816
+ "modifierKind": [
65817
+ 148
65818
+ ],
65819
+ "required": false
65893
65820
  },
65894
65821
  {
65822
+ "name": "hasSearchBox",
65895
65823
  "coverageIgnore": false,
65896
- "required": false,
65897
- "name": "isInvalid",
65824
+ "defaultValue": "true",
65898
65825
  "deprecated": false,
65899
65826
  "deprecationMessage": "",
65900
- "rawdescription": "\n\nMarks the multiselect as invalid.\n",
65901
- "description": "<p>Marks the multiselect as invalid.</p>\n",
65902
- "line": 56,
65903
- "type": "boolean | undefined",
65904
- "decorators": []
65827
+ "type": "boolean",
65828
+ "indexKey": "",
65829
+ "optional": false,
65830
+ "description": "<p>Enables the search box within the dropdown.</p>\n",
65831
+ "line": 72,
65832
+ "rawdescription": "\n\nEnables the search box within the dropdown.\n",
65833
+ "modifierKind": [
65834
+ 148
65835
+ ],
65836
+ "required": false
65905
65837
  },
65906
65838
  {
65839
+ "name": "hasSelectAll",
65907
65840
  "coverageIgnore": false,
65908
- "required": false,
65909
- "name": "isSubmitOnApply",
65841
+ "defaultValue": "true",
65910
65842
  "deprecated": false,
65911
65843
  "deprecationMessage": "",
65912
- "rawdescription": "\n\nWhen true, the Apply button in the dropdown acts as a submit button (type=\"submit\").\n",
65913
- "description": "<p>When true, the Apply button in the dropdown acts as a submit button (type=&quot;submit&quot;).</p>\n",
65914
- "line": 120,
65915
- "type": "string",
65916
- "decorators": []
65844
+ "type": "boolean",
65845
+ "indexKey": "",
65846
+ "optional": false,
65847
+ "description": "<p>Displays the &quot;Select all&quot; option in the dropdown.</p>\n",
65848
+ "line": 77,
65849
+ "rawdescription": "\n\nDisplays the \"Select all\" option in the dropdown.\n",
65850
+ "modifierKind": [
65851
+ 148
65852
+ ],
65853
+ "required": false
65917
65854
  },
65918
65855
  {
65919
- "name": "ariaDescribedby",
65856
+ "name": "id",
65920
65857
  "coverageIgnore": false,
65921
65858
  "defaultValue": "undefined",
65922
65859
  "deprecated": false,
@@ -65924,43 +65861,43 @@
65924
65861
  "type": "string | undefined",
65925
65862
  "indexKey": "",
65926
65863
  "optional": false,
65927
- "description": "<p>Defines the <code>aria-describedby</code> attribute for accessibility.</p>\n",
65928
- "line": 40,
65929
- "rawdescription": "\n\nDefines the `aria-describedby` attribute for accessibility.\n",
65864
+ "description": "<p>Sets the <code>id</code> attribute of the multiselect component.</p>\n",
65865
+ "line": 47,
65866
+ "rawdescription": "\n\nSets the `id` attribute of the multiselect component.\n",
65930
65867
  "modifierKind": [
65931
65868
  148
65932
65869
  ],
65933
65870
  "required": false
65934
65871
  },
65935
65872
  {
65936
- "name": "eclSize",
65873
+ "name": "isInvalid",
65937
65874
  "coverageIgnore": false,
65938
- "defaultValue": "'m'",
65875
+ "defaultValue": "false",
65939
65876
  "deprecated": false,
65940
65877
  "deprecationMessage": "",
65941
- "type": "string",
65878
+ "type": "boolean",
65942
65879
  "indexKey": "",
65943
65880
  "optional": false,
65944
- "description": "<p>Multiselect size: &#39;s&#39; | &#39;m&#39; | &#39;l&#39;. Default is &#39;m&#39;.</p>\n",
65945
- "line": 144,
65946
- "rawdescription": "\n\nMultiselect size: 's' | 'm' | 'l'. Default is 'm'.\n",
65881
+ "description": "<p>Marks the multiselect as invalid.</p>\n",
65882
+ "line": 57,
65883
+ "rawdescription": "\n\nMarks the multiselect as invalid.\n",
65947
65884
  "modifierKind": [
65948
65885
  148
65949
65886
  ],
65950
65887
  "required": false
65951
65888
  },
65952
65889
  {
65953
- "name": "id",
65890
+ "name": "isSubmitOnApply",
65954
65891
  "coverageIgnore": false,
65955
- "defaultValue": "undefined",
65892
+ "defaultValue": "false",
65956
65893
  "deprecated": false,
65957
65894
  "deprecationMessage": "",
65958
- "type": "string | undefined",
65895
+ "type": "boolean",
65959
65896
  "indexKey": "",
65960
65897
  "optional": false,
65961
- "description": "<p>Sets the <code>id</code> attribute of the multiselect component.</p>\n",
65962
- "line": 45,
65963
- "rawdescription": "\n\nSets the `id` attribute of the multiselect component.\n",
65898
+ "description": "<p>When true, the Apply button in the dropdown acts as a submit button (type=&quot;submit&quot;).</p>\n",
65899
+ "line": 82,
65900
+ "rawdescription": "\n\nWhen true, the Apply button in the dropdown acts as a submit button (type=\"submit\").\n",
65964
65901
  "modifierKind": [
65965
65902
  148
65966
65903
  ],
@@ -65976,7 +65913,7 @@
65976
65913
  "indexKey": "",
65977
65914
  "optional": false,
65978
65915
  "description": "<p>Label used for the toggle button that expands or collapses the dropdown.</p>\n",
65979
- "line": 50,
65916
+ "line": 52,
65980
65917
  "rawdescription": "\n\nLabel used for the toggle button that expands or collapses the dropdown.\n",
65981
65918
  "modifierKind": [
65982
65919
  148
@@ -66037,7 +65974,7 @@
66037
65974
  "indexKey": "",
66038
65975
  "optional": false,
66039
65976
  "description": "<p>Emits an array of selected option values when the selection changes.</p>\n",
66040
- "line": 92,
65977
+ "line": 67,
66041
65978
  "rawdescription": "\n\nEmits an array of selected option values when the selection changes.\n",
66042
65979
  "modifierKind": [
66043
65980
  148
@@ -66056,24 +65993,11 @@
66056
65993
  "indexKey": "",
66057
65994
  "optional": false,
66058
65995
  "description": "<p>List of option directives projected into the component.</p>\n",
66059
- "line": 35,
65996
+ "line": 37,
66060
65997
  "rawdescription": "\n\nList of option directives projected into the component.\n",
66061
65998
  "modifierKind": [
66062
65999
  148
66063
66000
  ]
66064
- },
66065
- {
66066
- "name": "injector",
66067
- "coverageIgnore": false,
66068
- "defaultValue": "inject(Injector)",
66069
- "deprecated": false,
66070
- "deprecationMessage": "",
66071
- "type": "unknown",
66072
- "indexKey": "",
66073
- "optional": false,
66074
- "description": "",
66075
- "line": 30,
66076
- "rawdescription": "\n"
66077
66001
  }
66078
66002
  ],
66079
66003
  "methodsClass": [
@@ -66084,7 +66008,7 @@
66084
66008
  "optional": false,
66085
66009
  "returnType": "void",
66086
66010
  "typeParameters": [],
66087
- "line": 193,
66011
+ "line": 146,
66088
66012
  "deprecated": false,
66089
66013
  "deprecationMessage": "",
66090
66014
  "rawdescription": "\n",
@@ -66097,7 +66021,7 @@
66097
66021
  "optional": false,
66098
66022
  "returnType": "void",
66099
66023
  "typeParameters": [],
66100
- "line": 212,
66024
+ "line": 165,
66101
66025
  "deprecated": false,
66102
66026
  "deprecationMessage": "",
66103
66027
  "rawdescription": "\n",
@@ -66110,7 +66034,7 @@
66110
66034
  "optional": false,
66111
66035
  "returnType": "void",
66112
66036
  "typeParameters": [],
66113
- "line": 203,
66037
+ "line": 156,
66114
66038
  "deprecated": false,
66115
66039
  "deprecationMessage": "",
66116
66040
  "rawdescription": "\n",
@@ -66158,34 +66082,21 @@
66158
66082
  "coverageIgnore": false,
66159
66083
  "deprecated": false,
66160
66084
  "deprecationMessage": "",
66161
- "hostBindings": [
66162
- {
66163
- "coverageIgnore": false,
66164
- "name": "class",
66165
- "actualName": "cssClasses",
66166
- "deprecated": false,
66167
- "deprecationMessage": "",
66168
- "rawdescription": "\n\nCSS classes applied to the host element.\n",
66169
- "description": "<p>CSS classes applied to the host element.</p>\n",
66170
- "line": 85,
66171
- "type": "string",
66172
- "decorators": []
66173
- }
66174
- ],
66085
+ "hostBindings": [],
66175
66086
  "hostListeners": [],
66176
66087
  "standalone": false,
66177
66088
  "imports": [],
66178
66089
  "description": "<p>Component representing a custom multiselect input using the ECL design system.</p>\n<p>Should be used on a native <select> element to enhance it with ECL multiselect behavior.\nReplaces the original element with a custom dropdown rendered dynamically.</p>\n",
66179
66090
  "rawdescription": "\n\nComponent representing a custom multiselect input using the ECL design system.\n\nShould be used on a native <select> element to enhance it with ECL multiselect behavior.\nReplaces the original element with a custom dropdown rendered dynamically.\n",
66180
66091
  "type": "component",
66181
- "sourceCode": "import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Component, DoCheck, ElementRef, HostBinding, Injector, Input, IterableDiffer, IterableDiffers, OnDestroy, OnInit, PLATFORM_ID, Renderer2, ViewContainerRef, ViewEncapsulation, afterNextRender, booleanAttribute, forwardRef, inject, output, input, contentChildren } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMultiselectDropdownComponent } from './ecl-multiselect-dropdown/ecl-multiselect-dropdown.component';\nimport { EclMultiselectOptionDirective } from './ecl-multiselect-option.directive';\n\n/**\n * Component representing a custom multiselect input using the ECL design system.\n *\n * Should be used on a native <select> element to enhance it with ECL multiselect behavior.\n * Replaces the original element with a custom dropdown rendered dynamically.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'select[eclMultiselect]',\n templateUrl: 'ecl-multiselect.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclMultiselectComponent),\n multi: true,\n },\n ],\n})\nexport class EclMultiselectComponent extends ECLBaseDirective implements DoCheck, OnInit, OnDestroy {\n injector = inject(Injector);\n\n /**\n * List of option directives projected into the component.\n */\n readonly eclOptionItems = contentChildren(forwardRef(() => EclMultiselectOptionDirective));\n\n /**\n * Defines the `aria-describedby` attribute for accessibility.\n */\n readonly ariaDescribedby = input<string | undefined>(undefined);\n\n /**\n * Sets the `id` attribute of the multiselect component.\n */\n readonly id = input<string | undefined>(undefined);\n\n /**\n * Label used for the toggle button that expands or collapses the dropdown.\n */\n readonly toggleLabel = input<string | undefined>(undefined);\n\n /**\n * Marks the multiselect as invalid.\n */\n @Input({ transform: booleanAttribute })\n get isInvalid(): boolean | undefined {\n return this._isInvalid;\n }\n set isInvalid(value: boolean | undefined) {\n this._isInvalid = value;\n if (this.multiselectComponent) {\n this.multiselectComponent.isInvalid = value;\n }\n }\n\n /**\n * Disables the multiselect component when set to true.\n */\n @Input()\n @HostBinding('attr.disabled')\n set disabled(value: BooleanInput) {\n if (this.multiselectComponent) {\n this.multiselectComponent.disabled = coerceBooleanProperty(value);\n }\n this._disabled = coerceBooleanProperty(value);\n }\n get disabled(): boolean | undefined {\n return this._disabled || undefined;\n }\n\n /**\n * CSS classes applied to the host element.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-select')].join(' ').trim();\n }\n\n /**\n * Emits an array of selected option values when the selection changes.\n */\n readonly eclChange = output<string[]>();\n\n /**\n * Enables the search box within the dropdown.\n */\n @Input({ transform: booleanAttribute })\n set hasSearchBox(value: string) {\n if (this.multiselectComponent) {\n this.multiselectComponent.hasSearchBox = coerceBooleanProperty(value);\n }\n this._hasSearchBox = coerceBooleanProperty(value);\n }\n\n /**\n * Displays the \"Select all\" option in the dropdown.\n */\n @Input({ transform: booleanAttribute })\n set hasSelectAll(value: string) {\n if (this.multiselectComponent) {\n this.multiselectComponent.hasSelectAll = coerceBooleanProperty(value);\n }\n this._hasSelectAll = coerceBooleanProperty(value);\n }\n\n /**\n * When true, the Apply button in the dropdown acts as a submit button (type=\"submit\").\n */\n @Input({ transform: booleanAttribute })\n set isSubmitOnApply(value: string) {\n if (this.multiselectComponent) {\n this.multiselectComponent.isSubmitOnApply.set(coerceBooleanProperty(value));\n }\n this._isSubmitOnApply = coerceBooleanProperty(value);\n }\n\n /**\n * Placeholder text to show in the multiselect input field when no options are selected.\n */\n @Input()\n set eclPlaceholder(value: string) {\n this._eclPlaceholder = value;\n if (this.multiselectComponent) {\n this.multiselectComponent.mainInputPlaceholder = value;\n }\n }\n get eclPlaceholder(): string {\n return this._eclPlaceholder;\n }\n\n /**\n * Multiselect size: 's' | 'm' | 'l'. Default is 'm'.\n */\n readonly eclSize = input('m');\n\n /**\n * Label for the selections counter, read by screen readers.\n * Accepts a translation key or plain text. Default: 'ecl.multiselect.SELECTED'.\n */\n @Input()\n set counterLabel(value: string) {\n this._counterLabel = value;\n if (this.multiselectComponent) {\n this.multiselectComponent.counterLabel = value;\n }\n }\n\n private readonly SELECT_CONTAINER_CLASS = 'ecl-select__container';\n private readonly SELECT_CONTAINER_HIDDEN_CLASS = 'ecl-select__container--hidden';\n private _disabled = false;\n private _hasSelectAll = true;\n private _hasSearchBox = true;\n private _isSubmitOnApply = false;\n private _counterLabel = 'ecl.multiselect.SELECTED';\n private _isInvalid = false;\n private _eclPlaceholder = 'Select item';\n private differ: IterableDiffer<EclMultiselectOptionDirective>;\n private multiselectComponent: EclMultiselectDropdownComponent;\n private hostEl: HTMLSelectElement;\n private hostParentEl: HTMLElement;\n private hostWrapperEl: HTMLElement;\n private multiselectComponentHtml: HTMLDivElement;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private el = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private differs = inject(IterableDiffers);\n private renderer = inject(Renderer2);\n private platformId = inject(PLATFORM_ID);\n\n constructor() {\n super();\n this.differ = this.differs.find([]).create();\n afterNextRender(() => {\n this.attachOptions();\n if (this.hostParentEl != null) {\n this.hideOriginalSelectComponent();\n this.renderer.insertBefore(this.hostParentEl, this.multiselectComponentHtml, this.hostWrapperEl);\n this.setAriaLabelledBy();\n }\n });\n }\n\n ngDoCheck(): void {\n const diff = this.differ.diff(this.eclOptionItems());\n\n if (diff) {\n if (this.multiselectComponent) {\n this.multiselectComponent.multiOptionDirectives.set(Array.from(this.eclOptionItems()));\n }\n }\n }\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.hostEl = this.getHostElement();\n this.hostParentEl = this.getHostParentElement(this.hostEl);\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.multiselectComponentHtml = this.createMultiselectComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private hideOriginalSelectComponent(): void {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.renderer.addClass(this.hostWrapperEl, this.SELECT_CONTAINER_HIDDEN_CLASS);\n this.renderer.setAttribute(this.hostWrapperEl, 'tabindex', '-1');\n this.renderer.setAttribute(this.hostEl, 'tabindex', '-1');\n }\n\n private createHostWrapperContainer(): HTMLElement {\n const wrapperContainer = this.renderer.createElement('div');\n this.renderer.addClass(wrapperContainer, this.SELECT_CONTAINER_CLASS);\n this.renderer.addClass(wrapperContainer, `${this.SELECT_CONTAINER_CLASS}--${this.eclSize()}`);\n return wrapperContainer;\n }\n\n private getHostElement(): HTMLSelectElement {\n return this.el.nativeElement;\n }\n\n private getHostParentElement(hostEl: HTMLSelectElement): HTMLElement {\n return hostEl.parentElement;\n }\n\n private createMultiselectComponent(): HTMLDivElement {\n const ngControl = this.injector.get(NgControl, undefined, { optional: true });\n const multiselect = this.viewContainerRef.createComponent(EclMultiselectDropdownComponent);\n this.multiselectComponent = multiselect.instance;\n this.multiselectComponent.eclChange.pipe(takeUntil(this.destroy$)).subscribe((evt) => {\n this.eclChange.emit(evt);\n });\n this.multiselectComponent.mainInputPlaceholder = this.eclPlaceholder;\n\n const ariaDescribedby = this.ariaDescribedby();\n if (ariaDescribedby !== undefined) {\n this.multiselectComponent.ariaDescribedby = ariaDescribedby;\n }\n const toggleLabel = this.toggleLabel();\n if (toggleLabel !== undefined) {\n this.multiselectComponent.toggleLabel = toggleLabel;\n }\n const id = this.id();\n if (id !== undefined) {\n this.multiselectComponent.id = id;\n }\n this.multiselectComponent.eclSize = this.eclSize();\n if (ngControl) {\n ngControl.valueAccessor = this.multiselectComponent;\n }\n multiselect.instance.disabled = this.disabled;\n multiselect.instance.isInvalid = this.isInvalid;\n multiselect.instance.hasSearchBox = this._hasSearchBox;\n multiselect.instance.hasSelectAll = this._hasSelectAll;\n multiselect.instance.isSubmitOnApply.set(this._isSubmitOnApply);\n multiselect.instance.counterLabel = this._counterLabel;\n return (multiselect.location as ElementRef<HTMLDivElement>).nativeElement;\n }\n\n private setAriaLabelledBy(): void {\n const hostSelect: HTMLElement = this.el.nativeElement;\n const formGroup = hostSelect.closest('.ecl-form-group') as HTMLElement | null;\n if (!formGroup) return;\n\n const label = formGroup.querySelector('.ecl-form-label') as HTMLElement | null;\n if (!label) return;\n\n if (!label.id) {\n const newLabelId = `ecl-select-label-${crypto.randomUUID()}`;\n this.renderer.setAttribute(label, 'id', newLabelId);\n }\n\n if (!hostSelect.id) {\n const newSelectId = `ecl-select-input-${crypto.randomUUID()}`;\n this.renderer.setAttribute(hostSelect, 'id', newSelectId);\n }\n\n const labelledBy = `${label.id} ${hostSelect.id}`.trim();\n this.renderer.setAttribute(hostSelect, 'aria-labelledby', labelledBy);\n }\n\n private attachOptions(): void {\n setTimeout(() => {\n this.multiselectComponent.multiOptionDirectives.set(Array.from(this.eclOptionItems()));\n });\n }\n}\n",
66092
+ "sourceCode": "import { isPlatformBrowser } from '@angular/common';\nimport { Component, DoCheck, effect, ElementRef, Injector, IterableDiffer, IterableDiffers, OnDestroy, OnInit, PLATFORM_ID, Renderer2, ViewContainerRef, ViewEncapsulation, afterNextRender, booleanAttribute, forwardRef, inject, output, input, contentChildren } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMultiselectDropdownComponent } from './ecl-multiselect-dropdown/ecl-multiselect-dropdown.component';\nimport { EclMultiselectOptionDirective } from './ecl-multiselect-option.directive';\n\n/**\n * Component representing a custom multiselect input using the ECL design system.\n *\n * Should be used on a native <select> element to enhance it with ECL multiselect behavior.\n * Replaces the original element with a custom dropdown rendered dynamically.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'select[eclMultiselect]',\n templateUrl: 'ecl-multiselect.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclMultiselectComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'cssClasses',\n '[attr.disabled]': 'disabled() || null',\n },\n})\nexport class EclMultiselectComponent extends ECLBaseDirective implements DoCheck, OnInit, OnDestroy {\n\n /**\n * List of option directives projected into the component.\n */\n readonly eclOptionItems = contentChildren(forwardRef(() => EclMultiselectOptionDirective));\n\n /**\n * Defines the `aria-describedby` attribute for accessibility.\n */\n readonly ariaDescribedby = input<string | undefined>(undefined);\n\n /**\n * Sets the `id` attribute of the multiselect component.\n */\n readonly id = input<string | undefined>(undefined);\n\n /**\n * Label used for the toggle button that expands or collapses the dropdown.\n */\n readonly toggleLabel = input<string | undefined>(undefined);\n\n /**\n * Marks the multiselect as invalid.\n */\n readonly isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Disables the multiselect component when set to true.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Emits an array of selected option values when the selection changes.\n */\n readonly eclChange = output<string[]>();\n\n /**\n * Enables the search box within the dropdown.\n */\n readonly hasSearchBox = input(true, { transform: booleanAttribute });\n\n /**\n * Displays the \"Select all\" option in the dropdown.\n */\n readonly hasSelectAll = input(true, { transform: booleanAttribute });\n\n /**\n * When true, the Apply button in the dropdown acts as a submit button (type=\"submit\").\n */\n readonly isSubmitOnApply = input(false, { transform: booleanAttribute });\n\n /**\n * Placeholder text to show in the multiselect input field when no options are selected.\n */\n readonly eclPlaceholder = input('Select item');\n\n /**\n * Multiselect size: 's' | 'm' | 'l'. Default is 'm'.\n */\n readonly eclSize = input('m');\n\n /**\n * Label for the selections counter, read by screen readers.\n * Accepts a translation key or plain text. Default: 'ecl.multiselect.SELECTED'.\n */\n readonly counterLabel = input('ecl.multiselect.SELECTED');\n\n private readonly SELECT_CONTAINER_CLASS = 'ecl-select__container';\n private readonly SELECT_CONTAINER_HIDDEN_CLASS = 'ecl-select__container--hidden';\n private readonly injector = inject(Injector);\n private readonly el = inject(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly differs = inject(IterableDiffers);\n private readonly renderer = inject(Renderer2);\n private readonly platformId = inject(PLATFORM_ID);\n private differ: IterableDiffer<EclMultiselectOptionDirective>;\n private multiselectComponent: EclMultiselectDropdownComponent;\n private hostEl: HTMLSelectElement;\n private hostParentEl: HTMLElement;\n private hostWrapperEl: HTMLElement;\n private multiselectComponentHtml: HTMLDivElement;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor() {\n super();\n this.differ = this.differs.find([]).create();\n // Keep the dynamically created dropdown in sync with this component's inputs.\n // The dropdown is created lazily in ngOnInit, so the sync is guarded on its\n // instance; once created, this effect re-applies whenever any of the inputs change.\n effect(() => {\n const dropdown = this.multiselectComponent;\n if (!dropdown) {\n return;\n }\n dropdown.mainInputPlaceholder.set(this.eclPlaceholder());\n dropdown.eclSize.set(this.eclSize());\n dropdown.disabled.set(this.disabled());\n dropdown.isInvalid.set(this.isInvalid());\n dropdown.hasSearchBox.set(this.hasSearchBox());\n dropdown.hasSelectAll.set(this.hasSelectAll());\n dropdown.isSubmitOnApply.set(this.isSubmitOnApply());\n dropdown.counterLabel.set(this.counterLabel());\n });\n afterNextRender(() => {\n this.attachOptions();\n if (this.hostParentEl != null) {\n this.hideOriginalSelectComponent();\n this.renderer.insertBefore(this.hostParentEl, this.multiselectComponentHtml, this.hostWrapperEl);\n this.setAriaLabelledBy();\n }\n });\n }\n\n ngDoCheck(): void {\n const diff = this.differ.diff(this.eclOptionItems());\n\n if (diff) {\n if (this.multiselectComponent) {\n this.multiselectComponent.multiOptionDirectives.set(Array.from(this.eclOptionItems()));\n }\n }\n }\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.hostEl = this.getHostElement();\n this.hostParentEl = this.getHostParentElement(this.hostEl);\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.multiselectComponentHtml = this.createMultiselectComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * CSS classes applied to the host element.\n */\n protected get cssClasses(): string {\n return [super.getCssClasses('ecl-select')].join(' ').trim();\n }\n\n private hideOriginalSelectComponent(): void {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.renderer.addClass(this.hostWrapperEl, this.SELECT_CONTAINER_HIDDEN_CLASS);\n this.renderer.setAttribute(this.hostWrapperEl, 'tabindex', '-1');\n this.renderer.setAttribute(this.hostEl, 'tabindex', '-1');\n }\n\n private createHostWrapperContainer(): HTMLElement {\n const wrapperContainer = this.renderer.createElement('div');\n this.renderer.addClass(wrapperContainer, this.SELECT_CONTAINER_CLASS);\n this.renderer.addClass(wrapperContainer, `${this.SELECT_CONTAINER_CLASS}--${this.eclSize()}`);\n return wrapperContainer;\n }\n\n private getHostElement(): HTMLSelectElement {\n return this.el.nativeElement;\n }\n\n private getHostParentElement(hostEl: HTMLSelectElement): HTMLElement {\n return hostEl.parentElement;\n }\n\n private createMultiselectComponent(): HTMLDivElement {\n const ngControl = this.injector.get(NgControl, undefined, { optional: true });\n const multiselect = this.viewContainerRef.createComponent(EclMultiselectDropdownComponent);\n const dropdown = multiselect.instance;\n this.multiselectComponent = dropdown;\n dropdown.eclChange.subscribe((evt) => {\n this.eclChange.emit(evt);\n });\n dropdown.mainInputPlaceholder.set(this.eclPlaceholder());\n\n const ariaDescribedby = this.ariaDescribedby();\n if (ariaDescribedby !== undefined) {\n dropdown.ariaDescribedby.set(ariaDescribedby);\n }\n const toggleLabel = this.toggleLabel();\n if (toggleLabel !== undefined) {\n dropdown.toggleLabel.set(toggleLabel);\n }\n const id = this.id();\n if (id !== undefined) {\n dropdown.id.set(id);\n }\n dropdown.eclSize.set(this.eclSize());\n if (ngControl) {\n ngControl.valueAccessor = dropdown;\n }\n dropdown.disabled.set(this.disabled());\n dropdown.isInvalid.set(this.isInvalid());\n dropdown.hasSearchBox.set(this.hasSearchBox());\n dropdown.hasSelectAll.set(this.hasSelectAll());\n dropdown.isSubmitOnApply.set(this.isSubmitOnApply());\n dropdown.counterLabel.set(this.counterLabel());\n return (multiselect.location as ElementRef<HTMLDivElement>).nativeElement;\n }\n\n private setAriaLabelledBy(): void {\n const hostSelect: HTMLElement = this.el.nativeElement;\n const formGroup = hostSelect.closest('.ecl-form-group') as HTMLElement | null;\n if (!formGroup) return;\n\n const label = formGroup.querySelector('.ecl-form-label') as HTMLElement | null;\n if (!label) return;\n\n if (!label.id) {\n const newLabelId = `ecl-select-label-${crypto.randomUUID()}`;\n this.renderer.setAttribute(label, 'id', newLabelId);\n }\n\n if (!hostSelect.id) {\n const newSelectId = `ecl-select-input-${crypto.randomUUID()}`;\n this.renderer.setAttribute(hostSelect, 'id', newSelectId);\n }\n\n const labelledBy = `${label.id} ${hostSelect.id}`.trim();\n this.renderer.setAttribute(hostSelect, 'aria-labelledby', labelledBy);\n }\n\n private attachOptions(): void {\n setTimeout(() => {\n this.multiselectComponent.multiOptionDirectives.set(Array.from(this.eclOptionItems()));\n });\n }\n}\n",
66182
66093
  "assetsDirs": [],
66183
66094
  "styleUrlsData": "",
66184
66095
  "stylesData": "",
66185
66096
  "jsdoctags": [
66186
66097
  {
66187
- "pos": 778,
66188
- "end": 1040,
66098
+ "pos": 678,
66099
+ "end": 940,
66189
66100
  "kind": 321,
66190
66101
  "id": 0,
66191
66102
  "flags": 16777216,
@@ -66200,7 +66111,7 @@
66200
66111
  "deprecated": false,
66201
66112
  "deprecationMessage": "",
66202
66113
  "args": [],
66203
- "line": 178,
66114
+ "line": 114,
66204
66115
  "rawdescription": "\n"
66205
66116
  },
66206
66117
  "extends": [
@@ -66212,292 +66123,16 @@
66212
66123
  "OnDestroy"
66213
66124
  ],
66214
66125
  "accessors": {
66215
- "isInvalid": {
66216
- "name": "isInvalid",
66217
- "setSignature": {
66218
- "name": "isInvalid",
66219
- "type": "void",
66220
- "deprecated": false,
66221
- "deprecationMessage": "",
66222
- "args": [
66223
- {
66224
- "name": "value",
66225
- "type": "boolean | undefined",
66226
- "optional": false,
66227
- "dotDotDotToken": false,
66228
- "deprecated": false,
66229
- "deprecationMessage": ""
66230
- }
66231
- ],
66232
- "returnType": "void",
66233
- "line": 59,
66234
- "rawdescription": "\n",
66235
- "description": "",
66236
- "jsdoctags": [
66237
- {
66238
- "name": "value",
66239
- "type": "boolean | undefined",
66240
- "optional": false,
66241
- "dotDotDotToken": false,
66242
- "deprecated": false,
66243
- "deprecationMessage": "",
66244
- "tagName": {
66245
- "text": "param"
66246
- }
66247
- }
66248
- ]
66249
- },
66250
- "getSignature": {
66251
- "name": "isInvalid",
66252
- "type": "unknown",
66253
- "returnType": "boolean | undefined",
66254
- "line": 56,
66255
- "rawdescription": "\n\nMarks the multiselect as invalid.\n",
66256
- "description": "<p>Marks the multiselect as invalid.</p>\n"
66257
- }
66258
- },
66259
- "disabled": {
66260
- "name": "disabled",
66261
- "setSignature": {
66262
- "name": "disabled",
66263
- "type": "void",
66264
- "deprecated": false,
66265
- "deprecationMessage": "",
66266
- "args": [
66267
- {
66268
- "name": "value",
66269
- "type": "BooleanInput",
66270
- "optional": false,
66271
- "dotDotDotToken": false,
66272
- "deprecated": false,
66273
- "deprecationMessage": ""
66274
- }
66275
- ],
66276
- "returnType": "void",
66277
- "line": 71,
66278
- "rawdescription": "\n\nDisables the multiselect component when set to true.\n",
66279
- "description": "<p>Disables the multiselect component when set to true.</p>\n",
66280
- "jsdoctags": [
66281
- {
66282
- "name": "value",
66283
- "type": "BooleanInput",
66284
- "optional": false,
66285
- "dotDotDotToken": false,
66286
- "deprecated": false,
66287
- "deprecationMessage": "",
66288
- "tagName": {
66289
- "text": "param"
66290
- }
66291
- }
66292
- ]
66293
- },
66294
- "getSignature": {
66295
- "name": "disabled",
66296
- "type": "unknown",
66297
- "returnType": "boolean | undefined",
66298
- "line": 77,
66299
- "rawdescription": "\n",
66300
- "description": ""
66301
- }
66302
- },
66303
66126
  "cssClasses": {
66304
66127
  "name": "cssClasses",
66305
66128
  "getSignature": {
66306
66129
  "name": "cssClasses",
66307
66130
  "type": "string",
66308
66131
  "returnType": "string",
66309
- "line": 85,
66132
+ "line": 173,
66310
66133
  "rawdescription": "\n\nCSS classes applied to the host element.\n",
66311
66134
  "description": "<p>CSS classes applied to the host element.</p>\n"
66312
66135
  }
66313
- },
66314
- "hasSearchBox": {
66315
- "name": "hasSearchBox",
66316
- "setSignature": {
66317
- "name": "hasSearchBox",
66318
- "type": "void",
66319
- "deprecated": false,
66320
- "deprecationMessage": "",
66321
- "args": [
66322
- {
66323
- "name": "value",
66324
- "type": "string",
66325
- "optional": false,
66326
- "dotDotDotToken": false,
66327
- "deprecated": false,
66328
- "deprecationMessage": ""
66329
- }
66330
- ],
66331
- "returnType": "void",
66332
- "line": 98,
66333
- "rawdescription": "\n\nEnables the search box within the dropdown.\n",
66334
- "description": "<p>Enables the search box within the dropdown.</p>\n",
66335
- "jsdoctags": [
66336
- {
66337
- "name": "value",
66338
- "type": "string",
66339
- "optional": false,
66340
- "dotDotDotToken": false,
66341
- "deprecated": false,
66342
- "deprecationMessage": "",
66343
- "tagName": {
66344
- "text": "param"
66345
- }
66346
- }
66347
- ]
66348
- }
66349
- },
66350
- "hasSelectAll": {
66351
- "name": "hasSelectAll",
66352
- "setSignature": {
66353
- "name": "hasSelectAll",
66354
- "type": "void",
66355
- "deprecated": false,
66356
- "deprecationMessage": "",
66357
- "args": [
66358
- {
66359
- "name": "value",
66360
- "type": "string",
66361
- "optional": false,
66362
- "dotDotDotToken": false,
66363
- "deprecated": false,
66364
- "deprecationMessage": ""
66365
- }
66366
- ],
66367
- "returnType": "void",
66368
- "line": 109,
66369
- "rawdescription": "\n\nDisplays the \"Select all\" option in the dropdown.\n",
66370
- "description": "<p>Displays the &quot;Select all&quot; option in the dropdown.</p>\n",
66371
- "jsdoctags": [
66372
- {
66373
- "name": "value",
66374
- "type": "string",
66375
- "optional": false,
66376
- "dotDotDotToken": false,
66377
- "deprecated": false,
66378
- "deprecationMessage": "",
66379
- "tagName": {
66380
- "text": "param"
66381
- }
66382
- }
66383
- ]
66384
- }
66385
- },
66386
- "isSubmitOnApply": {
66387
- "name": "isSubmitOnApply",
66388
- "setSignature": {
66389
- "name": "isSubmitOnApply",
66390
- "type": "void",
66391
- "deprecated": false,
66392
- "deprecationMessage": "",
66393
- "args": [
66394
- {
66395
- "name": "value",
66396
- "type": "string",
66397
- "optional": false,
66398
- "dotDotDotToken": false,
66399
- "deprecated": false,
66400
- "deprecationMessage": ""
66401
- }
66402
- ],
66403
- "returnType": "void",
66404
- "line": 120,
66405
- "rawdescription": "\n\nWhen true, the Apply button in the dropdown acts as a submit button (type=\"submit\").\n",
66406
- "description": "<p>When true, the Apply button in the dropdown acts as a submit button (type=&quot;submit&quot;).</p>\n",
66407
- "jsdoctags": [
66408
- {
66409
- "name": "value",
66410
- "type": "string",
66411
- "optional": false,
66412
- "dotDotDotToken": false,
66413
- "deprecated": false,
66414
- "deprecationMessage": "",
66415
- "tagName": {
66416
- "text": "param"
66417
- }
66418
- }
66419
- ]
66420
- }
66421
- },
66422
- "eclPlaceholder": {
66423
- "name": "eclPlaceholder",
66424
- "setSignature": {
66425
- "name": "eclPlaceholder",
66426
- "type": "void",
66427
- "deprecated": false,
66428
- "deprecationMessage": "",
66429
- "args": [
66430
- {
66431
- "name": "value",
66432
- "type": "string",
66433
- "optional": false,
66434
- "dotDotDotToken": false,
66435
- "deprecated": false,
66436
- "deprecationMessage": ""
66437
- }
66438
- ],
66439
- "returnType": "void",
66440
- "line": 131,
66441
- "rawdescription": "\n\nPlaceholder text to show in the multiselect input field when no options are selected.\n",
66442
- "description": "<p>Placeholder text to show in the multiselect input field when no options are selected.</p>\n",
66443
- "jsdoctags": [
66444
- {
66445
- "name": "value",
66446
- "type": "string",
66447
- "optional": false,
66448
- "dotDotDotToken": false,
66449
- "deprecated": false,
66450
- "deprecationMessage": "",
66451
- "tagName": {
66452
- "text": "param"
66453
- }
66454
- }
66455
- ]
66456
- },
66457
- "getSignature": {
66458
- "name": "eclPlaceholder",
66459
- "type": "string",
66460
- "returnType": "string",
66461
- "line": 137,
66462
- "rawdescription": "\n",
66463
- "description": ""
66464
- }
66465
- },
66466
- "counterLabel": {
66467
- "name": "counterLabel",
66468
- "setSignature": {
66469
- "name": "counterLabel",
66470
- "type": "void",
66471
- "deprecated": false,
66472
- "deprecationMessage": "",
66473
- "args": [
66474
- {
66475
- "name": "value",
66476
- "type": "string",
66477
- "optional": false,
66478
- "dotDotDotToken": false,
66479
- "deprecated": false,
66480
- "deprecationMessage": ""
66481
- }
66482
- ],
66483
- "returnType": "void",
66484
- "line": 151,
66485
- "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: 'ecl.multiselect.SELECTED'.\n",
66486
- "description": "<p>Label for the selections counter, read by screen readers.\nAccepts a translation key or plain text. Default: &#39;ecl.multiselect.SELECTED&#39;.</p>\n",
66487
- "jsdoctags": [
66488
- {
66489
- "name": "value",
66490
- "type": "string",
66491
- "optional": false,
66492
- "dotDotDotToken": false,
66493
- "deprecated": false,
66494
- "deprecationMessage": "",
66495
- "tagName": {
66496
- "text": "param"
66497
- }
66498
- }
66499
- ]
66500
- }
66501
66136
  }
66502
66137
  },
66503
66138
  "relationships": {
@@ -66529,7 +66164,7 @@
66529
66164
  },
66530
66165
  {
66531
66166
  "name": "EclMultiselectDropdownComponent",
66532
- "id": "component-EclMultiselectDropdownComponent-ebb4cea2fdaff5483ab9e634d29007a83f7048a32aac85a1b954a7f34f92ca45c4eff676fed34c21de9e7524314ae5fe9e14af8181b9678212efe5f01420c5e9",
66167
+ "id": "component-EclMultiselectDropdownComponent-3383ad3b043b2cd3eefdacd09f498388a80b74f080eb8b44079f4de17c06429844f2b9bbe947a8c02b4a2128bf609c8c2738e8ebbc39822adcabe2aff9b1a9c8",
66533
66168
  "file": "packages/ecl/components/ecl-multiselect/ecl-multiselect-dropdown/ecl-multiselect-dropdown.component.ts",
66534
66169
  "encapsulation": [],
66535
66170
  "entryComponents": [],
@@ -66551,71 +66186,6 @@
66551
66186
  "viewProviders": [],
66552
66187
  "hostDirectives": [],
66553
66188
  "inputsClass": [
66554
- {
66555
- "coverageIgnore": false,
66556
- "required": false,
66557
- "name": "disabled",
66558
- "deprecated": false,
66559
- "deprecationMessage": "",
66560
- "rawdescription": "\n\nDisables the component when true.\n",
66561
- "description": "<p>Disables the component when true.</p>\n",
66562
- "line": 93,
66563
- "type": "boolean | undefined",
66564
- "decorators": []
66565
- },
66566
- {
66567
- "coverageIgnore": false,
66568
- "name": "eclSize",
66569
- "defaultValue": "'m'",
66570
- "deprecated": false,
66571
- "deprecationMessage": "",
66572
- "rawdescription": "\n\nSize of the multiselect dropdown (e.g., 'm', 'l').\n",
66573
- "description": "<p>Size of the multiselect dropdown (e.g., &#39;m&#39;, &#39;l&#39;).</p>\n",
66574
- "line": 87,
66575
- "type": "string",
66576
- "decorators": []
66577
- },
66578
- {
66579
- "coverageIgnore": false,
66580
- "required": false,
66581
- "name": "isInvalid",
66582
- "deprecated": false,
66583
- "deprecationMessage": "",
66584
- "rawdescription": "\n\nMarks the component as visually invalid.\n",
66585
- "description": "<p>Marks the component as visually invalid.</p>\n",
66586
- "line": 59,
66587
- "type": "boolean | undefined",
66588
- "decorators": []
66589
- },
66590
- {
66591
- "coverageIgnore": false,
66592
- "name": "mainInputPlaceholder",
66593
- "defaultValue": "'Select an item'",
66594
- "deprecated": false,
66595
- "deprecationMessage": "",
66596
- "rawdescription": "\n\nPlaceholder for the main multiselect input.\n",
66597
- "description": "<p>Placeholder for the main multiselect input.</p>\n",
66598
- "line": 77,
66599
- "type": "string",
66600
- "decorators": []
66601
- },
66602
- {
66603
- "name": "searchFieldPlaceholder",
66604
- "coverageIgnore": false,
66605
- "defaultValue": "'Enter filter keyword'",
66606
- "deprecated": false,
66607
- "deprecationMessage": "",
66608
- "type": "string",
66609
- "indexKey": "",
66610
- "optional": false,
66611
- "description": "<p>Placeholder for the search field input.</p>\n",
66612
- "line": 82,
66613
- "rawdescription": "\n\nPlaceholder for the search field input.\n",
66614
- "modifierKind": [
66615
- 148
66616
- ],
66617
- "required": false
66618
- },
66619
66189
  {
66620
66190
  "coverageIgnore": false,
66621
66191
  "name": "class",
@@ -66664,28 +66234,36 @@
66664
66234
  {
66665
66235
  "name": "eclChange",
66666
66236
  "coverageIgnore": false,
66667
- "defaultValue": "new EventEmitter<string[]>()",
66668
66237
  "deprecated": false,
66669
66238
  "deprecationMessage": "",
66670
- "rawdescription": "\n\nEmits the list of selected values whenever the selection changes.\n",
66239
+ "type": "string[]",
66240
+ "indexKey": "",
66241
+ "optional": false,
66671
66242
  "description": "<p>Emits the list of selected values whenever the selection changes.</p>\n",
66672
- "line": 53,
66673
- "type": "EventEmitter"
66243
+ "line": 47,
66244
+ "rawdescription": "\n\nEmits the list of selected values whenever the selection changes.\n",
66245
+ "modifierKind": [
66246
+ 148
66247
+ ],
66248
+ "required": false
66674
66249
  }
66675
66250
  ],
66676
66251
  "propertiesClass": [
66677
66252
  {
66678
66253
  "name": "ariaDescribedby",
66679
66254
  "coverageIgnore": false,
66680
- "defaultValue": "undefined",
66255
+ "defaultValue": "signal<string | undefined>(undefined)",
66681
66256
  "deprecated": false,
66682
66257
  "deprecationMessage": "",
66683
- "type": "string | undefined",
66258
+ "type": "unknown",
66684
66259
  "indexKey": "",
66685
66260
  "optional": false,
66686
66261
  "description": "<p>Optional ARIA description used for accessibility purposes.</p>\n",
66687
- "line": 103,
66688
- "rawdescription": "\n\nOptional ARIA description used for accessibility purposes.\n"
66262
+ "line": 80,
66263
+ "rawdescription": "\n\nOptional ARIA description used for accessibility purposes.\n",
66264
+ "modifierKind": [
66265
+ 148
66266
+ ]
66689
66267
  },
66690
66268
  {
66691
66269
  "name": "clearAllBtn",
@@ -66697,9 +66275,10 @@
66697
66275
  "indexKey": "",
66698
66276
  "optional": false,
66699
66277
  "description": "",
66700
- "line": 47,
66278
+ "line": 121,
66701
66279
  "rawdescription": "\n",
66702
66280
  "modifierKind": [
66281
+ 124,
66703
66282
  148
66704
66283
  ]
66705
66284
  },
@@ -66713,24 +66292,44 @@
66713
66292
  "indexKey": "",
66714
66293
  "optional": false,
66715
66294
  "description": "",
66716
- "line": 46,
66295
+ "line": 120,
66717
66296
  "rawdescription": "\n",
66718
66297
  "modifierKind": [
66298
+ 124,
66719
66299
  148
66720
66300
  ]
66721
66301
  },
66722
66302
  {
66723
66303
  "name": "counterLabel",
66724
66304
  "coverageIgnore": false,
66725
- "defaultValue": "'ecl.multiselect.SELECTED'",
66305
+ "defaultValue": "signal('ecl.multiselect.SELECTED')",
66726
66306
  "deprecated": false,
66727
66307
  "deprecationMessage": "",
66728
- "type": "string",
66308
+ "type": "unknown",
66729
66309
  "indexKey": "",
66730
66310
  "optional": false,
66731
66311
  "description": "<p>Label for the selections counter, read by screen readers.</p>\n",
66732
- "line": 128,
66733
- "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\n"
66312
+ "line": 105,
66313
+ "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\n",
66314
+ "modifierKind": [
66315
+ 148
66316
+ ]
66317
+ },
66318
+ {
66319
+ "name": "disabled",
66320
+ "coverageIgnore": false,
66321
+ "defaultValue": "signal<boolean | undefined>(undefined)",
66322
+ "deprecated": false,
66323
+ "deprecationMessage": "",
66324
+ "type": "unknown",
66325
+ "indexKey": "",
66326
+ "optional": false,
66327
+ "description": "<p>Disables the component when true.\nSet by the parent and by <code>ControlValueAccessor.setDisabledState</code>.</p>\n",
66328
+ "line": 75,
66329
+ "rawdescription": "\n\nDisables the component when true.\nSet by the parent and by `ControlValueAccessor.setDisabledState`.\n",
66330
+ "modifierKind": [
66331
+ 148
66332
+ ]
66734
66333
  },
66735
66334
  {
66736
66335
  "name": "dropdownId",
@@ -66742,7 +66341,7 @@
66742
66341
  "indexKey": "",
66743
66342
  "optional": false,
66744
66343
  "description": "",
66745
- "line": 160,
66344
+ "line": 150,
66746
66345
  "rawdescription": "\n",
66747
66346
  "modifierKind": [
66748
66347
  124
@@ -66758,75 +66357,92 @@
66758
66357
  "indexKey": "",
66759
66358
  "optional": false,
66760
66359
  "description": "",
66761
- "line": 44,
66360
+ "line": 118,
66762
66361
  "rawdescription": "\n",
66763
66362
  "modifierKind": [
66363
+ 124,
66764
66364
  148
66765
66365
  ]
66766
66366
  },
66767
66367
  {
66768
- "name": "form",
66368
+ "name": "eclSize",
66769
66369
  "coverageIgnore": false,
66370
+ "defaultValue": "signal('m')",
66770
66371
  "deprecated": false,
66771
66372
  "deprecationMessage": "",
66772
- "type": "FormGroup",
66373
+ "type": "unknown",
66773
66374
  "indexKey": "",
66774
66375
  "optional": false,
66775
- "description": "<p>Reactive form group managing internal form state.</p>\n",
66776
- "line": 153,
66777
- "rawdescription": "\n\nReactive form group managing internal form state.\n"
66376
+ "description": "<p>Size of the multiselect dropdown (e.g., &#39;m&#39;, &#39;l&#39;).</p>\n",
66377
+ "line": 69,
66378
+ "rawdescription": "\n\nSize of the multiselect dropdown (e.g., 'm', 'l').\n",
66379
+ "modifierKind": [
66380
+ 148
66381
+ ]
66778
66382
  },
66779
66383
  {
66780
66384
  "name": "hasSearchBox",
66781
66385
  "coverageIgnore": false,
66782
- "defaultValue": "true",
66386
+ "defaultValue": "signal(true)",
66783
66387
  "deprecated": false,
66784
66388
  "deprecationMessage": "",
66785
66389
  "type": "unknown",
66786
66390
  "indexKey": "",
66787
66391
  "optional": false,
66788
66392
  "description": "<p>Enables the search box in the dropdown interface.</p>\n",
66789
- "line": 113,
66790
- "rawdescription": "\n\nEnables the search box in the dropdown interface.\n"
66393
+ "line": 90,
66394
+ "rawdescription": "\n\nEnables the search box in the dropdown interface.\n",
66395
+ "modifierKind": [
66396
+ 148
66397
+ ]
66791
66398
  },
66792
66399
  {
66793
66400
  "name": "hasSelectAll",
66794
66401
  "coverageIgnore": false,
66795
- "defaultValue": "true",
66402
+ "defaultValue": "signal(true)",
66796
66403
  "deprecated": false,
66797
66404
  "deprecationMessage": "",
66798
66405
  "type": "unknown",
66799
66406
  "indexKey": "",
66800
66407
  "optional": false,
66801
66408
  "description": "<p>Displays the &quot;Select all&quot; checkbox above the list of options.</p>\n",
66802
- "line": 118,
66803
- "rawdescription": "\n\nDisplays the \"Select all\" checkbox above the list of options.\n"
66409
+ "line": 95,
66410
+ "rawdescription": "\n\nDisplays the \"Select all\" checkbox above the list of options.\n",
66411
+ "modifierKind": [
66412
+ 148
66413
+ ]
66804
66414
  },
66805
66415
  {
66806
66416
  "name": "id",
66807
66417
  "coverageIgnore": false,
66808
- "defaultValue": "''",
66418
+ "defaultValue": "signal('')",
66809
66419
  "deprecated": false,
66810
66420
  "deprecationMessage": "",
66811
- "type": "string",
66421
+ "type": "unknown",
66812
66422
  "indexKey": "",
66813
66423
  "optional": false,
66814
66424
  "description": "<p>Optional identifier used for the dropdown element.</p>\n",
66815
- "line": 133,
66816
- "rawdescription": "\n\nOptional identifier used for the dropdown element.\n"
66425
+ "line": 110,
66426
+ "rawdescription": "\n\nOptional identifier used for the dropdown element.\n",
66427
+ "modifierKind": [
66428
+ 148
66429
+ ]
66817
66430
  },
66818
66431
  {
66819
- "name": "isItemsSelected",
66432
+ "name": "isInvalid",
66820
66433
  "coverageIgnore": false,
66821
- "defaultValue": "computed(() => this._selectedItems().length > 0)",
66434
+ "defaultValue": "signal<boolean | undefined>(undefined)",
66822
66435
  "deprecated": false,
66823
66436
  "deprecationMessage": "",
66824
66437
  "type": "unknown",
66825
66438
  "indexKey": "",
66826
66439
  "optional": false,
66827
- "description": "<p>Indicates if any options are currently selected.</p>\n",
66828
- "line": 277,
66829
- "rawdescription": "\n\nIndicates if any options are currently selected.\n"
66440
+ "description": "<p>State configured imperatively by the parent <code>EclMultiselectComponent</code>.\nThis dropdown is created dynamically and is never bound in a template, so these\nare writable signals set through their <code>.set()</code> accessor rather than inputs.</p>\n",
66441
+ "line": 54,
66442
+ "rawdescription": "\n\nState configured imperatively by the parent `EclMultiselectComponent`.\nThis dropdown is created dynamically and is never bound in a template, so these\nare writable signals set through their `.set()` accessor rather than inputs.\n",
66443
+ "modifierKind": [
66444
+ 148
66445
+ ]
66830
66446
  },
66831
66447
  {
66832
66448
  "name": "isSelectAllDisabled",
@@ -66838,7 +66454,7 @@
66838
66454
  "indexKey": "",
66839
66455
  "optional": false,
66840
66456
  "description": "",
66841
- "line": 161,
66457
+ "line": 151,
66842
66458
  "rawdescription": "\n",
66843
66459
  "modifierKind": [
66844
66460
  124
@@ -66855,7 +66471,10 @@
66855
66471
  "optional": false,
66856
66472
  "description": "<p>Controls the visibility of the multiselect dropdown.</p>\n",
66857
66473
  "line": 143,
66858
- "rawdescription": "\n\nControls the visibility of the multiselect dropdown.\n"
66474
+ "rawdescription": "\n\nControls the visibility of the multiselect dropdown.\n",
66475
+ "modifierKind": [
66476
+ 124
66477
+ ]
66859
66478
  },
66860
66479
  {
66861
66480
  "name": "isShowNoResultsFound",
@@ -66868,7 +66487,10 @@
66868
66487
  "optional": false,
66869
66488
  "description": "<p>Indicates that the &quot;no results found&quot; message should be displayed.</p>\n",
66870
66489
  "line": 138,
66871
- "rawdescription": "\n\nIndicates that the \"no results found\" message should be displayed.\n"
66490
+ "rawdescription": "\n\nIndicates that the \"no results found\" message should be displayed.\n",
66491
+ "modifierKind": [
66492
+ 124
66493
+ ]
66872
66494
  },
66873
66495
  {
66874
66496
  "name": "isShowToolbar",
@@ -66880,8 +66502,11 @@
66880
66502
  "indexKey": "",
66881
66503
  "optional": false,
66882
66504
  "description": "<p>Controls the visibility of the multiselect toolbar.\nAlways visible when isSubmitOnApply is true so the user can submit the form.</p>\n",
66883
- "line": 283,
66884
- "rawdescription": "\n\nControls the visibility of the multiselect toolbar.\nAlways visible when isSubmitOnApply is true so the user can submit the form.\n"
66505
+ "line": 133,
66506
+ "rawdescription": "\n\nControls the visibility of the multiselect toolbar.\nAlways visible when isSubmitOnApply is true so the user can submit the form.\n",
66507
+ "modifierKind": [
66508
+ 124
66509
+ ]
66885
66510
  },
66886
66511
  {
66887
66512
  "name": "isSubmitOnApply",
@@ -66893,28 +66518,43 @@
66893
66518
  "indexKey": "",
66894
66519
  "optional": false,
66895
66520
  "description": "<p>When true, the Apply button acts as a submit button (type=&quot;submit&quot;) instead of a regular button.</p>\n",
66896
- "line": 123,
66897
- "rawdescription": "\n\nWhen true, the Apply button acts as a submit button (type=\"submit\") instead of a regular button.\n"
66521
+ "line": 100,
66522
+ "rawdescription": "\n\nWhen true, the Apply button acts as a submit button (type=\"submit\") instead of a regular button.\n",
66523
+ "modifierKind": [
66524
+ 148
66525
+ ]
66526
+ },
66527
+ {
66528
+ "name": "mainInputPlaceholder",
66529
+ "coverageIgnore": false,
66530
+ "defaultValue": "signal('Select an item')",
66531
+ "deprecated": false,
66532
+ "deprecationMessage": "",
66533
+ "type": "unknown",
66534
+ "indexKey": "",
66535
+ "optional": false,
66536
+ "description": "<p>Placeholder for the main multiselect input.</p>\n",
66537
+ "line": 59,
66538
+ "rawdescription": "\n\nPlaceholder for the main multiselect input.\n",
66539
+ "modifierKind": [
66540
+ 148
66541
+ ]
66898
66542
  },
66899
66543
  {
66900
66544
  "name": "multiOptionComponents",
66901
66545
  "coverageIgnore": false,
66546
+ "defaultValue": "viewChildren(EclMultiselectOptionComponent)",
66902
66547
  "deprecated": false,
66903
66548
  "deprecationMessage": "",
66904
- "type": "QueryList<EclMultiselectOptionComponent>",
66549
+ "type": "unknown",
66905
66550
  "indexKey": "",
66906
66551
  "optional": false,
66907
66552
  "description": "",
66908
- "line": 48,
66553
+ "line": 122,
66909
66554
  "rawdescription": "\n",
66910
- "decorators": [
66911
- {
66912
- "name": "ViewChildren",
66913
- "stringifiedArguments": "EclMultiselectOptionComponent"
66914
- }
66915
- ],
66916
66555
  "modifierKind": [
66917
- 171
66556
+ 124,
66557
+ 148
66918
66558
  ]
66919
66559
  },
66920
66560
  {
@@ -66927,7 +66567,7 @@
66927
66567
  "indexKey": "",
66928
66568
  "optional": false,
66929
66569
  "description": "<p>List of option directives currently rendered in the dropdown.</p>\n",
66930
- "line": 148,
66570
+ "line": 115,
66931
66571
  "rawdescription": "\n\nList of option directives currently rendered in the dropdown.\n"
66932
66572
  },
66933
66573
  {
@@ -66940,8 +66580,27 @@
66940
66580
  "indexKey": "",
66941
66581
  "optional": false,
66942
66582
  "description": "<p>Total number of options available in the dropdown list.</p>\n",
66943
- "line": 158,
66944
- "rawdescription": "\n\nTotal number of options available in the dropdown list.\n"
66583
+ "line": 148,
66584
+ "rawdescription": "\n\nTotal number of options available in the dropdown list.\n",
66585
+ "modifierKind": [
66586
+ 124
66587
+ ]
66588
+ },
66589
+ {
66590
+ "name": "searchFieldPlaceholder",
66591
+ "coverageIgnore": false,
66592
+ "defaultValue": "signal('Enter filter keyword')",
66593
+ "deprecated": false,
66594
+ "deprecationMessage": "",
66595
+ "type": "unknown",
66596
+ "indexKey": "",
66597
+ "optional": false,
66598
+ "description": "<p>Placeholder for the search field input.</p>\n",
66599
+ "line": 64,
66600
+ "rawdescription": "\n\nPlaceholder for the search field input.\n",
66601
+ "modifierKind": [
66602
+ 148
66603
+ ]
66945
66604
  },
66946
66605
  {
66947
66606
  "name": "searchInput",
@@ -66953,9 +66612,10 @@
66953
66612
  "indexKey": "",
66954
66613
  "optional": false,
66955
66614
  "description": "",
66956
- "line": 43,
66615
+ "line": 117,
66957
66616
  "rawdescription": "\n",
66958
66617
  "modifierKind": [
66618
+ 124,
66959
66619
  148
66960
66620
  ]
66961
66621
  },
@@ -66969,9 +66629,10 @@
66969
66629
  "indexKey": "",
66970
66630
  "optional": false,
66971
66631
  "description": "",
66972
- "line": 45,
66632
+ "line": 119,
66973
66633
  "rawdescription": "\n",
66974
66634
  "modifierKind": [
66635
+ 124,
66975
66636
  148
66976
66637
  ]
66977
66638
  },
@@ -66985,24 +66646,27 @@
66985
66646
  "indexKey": "",
66986
66647
  "optional": false,
66987
66648
  "description": "",
66988
- "line": 162,
66649
+ "line": 152,
66989
66650
  "rawdescription": "\n",
66990
66651
  "modifierKind": [
66991
66652
  124
66992
66653
  ]
66993
66654
  },
66994
66655
  {
66995
- "name": "selectedItems",
66656
+ "name": "selectedItemsLabels",
66996
66657
  "coverageIgnore": false,
66997
- "defaultValue": "computed(() => this._selectedItems().map((item) => item.label))",
66658
+ "defaultValue": "computed(() => this._selectedItems().map((item) => item.label()))",
66998
66659
  "deprecated": false,
66999
66660
  "deprecationMessage": "",
67000
66661
  "type": "unknown",
67001
66662
  "indexKey": "",
67002
66663
  "optional": false,
67003
66664
  "description": "<p>Gets labels of currently selected options.</p>\n",
67004
- "line": 272,
67005
- "rawdescription": "\n\nGets labels of currently selected options.\n"
66665
+ "line": 127,
66666
+ "rawdescription": "\n\nGets labels of currently selected options.\n",
66667
+ "modifierKind": [
66668
+ 124
66669
+ ]
67006
66670
  },
67007
66671
  {
67008
66672
  "name": "toggleId",
@@ -67014,7 +66678,7 @@
67014
66678
  "indexKey": "",
67015
66679
  "optional": false,
67016
66680
  "description": "",
67017
- "line": 163,
66681
+ "line": 153,
67018
66682
  "rawdescription": "\n",
67019
66683
  "modifierKind": [
67020
66684
  124
@@ -67023,44 +66687,21 @@
67023
66687
  {
67024
66688
  "name": "toggleLabel",
67025
66689
  "coverageIgnore": false,
67026
- "defaultValue": "undefined",
66690
+ "defaultValue": "signal<string | undefined>(undefined)",
67027
66691
  "deprecated": false,
67028
66692
  "deprecationMessage": "",
67029
- "type": "string | undefined",
66693
+ "type": "unknown",
67030
66694
  "indexKey": "",
67031
66695
  "optional": false,
67032
66696
  "description": "<p>Label displayed for the toggle button to assist screen readers.</p>\n",
67033
- "line": 108,
67034
- "rawdescription": "\n\nLabel displayed for the toggle button to assist screen readers.\n"
66697
+ "line": 85,
66698
+ "rawdescription": "\n\nLabel displayed for the toggle button to assist screen readers.\n",
66699
+ "modifierKind": [
66700
+ 148
66701
+ ]
67035
66702
  }
67036
66703
  ],
67037
66704
  "methodsClass": [
67038
- {
67039
- "name": "initSelectedOptions",
67040
- "coverageIgnore": false,
67041
- "args": [],
67042
- "optional": false,
67043
- "returnType": "void",
67044
- "typeParameters": [],
67045
- "line": 285,
67046
- "deprecated": false,
67047
- "deprecationMessage": "",
67048
- "rawdescription": "\n",
67049
- "description": ""
67050
- },
67051
- {
67052
- "name": "ngAfterViewInit",
67053
- "coverageIgnore": false,
67054
- "args": [],
67055
- "optional": false,
67056
- "returnType": "void",
67057
- "typeParameters": [],
67058
- "line": 190,
67059
- "deprecated": false,
67060
- "deprecationMessage": "",
67061
- "rawdescription": "\n",
67062
- "description": ""
67063
- },
67064
66705
  {
67065
66706
  "name": "ngDoCheck",
67066
66707
  "coverageIgnore": false,
@@ -67068,7 +66709,7 @@
67068
66709
  "optional": false,
67069
66710
  "returnType": "void",
67070
66711
  "typeParameters": [],
67071
- "line": 177,
66712
+ "line": 179,
67072
66713
  "deprecated": false,
67073
66714
  "deprecationMessage": "",
67074
66715
  "rawdescription": "\n",
@@ -67081,7 +66722,7 @@
67081
66722
  "optional": false,
67082
66723
  "returnType": "void",
67083
66724
  "typeParameters": [],
67084
- "line": 212,
66725
+ "line": 192,
67085
66726
  "deprecated": false,
67086
66727
  "deprecationMessage": "",
67087
66728
  "rawdescription": "\n",
@@ -67094,7 +66735,7 @@
67094
66735
  "optional": false,
67095
66736
  "returnType": "void",
67096
66737
  "typeParameters": [],
67097
- "line": 181,
66738
+ "line": 183,
67098
66739
  "deprecated": false,
67099
66740
  "deprecationMessage": "",
67100
66741
  "rawdescription": "\n",
@@ -67116,11 +66757,14 @@
67116
66757
  "optional": false,
67117
66758
  "returnType": "void",
67118
66759
  "typeParameters": [],
67119
- "line": 337,
66760
+ "line": 298,
67120
66761
  "deprecated": false,
67121
66762
  "deprecationMessage": "",
67122
66763
  "rawdescription": "\n",
67123
66764
  "description": "",
66765
+ "modifierKind": [
66766
+ 124
66767
+ ],
67124
66768
  "jsdoctags": [
67125
66769
  {
67126
66770
  "name": "evt",
@@ -67151,11 +66795,14 @@
67151
66795
  "optional": false,
67152
66796
  "returnType": "void",
67153
66797
  "typeParameters": [],
67154
- "line": 320,
66798
+ "line": 281,
67155
66799
  "deprecated": false,
67156
66800
  "deprecationMessage": "",
67157
66801
  "rawdescription": "\n",
67158
66802
  "description": "",
66803
+ "modifierKind": [
66804
+ 124
66805
+ ],
67159
66806
  "jsdoctags": [
67160
66807
  {
67161
66808
  "name": "evt",
@@ -67186,11 +66833,14 @@
67186
66833
  "optional": false,
67187
66834
  "returnType": "void",
67188
66835
  "typeParameters": [],
67189
- "line": 354,
66836
+ "line": 315,
67190
66837
  "deprecated": false,
67191
66838
  "deprecationMessage": "",
67192
66839
  "rawdescription": "\n",
67193
66840
  "description": "",
66841
+ "modifierKind": [
66842
+ 124
66843
+ ],
67194
66844
  "jsdoctags": [
67195
66845
  {
67196
66846
  "name": "evt",
@@ -67221,11 +66871,14 @@
67221
66871
  "optional": false,
67222
66872
  "returnType": "void",
67223
66873
  "typeParameters": [],
67224
- "line": 385,
66874
+ "line": 346,
67225
66875
  "deprecated": false,
67226
66876
  "deprecationMessage": "",
67227
66877
  "rawdescription": "\n",
67228
66878
  "description": "",
66879
+ "modifierKind": [
66880
+ 124
66881
+ ],
67229
66882
  "jsdoctags": [
67230
66883
  {
67231
66884
  "name": "evt",
@@ -67256,11 +66909,14 @@
67256
66909
  "optional": false,
67257
66910
  "returnType": "void",
67258
66911
  "typeParameters": [],
67259
- "line": 332,
66912
+ "line": 293,
67260
66913
  "deprecated": false,
67261
66914
  "deprecationMessage": "",
67262
66915
  "rawdescription": "\n",
67263
66916
  "description": "",
66917
+ "modifierKind": [
66918
+ 124
66919
+ ],
67264
66920
  "jsdoctags": [
67265
66921
  {
67266
66922
  "name": "evt",
@@ -67291,11 +66947,14 @@
67291
66947
  "optional": false,
67292
66948
  "returnType": "void",
67293
66949
  "typeParameters": [],
67294
- "line": 314,
66950
+ "line": 275,
67295
66951
  "deprecated": false,
67296
66952
  "deprecationMessage": "",
67297
66953
  "rawdescription": "\n",
67298
66954
  "description": "",
66955
+ "modifierKind": [
66956
+ 124
66957
+ ],
67299
66958
  "jsdoctags": [
67300
66959
  {
67301
66960
  "name": "evt",
@@ -67326,11 +66985,14 @@
67326
66985
  "optional": false,
67327
66986
  "returnType": "void",
67328
66987
  "typeParameters": [],
67329
- "line": 364,
66988
+ "line": 325,
67330
66989
  "deprecated": false,
67331
66990
  "deprecationMessage": "",
67332
66991
  "rawdescription": "\n",
67333
66992
  "description": "",
66993
+ "modifierKind": [
66994
+ 124
66995
+ ],
67334
66996
  "jsdoctags": [
67335
66997
  {
67336
66998
  "name": "evt",
@@ -67361,11 +67023,14 @@
67361
67023
  "optional": false,
67362
67024
  "returnType": "void",
67363
67025
  "typeParameters": [],
67364
- "line": 393,
67026
+ "line": 354,
67365
67027
  "deprecated": false,
67366
67028
  "deprecationMessage": "",
67367
67029
  "rawdescription": "\n",
67368
67030
  "description": "",
67031
+ "modifierKind": [
67032
+ 124
67033
+ ],
67369
67034
  "jsdoctags": [
67370
67035
  {
67371
67036
  "name": "evt",
@@ -67396,11 +67061,14 @@
67396
67061
  "optional": false,
67397
67062
  "returnType": "void",
67398
67063
  "typeParameters": [],
67399
- "line": 295,
67064
+ "line": 256,
67400
67065
  "deprecated": false,
67401
67066
  "deprecationMessage": "",
67402
67067
  "rawdescription": "\n",
67403
67068
  "description": "",
67069
+ "modifierKind": [
67070
+ 124
67071
+ ],
67404
67072
  "jsdoctags": [
67405
67073
  {
67406
67074
  "name": "evt",
@@ -67431,11 +67099,14 @@
67431
67099
  "optional": false,
67432
67100
  "returnType": "void",
67433
67101
  "typeParameters": [],
67434
- "line": 307,
67102
+ "line": 268,
67435
67103
  "deprecated": false,
67436
67104
  "deprecationMessage": "",
67437
67105
  "rawdescription": "\n",
67438
67106
  "description": "",
67107
+ "modifierKind": [
67108
+ 124
67109
+ ],
67439
67110
  "jsdoctags": [
67440
67111
  {
67441
67112
  "name": "evt",
@@ -67466,11 +67137,14 @@
67466
67137
  "optional": false,
67467
67138
  "returnType": "void",
67468
67139
  "typeParameters": [],
67469
- "line": 380,
67140
+ "line": 341,
67470
67141
  "deprecated": false,
67471
67142
  "deprecationMessage": "",
67472
67143
  "rawdescription": "\n",
67473
67144
  "description": "",
67145
+ "modifierKind": [
67146
+ 124
67147
+ ],
67474
67148
  "jsdoctags": [
67475
67149
  {
67476
67150
  "name": "evt",
@@ -67501,11 +67175,14 @@
67501
67175
  "optional": false,
67502
67176
  "returnType": "void",
67503
67177
  "typeParameters": [],
67504
- "line": 302,
67178
+ "line": 263,
67505
67179
  "deprecated": false,
67506
67180
  "deprecationMessage": "",
67507
67181
  "rawdescription": "\n",
67508
67182
  "description": "",
67183
+ "modifierKind": [
67184
+ 124
67185
+ ],
67509
67186
  "jsdoctags": [
67510
67187
  {
67511
67188
  "name": "evt",
@@ -67536,11 +67213,14 @@
67536
67213
  "optional": false,
67537
67214
  "returnType": "void",
67538
67215
  "typeParameters": [],
67539
- "line": 350,
67216
+ "line": 311,
67540
67217
  "deprecated": false,
67541
67218
  "deprecationMessage": "",
67542
67219
  "rawdescription": "\n",
67543
67220
  "description": "",
67221
+ "modifierKind": [
67222
+ 124
67223
+ ],
67544
67224
  "jsdoctags": [
67545
67225
  {
67546
67226
  "name": "evt",
@@ -67571,11 +67251,14 @@
67571
67251
  "optional": false,
67572
67252
  "returnType": "void",
67573
67253
  "typeParameters": [],
67574
- "line": 402,
67254
+ "line": 363,
67575
67255
  "deprecated": false,
67576
67256
  "deprecationMessage": "",
67577
67257
  "rawdescription": "\n",
67578
67258
  "description": "",
67259
+ "modifierKind": [
67260
+ 124
67261
+ ],
67579
67262
  "jsdoctags": [
67580
67263
  {
67581
67264
  "name": "evt",
@@ -67597,11 +67280,14 @@
67597
67280
  "optional": false,
67598
67281
  "returnType": "void",
67599
67282
  "typeParameters": [],
67600
- "line": 258,
67283
+ "line": 245,
67601
67284
  "deprecated": false,
67602
67285
  "deprecationMessage": "",
67603
67286
  "rawdescription": "\n",
67604
- "description": ""
67287
+ "description": "",
67288
+ "modifierKind": [
67289
+ 124
67290
+ ]
67605
67291
  },
67606
67292
  {
67607
67293
  "name": "onKeydownMainInput",
@@ -67619,11 +67305,14 @@
67619
67305
  "optional": false,
67620
67306
  "returnType": "void",
67621
67307
  "typeParameters": [],
67622
- "line": 370,
67308
+ "line": 331,
67623
67309
  "deprecated": false,
67624
67310
  "deprecationMessage": "",
67625
67311
  "rawdescription": "\n",
67626
67312
  "description": "",
67313
+ "modifierKind": [
67314
+ 124
67315
+ ],
67627
67316
  "jsdoctags": [
67628
67317
  {
67629
67318
  "name": "evt",
@@ -67654,11 +67343,14 @@
67654
67343
  "optional": false,
67655
67344
  "returnType": "void",
67656
67345
  "typeParameters": [],
67657
- "line": 457,
67346
+ "line": 418,
67658
67347
  "deprecated": false,
67659
67348
  "deprecationMessage": "",
67660
67349
  "rawdescription": "\n\nHandles keyboard interaction on option items.\nSupports arrow keys, tab, escape, and enter.\n",
67661
67350
  "description": "<p>Handles keyboard interaction on option items.\nSupports arrow keys, tab, escape, and enter.</p>\n",
67351
+ "modifierKind": [
67352
+ 124
67353
+ ],
67662
67354
  "jsdoctags": [
67663
67355
  {
67664
67356
  "name": "evt",
@@ -67689,11 +67381,14 @@
67689
67381
  "optional": false,
67690
67382
  "returnType": "void",
67691
67383
  "typeParameters": [],
67692
- "line": 263,
67384
+ "line": 250,
67693
67385
  "deprecated": false,
67694
67386
  "deprecationMessage": "",
67695
67387
  "rawdescription": "\n",
67696
67388
  "description": "",
67389
+ "modifierKind": [
67390
+ 124
67391
+ ],
67697
67392
  "jsdoctags": [
67698
67393
  {
67699
67394
  "name": "event",
@@ -67724,11 +67419,14 @@
67724
67419
  "optional": false,
67725
67420
  "returnType": "void",
67726
67421
  "typeParameters": [],
67727
- "line": 487,
67422
+ "line": 448,
67728
67423
  "deprecated": false,
67729
67424
  "deprecationMessage": "",
67730
67425
  "rawdescription": "\n\nTriggered when a single option is clicked/selected.\nUpdates selected items, emits changes.\n",
67731
67426
  "description": "<p>Triggered when a single option is clicked/selected.\nUpdates selected items, emits changes.</p>\n",
67427
+ "modifierKind": [
67428
+ 124
67429
+ ],
67732
67430
  "jsdoctags": [
67733
67431
  {
67734
67432
  "name": "evt",
@@ -67759,11 +67457,14 @@
67759
67457
  "optional": false,
67760
67458
  "returnType": "void",
67761
67459
  "typeParameters": [],
67762
- "line": 410,
67460
+ "line": 371,
67763
67461
  "deprecated": false,
67764
67462
  "deprecationMessage": "",
67765
67463
  "rawdescription": "\n\nHandles search input, filters options, and updates their visibility.\n",
67766
67464
  "description": "<p>Handles search input, filters options, and updates their visibility.</p>\n",
67465
+ "modifierKind": [
67466
+ 124
67467
+ ],
67767
67468
  "jsdoctags": [
67768
67469
  {
67769
67470
  "name": "input",
@@ -67785,11 +67486,14 @@
67785
67486
  "optional": false,
67786
67487
  "returnType": "void",
67787
67488
  "typeParameters": [],
67788
- "line": 442,
67489
+ "line": 403,
67789
67490
  "deprecated": false,
67790
67491
  "deprecationMessage": "",
67791
67492
  "rawdescription": "\n\nToggles all visible options based on the \"Select All\" checkbox.\n",
67792
- "description": "<p>Toggles all visible options based on the &quot;Select All&quot; checkbox.</p>\n"
67493
+ "description": "<p>Toggles all visible options based on the &quot;Select All&quot; checkbox.</p>\n",
67494
+ "modifierKind": [
67495
+ 124
67496
+ ]
67793
67497
  },
67794
67498
  {
67795
67499
  "name": "onTabClear",
@@ -67807,11 +67511,14 @@
67807
67511
  "optional": false,
67808
67512
  "returnType": "void",
67809
67513
  "typeParameters": [],
67810
- "line": 342,
67514
+ "line": 303,
67811
67515
  "deprecated": false,
67812
67516
  "deprecationMessage": "",
67813
67517
  "rawdescription": "\n",
67814
67518
  "description": "",
67519
+ "modifierKind": [
67520
+ 124
67521
+ ],
67815
67522
  "jsdoctags": [
67816
67523
  {
67817
67524
  "name": "evt",
@@ -67842,11 +67549,14 @@
67842
67549
  "optional": false,
67843
67550
  "returnType": "void",
67844
67551
  "typeParameters": [],
67845
- "line": 325,
67552
+ "line": 286,
67846
67553
  "deprecated": false,
67847
67554
  "deprecationMessage": "",
67848
67555
  "rawdescription": "\n",
67849
67556
  "description": "",
67557
+ "modifierKind": [
67558
+ 124
67559
+ ],
67850
67560
  "jsdoctags": [
67851
67561
  {
67852
67562
  "name": "evt",
@@ -67877,14 +67587,11 @@
67877
67587
  "optional": false,
67878
67588
  "returnType": "void",
67879
67589
  "typeParameters": [],
67880
- "line": 237,
67590
+ "line": 217,
67881
67591
  "deprecated": false,
67882
67592
  "deprecationMessage": "",
67883
67593
  "rawdescription": "\n\nRegisters a callback function to be called when the value changes.\nRequired by ControlValueAccessor.\n",
67884
67594
  "description": "<p>Registers a callback function to be called when the value changes.\nRequired by ControlValueAccessor.</p>\n",
67885
- "modifierKind": [
67886
- 125
67887
- ],
67888
67595
  "jsdoctags": [
67889
67596
  {
67890
67597
  "name": "fn",
@@ -67915,14 +67622,11 @@
67915
67622
  "optional": false,
67916
67623
  "returnType": "void",
67917
67624
  "typeParameters": [],
67918
- "line": 246,
67625
+ "line": 226,
67919
67626
  "deprecated": false,
67920
67627
  "deprecationMessage": "",
67921
67628
  "rawdescription": "\n\nRegisters a callback function to be called when the component is touched.\nRequired by ControlValueAccessor.\n",
67922
67629
  "description": "<p>Registers a callback function to be called when the component is touched.\nRequired by ControlValueAccessor.</p>\n",
67923
- "modifierKind": [
67924
- 125
67925
- ],
67926
67630
  "jsdoctags": [
67927
67631
  {
67928
67632
  "name": "fn",
@@ -67953,14 +67657,11 @@
67953
67657
  "optional": false,
67954
67658
  "returnType": "void",
67955
67659
  "typeParameters": [],
67956
- "line": 254,
67660
+ "line": 234,
67957
67661
  "deprecated": false,
67958
67662
  "deprecationMessage": "",
67959
67663
  "rawdescription": "\n\nEnables or disables the component.\nRequired by ControlValueAccessor.\n",
67960
67664
  "description": "<p>Enables or disables the component.\nRequired by ControlValueAccessor.</p>\n",
67961
- "modifierKind": [
67962
- 125
67963
- ],
67964
67665
  "jsdoctags": [
67965
67666
  {
67966
67667
  "name": "isDisabled",
@@ -67991,14 +67692,11 @@
67991
67692
  "optional": false,
67992
67693
  "returnType": "void",
67993
67694
  "typeParameters": [],
67994
- "line": 222,
67695
+ "line": 202,
67995
67696
  "deprecated": false,
67996
67697
  "deprecationMessage": "",
67997
67698
  "rawdescription": "\n\nWrites a new value to the component from the outside (e.g., form model).\nRequired by ControlValueAccessor.\n",
67998
67699
  "description": "<p>Writes a new value to the component from the outside (e.g., form model).\nRequired by ControlValueAccessor.</p>\n",
67999
- "modifierKind": [
68000
- 125
68001
- ],
68002
67700
  "jsdoctags": [
68003
67701
  {
68004
67702
  "name": "values",
@@ -68055,20 +67753,7 @@
68055
67753
  "coverageIgnore": false,
68056
67754
  "deprecated": false,
68057
67755
  "deprecationMessage": "",
68058
- "hostBindings": [
68059
- {
68060
- "coverageIgnore": false,
68061
- "name": "class",
68062
- "actualName": "cssClasses",
68063
- "deprecated": false,
68064
- "deprecationMessage": "",
68065
- "rawdescription": "\n\nAdds the ECL base CSS class for multiselect dropdowns.\n",
68066
- "description": "<p>Adds the ECL base CSS class for multiselect dropdowns.</p>\n",
68067
- "line": 70,
68068
- "type": "string",
68069
- "decorators": []
68070
- }
68071
- ],
67756
+ "hostBindings": [],
68072
67757
  "hostListeners": [],
68073
67758
  "standalone": false,
68074
67759
  "imports": [
@@ -68098,14 +67783,14 @@
68098
67783
  "description": "<p>Component that renders a dropdown-style multiselect UI element.\nUsed internally by the <code>EclMultiselectComponent</code>.</p>\n",
68099
67784
  "rawdescription": "\n\nComponent that renders a dropdown-style multiselect UI element.\nUsed internally by the `EclMultiselectComponent`.\n",
68100
67785
  "type": "component",
68101
- "sourceCode": "import { booleanAttribute, Component, computed, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Input, OnDestroy, OnInit, Output, QueryList, Renderer2, signal, ViewChild, ViewChildren, AfterViewInit, inject, input, viewChild } from '@angular/core';\nimport { ControlValueAccessor, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { KeyCode } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMultiselectInputComponent } from '../ecl-multiselect-input/ecl-multiselect-input.component';\nimport { EclMultiselectOptionDirective } from '../ecl-multiselect-option.directive';\nimport { EclMultiselectOptionComponent } from '../ecl-multiselect-option/ecl-multiselect-option.component';\nimport { EclMultiselectOption } from '../models/ecl-multiselect-option.model';\nimport { EclMultiselectMainInputClickEvent, EclMultiselectOptionClickEvent, EclMultiselectOptionKeydownEvent } from '../events';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EclMultiselectOptgroupComponent } from '../ecl-multiselect-optgroup/ecl-multiselect-optgroup.component';\nimport { EUI_ECL_CHECKBOX } from '@eui/ecl/components/ecl-checkbox';\n\n/**\n * Component that renders a dropdown-style multiselect UI element.\n * Used internally by the `EclMultiselectComponent`.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectDropdown]',\n templateUrl: 'ecl-multiselect-dropdown.component.html',\n imports: [\n ...EUI_ECL_BUTTON, EclMultiselectOptionComponent, EclMultiselectOptgroupComponent,\n EclMultiselectInputComponent, ...EUI_ECL_CHECKBOX, TranslatePipe,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclMultiselectDropdownComponent),\n multi: true,\n },\n ],\n host: {\n '(keyup.escape)': 'onEscapeKey()',\n '(document:click)': 'onKeyUp($event)',\n '[attr.disabled]': 'disabled || undefined',\n },\n})\nexport class EclMultiselectDropdownComponent extends ECLBaseDirective implements OnInit, ControlValueAccessor, DoCheck, OnDestroy, AfterViewInit {\n\n readonly searchInput = viewChild<ElementRef>('searchInput');\n readonly eclMultiselectInput = viewChild<EclMultiselectInputComponent>('eclMultiselectInput');\n readonly selectAllCheckbox = viewChild<ElementRef>('selectAllCheckbox');\n readonly closeBtn = viewChild('closeBtn', { read: ElementRef });\n readonly clearAllBtn = viewChild('clearAllBtn', { read: ElementRef });\n @ViewChildren(EclMultiselectOptionComponent) multiOptionComponents: QueryList<EclMultiselectOptionComponent>;\n\n /**\n * Emits the list of selected values whenever the selection changes.\n */\n @Output() eclChange = new EventEmitter<string[]>();\n\n /**\n * Marks the component as visually invalid.\n */\n @Input({ transform: booleanAttribute })\n get isInvalid(): boolean | undefined {\n return this._isInvalid;\n }\n set isInvalid(value: boolean | undefined) {\n this._isInvalid = value;\n }\n\n /**\n * Adds the ECL base CSS class for multiselect dropdowns.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-select__multiple')].join(' ').trim();\n }\n\n /**\n * Placeholder for the main multiselect input.\n */\n @Input() mainInputPlaceholder = 'Select an item';\n\n /**\n * Placeholder for the search field input.\n */\n readonly searchFieldPlaceholder = input('Enter filter keyword');\n\n /**\n * Size of the multiselect dropdown (e.g., 'm', 'l').\n */\n @Input() eclSize = 'm';\n\n /**\n * Disables the component when true.\n */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean | undefined {\n return this._disabled || undefined;\n }\n set disabled(value: boolean | undefined) {\n this._disabled = value;\n }\n\n /**\n * Optional ARIA description used for accessibility purposes.\n */\n ariaDescribedby: string | undefined = undefined;\n\n /**\n * Label displayed for the toggle button to assist screen readers.\n */\n toggleLabel: string | undefined = undefined;\n\n /**\n * Enables the search box in the dropdown interface.\n */\n hasSearchBox = true;\n\n /**\n * Displays the \"Select all\" checkbox above the list of options.\n */\n hasSelectAll = true;\n\n /**\n * When true, the Apply button acts as a submit button (type=\"submit\") instead of a regular button.\n */\n isSubmitOnApply = signal(false);\n\n /**\n * Label for the selections counter, read by screen readers.\n */\n counterLabel = 'ecl.multiselect.SELECTED';\n\n /**\n * Optional identifier used for the dropdown element.\n */\n id = '';\n\n /**\n * Indicates that the \"no results found\" message should be displayed.\n */\n isShowNoResultsFound = false;\n\n /**\n * Controls the visibility of the multiselect dropdown.\n */\n isShowMultiselectDropdown = false;\n\n /**\n * List of option directives currently rendered in the dropdown.\n */\n multiOptionDirectives = signal<EclMultiselectOptionDirective[]>([]);\n\n /**\n * Reactive form group managing internal form state.\n */\n form: FormGroup;\n\n /**\n * Total number of options available in the dropdown list.\n */\n optionsCount = 0;\n\n protected dropdownId = '';\n protected isSelectAllDisabled: boolean | null = null;\n protected selectAllId = '';\n protected toggleId = '';\n private _disabled = false;\n private _isInvalid = false;\n private _selectedItems = signal<EclMultiselectOption[]>([]);\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private isWriteValueCalled = false;\n private values = [];\n private elRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n constructor() {\n super();\n }\n\n ngDoCheck(): void {\n this.optionsCount = this.getAvailableOptions() ? this.getAvailableOptions().length : 0;\n }\n\n ngOnInit(): void {\n this.selectAllId = this.getSelectAllId();\n this.dropdownId = this.getDropdownId();\n this.toggleId = this.getToggleId();\n setTimeout(() => {\n this.modifyParentLabelForAttribute();\n });\n }\n\n ngAfterViewInit(): void {\n // Apply the current option state once, in case the option components are already\n // present when this hook runs (their arrival does not always emit a changes event).\n if (this.multiOptionComponents.length > 0) {\n this.applyOptionState();\n }\n this.multiOptionComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.applyOptionState();\n });\n }\n\n private applyOptionState(): void {\n if (this.isWriteValueCalled) {\n this.resetComponent();\n this.writeValues(this.values);\n this.isWriteValueCalled = false;\n } else {\n this.initSelectedOptions();\n }\n this.optionsCount = this.getAvailableOptions() ? this.getAvailableOptions().length : 0;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Writes a new value to the component from the outside (e.g., form model).\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public writeValue(values: any): void {\n if (this.multiOptionComponents && this.multiOptionComponents.length > 0) {\n this.resetComponent();\n this.writeValues(values);\n } else {\n this.values = values;\n this.isWriteValueCalled = true;\n }\n }\n\n /**\n * Registers a callback function to be called when the value changes.\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers a callback function to be called when the component is touched.\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Enables or disables the component.\n * Required by ControlValueAccessor.\n */\n public setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n }\n\n onEscapeKey(): void {\n this.hideMultiselectDropdown();\n this.eclMultiselectInput()?.onFocus();\n }\n\n onKeyUp(event: MouseEvent): void {\n if (!this.elRef.nativeElement.contains(event.target)) {\n this.hideMultiselectDropdown();\n }\n }\n\n /**\n * Gets labels of currently selected options.\n */\n selectedItems = computed(() => this._selectedItems().map((item) => item.label));\n\n /**\n * Indicates if any options are currently selected.\n */\n isItemsSelected = computed(() => this._selectedItems().length > 0);\n\n /**\n * Controls the visibility of the multiselect toolbar.\n * Always visible when isSubmitOnApply is true so the user can submit the form.\n */\n isShowToolbar = computed(() => this.isSubmitOnApply() || this._selectedItems().length > 0);\n\n initSelectedOptions(): void {\n const items: EclMultiselectOption[] = [];\n this.multiOptionComponents\n .filter((elem) => elem.isChecked)\n .forEach((item) => {\n items.push(item);\n });\n this._selectedItems.set(items);\n }\n\n onClickClearAll(evt: Event): void {\n evt.stopPropagation();\n this.unselectAllActiveOptions();\n this.eclChange.emit([]);\n this.propagateChange([]);\n }\n\n onEnterClear(evt: Event): void {\n this.onClickClearAll(evt);\n this.eclMultiselectInput()?.onFocus();\n }\n\n onClickClose(evt: Event): void {\n if (!this.isSubmitOnApply()) {\n evt.preventDefault();\n }\n this.hideMultiselectDropdown();\n }\n\n onArrowUpClose(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n currentOptions[currentOptions.length - 1].onFocus();\n }\n\n onArrowDownClose(evt: Event): void {\n evt.preventDefault();\n this.renderer.selectRootElement(this.clearAllBtn().nativeElement, true).focus();\n }\n\n onTabClose(evt: Event): void {\n if (!(evt as KeyboardEvent).shiftKey) {\n evt.preventDefault();\n this.renderer.selectRootElement(this.clearAllBtn()?.nativeElement, true).focus();\n }\n }\n\n onArrowUpClear(evt: Event): void {\n evt.preventDefault();\n this.renderer.selectRootElement(this.closeBtn()?.nativeElement, true).focus();\n }\n\n onArrowDownClear(evt: Event): void {\n evt.preventDefault();\n this.eclMultiselectInput().onFocus();\n }\n\n onTabClear(evt: Event): void {\n if (!(evt as KeyboardEvent).shiftKey) {\n evt.preventDefault();\n this.hideMultiselectDropdown();\n this.eclMultiselectInput().onFocus();\n }\n }\n\n onEnterSearch(evt: Event): void {\n evt.preventDefault();\n }\n\n onArrowDownSearch(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n if (this.hasSelectAll) {\n this.renderer.selectRootElement(this.selectAllCheckbox()?.nativeElement, true).focus();\n } else {\n currentOptions[0].onFocus();\n }\n }\n\n onArrowUpSearch(evt: Event): void {\n evt.preventDefault();\n this.hideMultiselectDropdown();\n this.eclMultiselectInput().onFocus();\n }\n\n onKeydownMainInput(evt: Event): void {\n evt.preventDefault();\n this.showMultiselectDropdown();\n if (this.hasSearchBox) {\n setTimeout(() => this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus());\n } else {\n this.onArrowDownSearch(evt);\n }\n }\n\n onClickMainInput(evt: EclMultiselectMainInputClickEvent): void {\n evt.event.preventDefault();\n this.toggleDropdown();\n }\n\n onArrowDownSelectAll(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n if (currentOptions.length > 0) {\n currentOptions[0].onFocus();\n }\n }\n\n onArrowUpSelectAll(evt: Event): void {\n evt.preventDefault();\n if (this.hasSearchBox) {\n this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus();\n } else {\n this.onArrowUpSearch(evt);\n }\n }\n\n onEnterSelectAll(evt: Event): void {\n evt.preventDefault();\n (evt.target as HTMLInputElement).click();\n }\n\n /**\n * Handles search input, filters options, and updates their visibility.\n */\n onSearch(input: EventTarget): void {\n const keyword = (input as HTMLInputElement).value;\n let isMatchFound = false;\n if (keyword === '') {\n this.enableSelectAll();\n isMatchFound = true;\n this.multiOptionComponents.forEach((item) => {\n item.highlightSearchText('');\n item.show();\n });\n } else {\n this.multiOptionComponents.forEach((item) => {\n if (item.label.toLowerCase().indexOf(keyword.toLowerCase()) < 0) {\n item.hide();\n } else {\n isMatchFound = true;\n item.highlightSearchText(keyword.toLowerCase());\n item.show();\n }\n });\n this.disableSelectAll();\n }\n if (!isMatchFound) {\n this.showNoResultsFound();\n } else {\n this.hideNoResultsFound();\n }\n }\n\n /**\n * Toggles all visible options based on the \"Select All\" checkbox.\n */\n onSelectAll(): void {\n if (this.selectAllCheckbox()?.nativeElement.checked) {\n this.selectAllActiveOptions();\n } else {\n this.unselectAllActiveOptions();\n }\n this.propagateTouched();\n this.eclChange.emit(this._selectedItems().map((item) => item.value));\n this.propagateChange(this._selectedItems().map((item) => item.value));\n }\n\n /**\n * Handles keyboard interaction on option items.\n * Supports arrow keys, tab, escape, and enter.\n */\n onKeydownOption(evt: EclMultiselectOptionKeydownEvent): void {\n switch (evt.keyboardEvent.key) {\n case KeyCode.ARROW_DOWN: {\n this.onArrowDownAndTabOption(evt.keyboardEvent, evt.multiselectOption);\n break;\n }\n case KeyCode.ARROW_UP: {\n this.onArrowUpOption(evt.keyboardEvent, evt.multiselectOption);\n break;\n }\n case KeyCode.ENTER: {\n (evt.keyboardEvent.target as HTMLInputElement).click();\n break;\n }\n case KeyCode.TAB: {\n if (!evt.keyboardEvent.shiftKey) {\n this.onArrowDownAndTabOption(evt.keyboardEvent, evt.multiselectOption);\n }\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * Triggered when a single option is clicked/selected.\n * Updates selected items, emits changes.\n */\n onOptionSelected(evt: EclMultiselectOptionClickEvent): void {\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox && selectAllCheckbox.nativeElement.checked) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n const currOption = evt.multiselectOption;\n if (currOption.isChecked) {\n this._selectedItems.update((items) => [...items, currOption]);\n } else {\n this._selectedItems.update((items) => items.filter((item) => item !== currOption));\n }\n this.propagateChange(this._selectedItems().map((item) => item.value));\n this.propagateTouched();\n this.eclChange.emit(this._selectedItems().map((item) => item.value));\n }\n\n private selectAllActiveOptions(): void {\n const newItems: EclMultiselectOption[] = [...this._selectedItems()];\n this.getActiveOptions().forEach((item) => {\n if (!item.isChecked) {\n item.isChecked = true;\n newItems.push(item);\n }\n });\n this._selectedItems.set(newItems);\n }\n\n private unselectAllActiveOptions(): void {\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n this._selectedItems.set([]);\n this.getAvailableOptions().forEach((item) => {\n item.isChecked = false;\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private propagateChange = (_: any): void => {\n /* empty */\n };\n\n private propagateTouched = (): void => {\n /* empty */\n };\n\n private showMultiselectDropdown(): void {\n this.isShowMultiselectDropdown = true;\n }\n\n private hideMultiselectDropdown(): void {\n this.isShowMultiselectDropdown = false;\n }\n\n private disableSelectAll(): void {\n this.isSelectAllDisabled = true;\n }\n\n private enableSelectAll(): void {\n this.isSelectAllDisabled = null;\n }\n\n private showNoResultsFound(): void {\n this.isShowNoResultsFound = true;\n }\n\n private hideNoResultsFound(): void {\n this.isShowNoResultsFound = false;\n }\n\n private resetComponent(): void {\n this.multiOptionComponents.forEach((item) => {\n item.isChecked = false;\n });\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n this._selectedItems.set([]);\n }\n\n private writeValues(values: string[]): void {\n if (values) {\n const newItems: EclMultiselectOption[] = [...this._selectedItems()];\n if (this.multiOptionComponents && this.multiOptionComponents.length > 0) {\n this.multiOptionComponents\n .filter((item) => values.includes(item.value) && !item.disabled)\n .forEach((el) => {\n el.isChecked = true;\n newItems.push(el);\n });\n }\n this._selectedItems.set(newItems);\n }\n }\n\n private toggleDropdown(): void {\n this.isShowMultiselectDropdown = !this.isShowMultiselectDropdown;\n }\n\n private onArrowDownAndTabOption(evt: KeyboardEvent, option: EclMultiselectOption): void {\n (evt as KeyboardEvent).preventDefault();\n const index = this.getOptionIndexByIdFromActiveOptions(option.id);\n const currentOptions = this.getActiveOptions();\n const closeBtn = this.closeBtn();\n if (index !== currentOptions.length - 1) {\n const nextSiblingCheckbox = currentOptions[index + 1];\n nextSiblingCheckbox.onFocus();\n } else if (closeBtn) {\n this.renderer.selectRootElement(closeBtn.nativeElement, true).focus();\n }\n }\n\n private onArrowUpOption(evt: KeyboardEvent, option: EclMultiselectOption): void {\n (evt as KeyboardEvent).preventDefault();\n const index = this.getOptionIndexByIdFromActiveOptions(option.id);\n const selectAllCheckbox = this.selectAllCheckbox();\n if (index !== 0) {\n const prevSiblingCheckbox = this.getActiveOptions()[index - 1];\n prevSiblingCheckbox.onFocus();\n } else if (!this.hasSelectAll || selectAllCheckbox.nativeElement.disabled) {\n if (this.hasSearchBox) {\n this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus();\n } else {\n this.onArrowUpSearch(evt);\n }\n } else {\n this.renderer.selectRootElement(selectAllCheckbox.nativeElement, true).focus();\n }\n }\n\n private getActiveOptions(): EclMultiselectOptionComponent[] {\n return this.multiOptionComponents ? this.multiOptionComponents.filter((item) => item.isActive) : [];\n }\n\n private getAvailableOptions(): EclMultiselectOptionComponent[] {\n return this.multiOptionComponents ? this.multiOptionComponents.filter((item) => !item.disabled) : [];\n }\n\n private getOptionIndexByIdFromActiveOptions(id: string): number {\n return this.getActiveOptions().findIndex((option) => option.id === id);\n }\n\n private getSelectAllId(): string {\n return crypto.randomUUID();\n }\n\n private getDropdownId(): string {\n return this.id !== '' ? `${this.id}-dropdown` : crypto.randomUUID();\n }\n\n private getToggleId(): string {\n return this.id !== '' ? `${this.id}-toggle` : crypto.randomUUID();\n }\n\n private modifyParentLabelForAttribute(): void {\n const form = this.renderer.parentNode(this.elRef.nativeElement);\n const label = form?.querySelector('.ecl-form-label');\n if (label) {\n this.renderer.setAttribute(label, 'for', this.toggleId);\n }\n }\n}\n",
67786
+ "sourceCode": "import { Component, computed, DoCheck, effect, ElementRef, forwardRef, OnDestroy, OnInit, Renderer2, signal, untracked, inject, output, viewChild, viewChildren } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { KeyCode } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclMultiselectInputComponent } from '../ecl-multiselect-input/ecl-multiselect-input.component';\nimport { EclMultiselectOptionDirective } from '../ecl-multiselect-option.directive';\nimport { EclMultiselectOptionComponent } from '../ecl-multiselect-option/ecl-multiselect-option.component';\nimport { EclMultiselectOption } from '../models/ecl-multiselect-option.model';\nimport { EclMultiselectMainInputClickEvent, EclMultiselectOptionClickEvent, EclMultiselectOptionKeydownEvent } from '../events';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EclMultiselectOptgroupComponent } from '../ecl-multiselect-optgroup/ecl-multiselect-optgroup.component';\nimport { EUI_ECL_CHECKBOX } from '@eui/ecl/components/ecl-checkbox';\n\n/**\n * Component that renders a dropdown-style multiselect UI element.\n * Used internally by the `EclMultiselectComponent`.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectDropdown]',\n templateUrl: 'ecl-multiselect-dropdown.component.html',\n imports: [\n ...EUI_ECL_BUTTON, EclMultiselectOptionComponent, EclMultiselectOptgroupComponent,\n EclMultiselectInputComponent, ...EUI_ECL_CHECKBOX, TranslatePipe,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclMultiselectDropdownComponent),\n multi: true,\n },\n ],\n host: {\n '[class]': 'cssClasses',\n '(keyup.escape)': 'onEscapeKey()',\n '(document:click)': 'onKeyUp($event)',\n '[attr.disabled]': 'disabled() || undefined',\n },\n})\nexport class EclMultiselectDropdownComponent extends ECLBaseDirective implements OnInit, ControlValueAccessor, DoCheck, OnDestroy {\n\n /**\n * Emits the list of selected values whenever the selection changes.\n */\n readonly eclChange = output<string[]>();\n\n /**\n * State configured imperatively by the parent `EclMultiselectComponent`.\n * This dropdown is created dynamically and is never bound in a template, so these\n * are writable signals set through their `.set()` accessor rather than inputs.\n */\n readonly isInvalid = signal<boolean | undefined>(undefined);\n\n /**\n * Placeholder for the main multiselect input.\n */\n readonly mainInputPlaceholder = signal('Select an item');\n\n /**\n * Placeholder for the search field input.\n */\n readonly searchFieldPlaceholder = signal('Enter filter keyword');\n\n /**\n * Size of the multiselect dropdown (e.g., 'm', 'l').\n */\n readonly eclSize = signal('m');\n\n /**\n * Disables the component when true.\n * Set by the parent and by `ControlValueAccessor.setDisabledState`.\n */\n readonly disabled = signal<boolean | undefined>(undefined);\n\n /**\n * Optional ARIA description used for accessibility purposes.\n */\n readonly ariaDescribedby = signal<string | undefined>(undefined);\n\n /**\n * Label displayed for the toggle button to assist screen readers.\n */\n readonly toggleLabel = signal<string | undefined>(undefined);\n\n /**\n * Enables the search box in the dropdown interface.\n */\n readonly hasSearchBox = signal(true);\n\n /**\n * Displays the \"Select all\" checkbox above the list of options.\n */\n readonly hasSelectAll = signal(true);\n\n /**\n * When true, the Apply button acts as a submit button (type=\"submit\") instead of a regular button.\n */\n readonly isSubmitOnApply = signal(false);\n\n /**\n * Label for the selections counter, read by screen readers.\n */\n readonly counterLabel = signal('ecl.multiselect.SELECTED');\n\n /**\n * Optional identifier used for the dropdown element.\n */\n readonly id = signal('');\n\n /**\n * List of option directives currently rendered in the dropdown.\n */\n multiOptionDirectives = signal<EclMultiselectOptionDirective[]>([]);\n\n protected readonly searchInput = viewChild<ElementRef>('searchInput');\n protected readonly eclMultiselectInput = viewChild<EclMultiselectInputComponent>('eclMultiselectInput');\n protected readonly selectAllCheckbox = viewChild<ElementRef>('selectAllCheckbox');\n protected readonly closeBtn = viewChild('closeBtn', { read: ElementRef });\n protected readonly clearAllBtn = viewChild('clearAllBtn', { read: ElementRef });\n protected readonly multiOptionComponents = viewChildren(EclMultiselectOptionComponent);\n\n /**\n * Gets labels of currently selected options.\n */\n protected selectedItemsLabels = computed(() => this._selectedItems().map((item) => item.label()));\n\n /**\n * Controls the visibility of the multiselect toolbar.\n * Always visible when isSubmitOnApply is true so the user can submit the form.\n */\n protected isShowToolbar = computed(() => this.isSubmitOnApply() || this._selectedItems().length > 0);\n\n /**\n * Indicates that the \"no results found\" message should be displayed.\n */\n protected isShowNoResultsFound = false;\n\n /**\n * Controls the visibility of the multiselect dropdown.\n */\n protected isShowMultiselectDropdown = false;\n\n /**\n * Total number of options available in the dropdown list.\n */\n protected optionsCount = 0;\n\n protected dropdownId = '';\n protected isSelectAllDisabled: boolean | null = null;\n protected selectAllId = '';\n protected toggleId = '';\n\n private _selectedItems = signal<EclMultiselectOption[]>([]);\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private isWriteValueCalled = false;\n private values = [];\n private elRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n constructor() {\n super();\n // Re-apply the selection state whenever the rendered set of option components\n // changes. This replaces the previous QueryList.changes subscription: the option\n // components arrive asynchronously (the parent publishes the option directives via\n // a setTimeout, then the @for renders them), and their arrival does not always emit\n // a change event. Only the identity of the option list is tracked here; the option\n // state reads/writes inside applyOptionState run untracked so toggling an option\n // does not re-trigger this effect.\n effect(() => {\n const options = this.multiOptionComponents();\n if (options.length > 0) {\n untracked(() => this.applyOptionState());\n }\n });\n }\n\n ngDoCheck(): void {\n this.optionsCount = this.getAvailableOptions() ? this.getAvailableOptions().length : 0;\n }\n\n ngOnInit(): void {\n this.selectAllId = this.getSelectAllId();\n this.dropdownId = this.getDropdownId();\n this.toggleId = this.getToggleId();\n setTimeout(() => {\n this.modifyParentLabelForAttribute();\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n /**\n * Writes a new value to the component from the outside (e.g., form model).\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(values: any): void {\n if (this.multiOptionComponents() && this.multiOptionComponents().length > 0) {\n this.resetComponent();\n this.writeValues(values);\n } else {\n this.values = values;\n this.isWriteValueCalled = true;\n }\n }\n\n /**\n * Registers a callback function to be called when the value changes.\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers a callback function to be called when the component is touched.\n * Required by ControlValueAccessor.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Enables or disables the component.\n * Required by ControlValueAccessor.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Adds the ECL base CSS class for multiselect dropdowns.\n */\n protected get cssClasses(): string {\n return [super.getCssClasses('ecl-select__multiple')].join(' ').trim();\n }\n\n protected onEscapeKey(): void {\n this.hideMultiselectDropdown();\n this.eclMultiselectInput()?.onFocus();\n }\n\n protected onKeyUp(event: MouseEvent): void {\n if (!this.elRef.nativeElement.contains(event.target)) {\n this.hideMultiselectDropdown();\n }\n }\n\n protected onClickClearAll(evt: Event): void {\n evt.stopPropagation();\n this.unselectAllActiveOptions();\n this.eclChange.emit([]);\n this.propagateChange([]);\n }\n\n protected onEnterClear(evt: Event): void {\n this.onClickClearAll(evt);\n this.eclMultiselectInput()?.onFocus();\n }\n\n protected onClickClose(evt: Event): void {\n if (!this.isSubmitOnApply()) {\n evt.preventDefault();\n }\n this.hideMultiselectDropdown();\n }\n\n protected onArrowUpClose(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n currentOptions[currentOptions.length - 1].onFocus();\n }\n\n protected onArrowDownClose(evt: Event): void {\n evt.preventDefault();\n this.renderer.selectRootElement(this.clearAllBtn().nativeElement, true).focus();\n }\n\n protected onTabClose(evt: Event): void {\n if (!(evt as KeyboardEvent).shiftKey) {\n evt.preventDefault();\n this.renderer.selectRootElement(this.clearAllBtn()?.nativeElement, true).focus();\n }\n }\n\n protected onArrowUpClear(evt: Event): void {\n evt.preventDefault();\n this.renderer.selectRootElement(this.closeBtn()?.nativeElement, true).focus();\n }\n\n protected onArrowDownClear(evt: Event): void {\n evt.preventDefault();\n this.eclMultiselectInput().onFocus();\n }\n\n protected onTabClear(evt: Event): void {\n if (!(evt as KeyboardEvent).shiftKey) {\n evt.preventDefault();\n this.hideMultiselectDropdown();\n this.eclMultiselectInput().onFocus();\n }\n }\n\n protected onEnterSearch(evt: Event): void {\n evt.preventDefault();\n }\n\n protected onArrowDownSearch(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n if (this.hasSelectAll()) {\n this.renderer.selectRootElement(this.selectAllCheckbox()?.nativeElement, true).focus();\n } else {\n currentOptions[0].onFocus();\n }\n }\n\n protected onArrowUpSearch(evt: Event): void {\n evt.preventDefault();\n this.hideMultiselectDropdown();\n this.eclMultiselectInput().onFocus();\n }\n\n protected onKeydownMainInput(evt: Event): void {\n evt.preventDefault();\n this.showMultiselectDropdown();\n if (this.hasSearchBox()) {\n setTimeout(() => this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus());\n } else {\n this.onArrowDownSearch(evt);\n }\n }\n\n protected onClickMainInput(evt: EclMultiselectMainInputClickEvent): void {\n evt.event.preventDefault();\n this.toggleDropdown();\n }\n\n protected onArrowDownSelectAll(evt: Event): void {\n evt.preventDefault();\n const currentOptions = this.getActiveOptions();\n if (currentOptions.length > 0) {\n currentOptions[0].onFocus();\n }\n }\n\n protected onArrowUpSelectAll(evt: Event): void {\n evt.preventDefault();\n if (this.hasSearchBox()) {\n this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus();\n } else {\n this.onArrowUpSearch(evt);\n }\n }\n\n protected onEnterSelectAll(evt: Event): void {\n evt.preventDefault();\n (evt.target as HTMLInputElement).click();\n }\n\n /**\n * Handles search input, filters options, and updates their visibility.\n */\n protected onSearch(input: EventTarget): void {\n const keyword = (input as HTMLInputElement).value;\n let isMatchFound = false;\n if (keyword === '') {\n this.enableSelectAll();\n isMatchFound = true;\n this.multiOptionComponents().forEach((item) => {\n item.highlightSearchText('');\n item.show();\n });\n } else {\n this.multiOptionComponents().forEach((item) => {\n if (item.label().toLowerCase().indexOf(keyword.toLowerCase()) < 0) {\n item.hide();\n } else {\n isMatchFound = true;\n item.highlightSearchText(keyword.toLowerCase());\n item.show();\n }\n });\n this.disableSelectAll();\n }\n if (!isMatchFound) {\n this.showNoResultsFound();\n } else {\n this.hideNoResultsFound();\n }\n }\n\n /**\n * Toggles all visible options based on the \"Select All\" checkbox.\n */\n protected onSelectAll(): void {\n if (this.selectAllCheckbox()?.nativeElement.checked) {\n this.selectAllActiveOptions();\n } else {\n this.unselectAllActiveOptions();\n }\n this.propagateTouched();\n this.eclChange.emit(this._selectedItems().map((item) => item.value()));\n this.propagateChange(this._selectedItems().map((item) => item.value()));\n }\n\n /**\n * Handles keyboard interaction on option items.\n * Supports arrow keys, tab, escape, and enter.\n */\n protected onKeydownOption(evt: EclMultiselectOptionKeydownEvent): void {\n switch (evt.keyboardEvent.key) {\n case KeyCode.ARROW_DOWN: {\n this.onArrowDownAndTabOption(evt.keyboardEvent, evt.multiselectOption);\n break;\n }\n case KeyCode.ARROW_UP: {\n this.onArrowUpOption(evt.keyboardEvent, evt.multiselectOption);\n break;\n }\n case KeyCode.ENTER: {\n (evt.keyboardEvent.target as HTMLInputElement).click();\n break;\n }\n case KeyCode.TAB: {\n if (!evt.keyboardEvent.shiftKey) {\n this.onArrowDownAndTabOption(evt.keyboardEvent, evt.multiselectOption);\n }\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * Triggered when a single option is clicked/selected.\n * Updates selected items, emits changes.\n */\n protected onOptionSelected(evt: EclMultiselectOptionClickEvent): void {\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox && selectAllCheckbox.nativeElement.checked) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n const currOption = evt.multiselectOption;\n if (currOption.isChecked()) {\n this._selectedItems.update((items) => [...items, currOption]);\n } else {\n this._selectedItems.update((items) => items.filter((item) => item !== currOption));\n }\n this.propagateChange(this._selectedItems().map((item) => item.value()));\n this.propagateTouched();\n this.eclChange.emit(this._selectedItems().map((item) => item.value()));\n }\n\n private applyOptionState(): void {\n if (this.isWriteValueCalled) {\n this.resetComponent();\n this.writeValues(this.values);\n this.isWriteValueCalled = false;\n } else {\n this.initSelectedOptions();\n }\n this.optionsCount = this.getAvailableOptions() ? this.getAvailableOptions().length : 0;\n }\n\n private initSelectedOptions(): void {\n const items: EclMultiselectOption[] = [];\n this.multiOptionComponents()\n .filter((elem) => elem.isChecked())\n .forEach((item) => {\n items.push(item);\n });\n this._selectedItems.set(items);\n }\n\n private selectAllActiveOptions(): void {\n const newItems: EclMultiselectOption[] = [...this._selectedItems()];\n this.getActiveOptions().forEach((item) => {\n if (!item.isChecked()) {\n item.isChecked.set(true);\n newItems.push(item);\n }\n });\n this._selectedItems.set(newItems);\n }\n\n private unselectAllActiveOptions(): void {\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n this._selectedItems.set([]);\n this.getAvailableOptions().forEach((item) => {\n item.isChecked.set(false);\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private propagateChange = (_: any): void => {\n /* empty */\n };\n\n private propagateTouched = (): void => {\n /* empty */\n };\n\n private showMultiselectDropdown(): void {\n this.isShowMultiselectDropdown = true;\n }\n\n private hideMultiselectDropdown(): void {\n this.isShowMultiselectDropdown = false;\n }\n\n private disableSelectAll(): void {\n this.isSelectAllDisabled = true;\n }\n\n private enableSelectAll(): void {\n this.isSelectAllDisabled = null;\n }\n\n private showNoResultsFound(): void {\n this.isShowNoResultsFound = true;\n }\n\n private hideNoResultsFound(): void {\n this.isShowNoResultsFound = false;\n }\n\n private resetComponent(): void {\n this.multiOptionComponents().forEach((item) => {\n item.isChecked.set(false);\n });\n const selectAllCheckbox = this.selectAllCheckbox();\n if (selectAllCheckbox) {\n this.renderer.setProperty(selectAllCheckbox.nativeElement, 'checked', false);\n }\n this._selectedItems.set([]);\n }\n\n private writeValues(values: string[]): void {\n if (values) {\n const newItems: EclMultiselectOption[] = [...this._selectedItems()];\n if (this.multiOptionComponents() && this.multiOptionComponents().length > 0) {\n this.multiOptionComponents()\n .filter((item) => values.includes(item.value()) && !item.disabled())\n .forEach((el) => {\n el.isChecked.set(true);\n newItems.push(el);\n });\n }\n this._selectedItems.set(newItems);\n }\n }\n\n private toggleDropdown(): void {\n this.isShowMultiselectDropdown = !this.isShowMultiselectDropdown;\n }\n\n private onArrowDownAndTabOption(evt: KeyboardEvent, option: EclMultiselectOption): void {\n (evt as KeyboardEvent).preventDefault();\n const index = this.getOptionIndexByIdFromActiveOptions(option.id);\n const currentOptions = this.getActiveOptions();\n const closeBtn = this.closeBtn();\n if (index !== currentOptions.length - 1) {\n const nextSiblingCheckbox = currentOptions[index + 1];\n nextSiblingCheckbox.onFocus();\n } else if (closeBtn) {\n this.renderer.selectRootElement(closeBtn.nativeElement, true).focus();\n }\n }\n\n private onArrowUpOption(evt: KeyboardEvent, option: EclMultiselectOption): void {\n (evt as KeyboardEvent).preventDefault();\n const index = this.getOptionIndexByIdFromActiveOptions(option.id);\n const selectAllCheckbox = this.selectAllCheckbox();\n if (index !== 0) {\n const prevSiblingCheckbox = this.getActiveOptions()[index - 1];\n prevSiblingCheckbox.onFocus();\n } else if (!this.hasSelectAll() || selectAllCheckbox.nativeElement.disabled) {\n if (this.hasSearchBox()) {\n this.renderer.selectRootElement(this.searchInput()?.nativeElement, true).focus();\n } else {\n this.onArrowUpSearch(evt);\n }\n } else {\n this.renderer.selectRootElement(selectAllCheckbox.nativeElement, true).focus();\n }\n }\n\n private getActiveOptions(): EclMultiselectOptionComponent[] {\n return this.multiOptionComponents() ? this.multiOptionComponents().filter((item) => item.isActive) : [];\n }\n\n private getAvailableOptions(): EclMultiselectOptionComponent[] {\n return this.multiOptionComponents() ? this.multiOptionComponents().filter((item) => !item.disabled()) : [];\n }\n\n private getOptionIndexByIdFromActiveOptions(id: string): number {\n return this.getActiveOptions().findIndex((option) => option.id === id);\n }\n\n private getSelectAllId(): string {\n return crypto.randomUUID();\n }\n\n private getDropdownId(): string {\n return this.id() !== '' ? `${this.id()}-dropdown` : crypto.randomUUID();\n }\n\n private getToggleId(): string {\n return this.id() !== '' ? `${this.id()}-toggle` : crypto.randomUUID();\n }\n\n private modifyParentLabelForAttribute(): void {\n const form = this.renderer.parentNode(this.elRef.nativeElement);\n const label = form?.querySelector('.ecl-form-label');\n if (label) {\n this.renderer.setAttribute(label, 'for', this.toggleId);\n }\n }\n}\n",
68102
67787
  "assetsDirs": [],
68103
67788
  "styleUrlsData": "",
68104
67789
  "stylesData": "",
68105
67790
  "jsdoctags": [
68106
67791
  {
68107
- "pos": 1288,
68108
- "end": 1415,
67792
+ "pos": 1189,
67793
+ "end": 1316,
68109
67794
  "kind": 321,
68110
67795
  "id": 0,
68111
67796
  "flags": 16777216,
@@ -68120,7 +67805,7 @@
68120
67805
  "deprecated": false,
68121
67806
  "deprecationMessage": "",
68122
67807
  "args": [],
68123
- "line": 171,
67808
+ "line": 160,
68124
67809
  "rawdescription": "\n"
68125
67810
  },
68126
67811
  "extends": [
@@ -68130,108 +67815,19 @@
68130
67815
  "OnInit",
68131
67816
  "ControlValueAccessor",
68132
67817
  "DoCheck",
68133
- "OnDestroy",
68134
- "AfterViewInit"
67818
+ "OnDestroy"
68135
67819
  ],
68136
67820
  "accessors": {
68137
- "isInvalid": {
68138
- "name": "isInvalid",
68139
- "setSignature": {
68140
- "name": "isInvalid",
68141
- "type": "void",
68142
- "deprecated": false,
68143
- "deprecationMessage": "",
68144
- "args": [
68145
- {
68146
- "name": "value",
68147
- "type": "boolean | undefined",
68148
- "optional": false,
68149
- "dotDotDotToken": false,
68150
- "deprecated": false,
68151
- "deprecationMessage": ""
68152
- }
68153
- ],
68154
- "returnType": "void",
68155
- "line": 62,
68156
- "rawdescription": "\n",
68157
- "description": "",
68158
- "jsdoctags": [
68159
- {
68160
- "name": "value",
68161
- "type": "boolean | undefined",
68162
- "optional": false,
68163
- "dotDotDotToken": false,
68164
- "deprecated": false,
68165
- "deprecationMessage": "",
68166
- "tagName": {
68167
- "text": "param"
68168
- }
68169
- }
68170
- ]
68171
- },
68172
- "getSignature": {
68173
- "name": "isInvalid",
68174
- "type": "unknown",
68175
- "returnType": "boolean | undefined",
68176
- "line": 59,
68177
- "rawdescription": "\n\nMarks the component as visually invalid.\n",
68178
- "description": "<p>Marks the component as visually invalid.</p>\n"
68179
- }
68180
- },
68181
67821
  "cssClasses": {
68182
67822
  "name": "cssClasses",
68183
67823
  "getSignature": {
68184
67824
  "name": "cssClasses",
68185
67825
  "type": "string",
68186
67826
  "returnType": "string",
68187
- "line": 70,
67827
+ "line": 241,
68188
67828
  "rawdescription": "\n\nAdds the ECL base CSS class for multiselect dropdowns.\n",
68189
67829
  "description": "<p>Adds the ECL base CSS class for multiselect dropdowns.</p>\n"
68190
67830
  }
68191
- },
68192
- "disabled": {
68193
- "name": "disabled",
68194
- "setSignature": {
68195
- "name": "disabled",
68196
- "type": "void",
68197
- "deprecated": false,
68198
- "deprecationMessage": "",
68199
- "args": [
68200
- {
68201
- "name": "value",
68202
- "type": "boolean | undefined",
68203
- "optional": false,
68204
- "dotDotDotToken": false,
68205
- "deprecated": false,
68206
- "deprecationMessage": ""
68207
- }
68208
- ],
68209
- "returnType": "void",
68210
- "line": 96,
68211
- "rawdescription": "\n",
68212
- "description": "",
68213
- "jsdoctags": [
68214
- {
68215
- "name": "value",
68216
- "type": "boolean | undefined",
68217
- "optional": false,
68218
- "dotDotDotToken": false,
68219
- "deprecated": false,
68220
- "deprecationMessage": "",
68221
- "tagName": {
68222
- "text": "param"
68223
- }
68224
- }
68225
- ]
68226
- },
68227
- "getSignature": {
68228
- "name": "disabled",
68229
- "type": "unknown",
68230
- "returnType": "boolean | undefined",
68231
- "line": 93,
68232
- "rawdescription": "\n\nDisables the component when true.\n",
68233
- "description": "<p>Disables the component when true.</p>\n"
68234
- }
68235
67831
  }
68236
67832
  },
68237
67833
  "relationships": {
@@ -68287,18 +67883,14 @@
68287
67883
  {
68288
67884
  "name": "OnDestroy",
68289
67885
  "type": "interface"
68290
- },
68291
- {
68292
- "name": "AfterViewInit",
68293
- "type": "interface"
68294
67886
  }
68295
67887
  ]
68296
67888
  },
68297
- "templateData": "<div eclMultiselectInput #eclMultiselectInput [inputPlaceholder]=\"mainInputPlaceholder\" [selectedItems]=\"selectedItems()\"\n (mainInputClick)=\"onClickMainInput($event)\" (mainInputKeydown)=\"onKeydownMainInput($event)\" [isDisabled]=\"disabled\"\n [ariaDescribedby]=\"ariaDescribedby\" [toggleLabel]=\"toggleLabel\" [ariaControls]=\"dropdownId\" [isInvalid]=\"isInvalid\"\n [isDropdownExpanded]=\"isShowMultiselectDropdown\" [eclSize]=\"eclSize\" [toggleId]=\"toggleId\" [counterLabel]=\"counterLabel\"></div>\n<div\n [style.display]=\"isShowMultiselectDropdown ? 'block' : 'none'\"\n class=\"ecl-select__multiple-dropdown ecl-select__container ecl-select__container--{{eclSize}}\"\n [id]=\"dropdownId\">\n @if(hasSearchBox) {\n <input class=\"ecl-text-input\" type=\"search\" #searchInput [placeholder]=\"searchFieldPlaceholder()\"\n (input)=\"onSearch($event.target)\" (keydown.enter)=\"onEnterSearch($event)\" [attr.aria-label]=\"searchFieldPlaceholder()\"\n (keydown.arrowup)=\"onArrowUpSearch($event)\" (keydown.arrowdown)=\"onArrowDownSearch($event)\" />\n }\n @if(hasSelectAll) {\n <div eclCheckbox [isDisabled]=\"isSelectAllDisabled\" class=\"ecl-select__multiple-all\">\n <input eclCheckboxInput #selectAllCheckbox [id]=\"selectAllId\" type=\"checkbox\" [attr.disabled]=\"isSelectAllDisabled\"\n (click)=\"onSelectAll()\" (keydown.arrowup)=\"onArrowUpSelectAll($event)\"\n (keydown.arrowdown)=\"onArrowDownSelectAll($event)\" (keydown.enter)=\"onEnterSelectAll($event)\" />\n <label [for]=\"selectAllId\" eclCheckboxLabel> {{ 'ecl.multiselect.SELECT-ALL' | translate }} ({{ optionsCount }})\n </label>\n </div>\n }\n <div class=\"ecl-select__multiple-options\" aria-live=\"polite\">\n @for (item of multiOptionDirectives(); track item.label()) {\n @if (item.isOptGroup()) {\n <fieldset eclMultiselectOptgroup [label]=\"item.label()\">\n @for (elem of item.eclOptionItems(); track elem.label()) {\n <div\n eclMultiselectOption\n [value]=\"elem.value()\"\n [label]=\"elem.label()\"\n [disabled]=\"elem.disabled\"\n [isChecked]=\"elem.selected\"\n [class]=\"elem.class\"\n (optionClick)=\"onOptionSelected($event)\"\n (optionKeydown)=\"onKeydownOption($event)\"></div>\n }\n </fieldset>\n } @else if (!item.isOptGroup()) {\n <div\n eclMultiselectOption\n [value]=\"item.value()\"\n [label]=\"item.label()\"\n [disabled]=\"item.disabled\"\n [isChecked]=\"item.selected\"\n [class]=\"item.class\"\n (optionClick)=\"onOptionSelected($event)\"\n (optionKeydown)=\"onKeydownOption($event)\"></div>\n }\n }\n\n\n @if (isShowNoResultsFound) {\n <div class=\"ecl-select__multiple-no-results\">\n <span>{{ 'ecl.multiselect.NO-RESULTS-FOUND' | translate }}</span>\n </div>\n }\n\n </div>\n @if (isShowToolbar()) {\n <div class=\"ecl-select-multiple-toolbar\">\n <button\n eclButton\n variant=\"primary\"\n #closeBtn\n [type]=\"isSubmitOnApply() ? 'submit' : 'button'\"\n (keydown.arrowup)=\"onArrowUpClose($event)\"\n (keydown.arrowDown)=\"onArrowDownClose($event)\"\n (keydown.tab)=\"onTabClose($event)\"\n (click)=\"onClickClose($event)\">\n {{ 'ecl.common.APPLY' | translate }}\n </button>\n <button\n eclButton\n variant=\"tertiary\"\n #clearAllBtn\n (keydown.arrowup)=\"onArrowUpClear($event)\"\n (keydown.arrowDown)=\"onArrowDownClear($event)\"\n (keydown.tab)=\"onTabClear($event)\"\n (keydown.enter)=\"onEnterClear($event)\"\n (click)=\"onClickClearAll($event)\">\n {{ 'ecl.multiselect.CLEAR-ALL' | translate }}\n </button>\n </div>\n }\n</div>\n"
67889
+ "templateData": "<div eclMultiselectInput #eclMultiselectInput [inputPlaceholder]=\"mainInputPlaceholder()\" [selectedItemsLabels]=\"selectedItemsLabels()\"\n (mainInputClick)=\"onClickMainInput($event)\" (mainInputKeydown)=\"onKeydownMainInput($event)\" [isDisabled]=\"disabled()\"\n [ariaDescribedby]=\"ariaDescribedby()\" [toggleLabel]=\"toggleLabel()\" [ariaControls]=\"dropdownId\" [isInvalid]=\"isInvalid()\"\n [isDropdownExpanded]=\"isShowMultiselectDropdown\" [eclSize]=\"eclSize()\" [toggleId]=\"toggleId\" [counterLabel]=\"counterLabel()\"></div>\n<div\n [style.display]=\"isShowMultiselectDropdown ? 'block' : 'none'\"\n class=\"ecl-select__multiple-dropdown ecl-select__container ecl-select__container--{{eclSize()}}\"\n [id]=\"dropdownId\">\n @if(hasSearchBox()) {\n <input class=\"ecl-text-input\" type=\"search\" #searchInput [placeholder]=\"searchFieldPlaceholder()\"\n (input)=\"onSearch($event.target)\" (keydown.enter)=\"onEnterSearch($event)\" [attr.aria-label]=\"searchFieldPlaceholder()\"\n (keydown.arrowup)=\"onArrowUpSearch($event)\" (keydown.arrowdown)=\"onArrowDownSearch($event)\" />\n }\n @if(hasSelectAll()) {\n <div eclCheckbox [isDisabled]=\"isSelectAllDisabled\" class=\"ecl-select__multiple-all\">\n <input eclCheckboxInput #selectAllCheckbox [id]=\"selectAllId\" type=\"checkbox\" [attr.disabled]=\"isSelectAllDisabled\"\n (click)=\"onSelectAll()\" (keydown.arrowup)=\"onArrowUpSelectAll($event)\"\n (keydown.arrowdown)=\"onArrowDownSelectAll($event)\" (keydown.enter)=\"onEnterSelectAll($event)\" />\n <label [for]=\"selectAllId\" eclCheckboxLabel> {{ 'ecl.multiselect.SELECT-ALL' | translate }} ({{ optionsCount }})\n </label>\n </div>\n }\n <div class=\"ecl-select__multiple-options\" aria-live=\"polite\">\n @for (item of multiOptionDirectives(); track item.label()) {\n @if (item.isOptGroup()) {\n <fieldset eclMultiselectOptgroup [label]=\"item.label()\">\n @for (elem of item.eclOptionItems(); track elem.label()) {\n <div\n eclMultiselectOption\n [value]=\"elem.value()\"\n [label]=\"elem.label()\"\n [disabled]=\"elem.disabled()\"\n [isChecked]=\"elem.selected()\"\n [class]=\"elem.class\"\n (optionClick)=\"onOptionSelected($event)\"\n (optionKeydown)=\"onKeydownOption($event)\"></div>\n }\n </fieldset>\n } @else if (!item.isOptGroup()) {\n <div\n eclMultiselectOption\n [value]=\"item.value()\"\n [label]=\"item.label()\"\n [disabled]=\"item.disabled()\"\n [isChecked]=\"item.selected()\"\n [class]=\"item.class\"\n (optionClick)=\"onOptionSelected($event)\"\n (optionKeydown)=\"onKeydownOption($event)\"></div>\n }\n }\n\n\n @if (isShowNoResultsFound) {\n <div class=\"ecl-select__multiple-no-results\">\n <span>{{ 'ecl.multiselect.NO-RESULTS-FOUND' | translate }}</span>\n </div>\n }\n\n </div>\n @if (isShowToolbar()) {\n <div class=\"ecl-select-multiple-toolbar\">\n <button\n eclButton\n variant=\"primary\"\n #closeBtn\n [type]=\"isSubmitOnApply() ? 'submit' : 'button'\"\n (keydown.arrowup)=\"onArrowUpClose($event)\"\n (keydown.arrowDown)=\"onArrowDownClose($event)\"\n (keydown.tab)=\"onTabClose($event)\"\n (click)=\"onClickClose($event)\">\n {{ 'ecl.common.APPLY' | translate }}\n </button>\n <button\n eclButton\n variant=\"tertiary\"\n #clearAllBtn\n (keydown.arrowup)=\"onArrowUpClear($event)\"\n (keydown.arrowDown)=\"onArrowDownClear($event)\"\n (keydown.tab)=\"onTabClear($event)\"\n (keydown.enter)=\"onEnterClear($event)\"\n (click)=\"onClickClearAll($event)\">\n {{ 'ecl.multiselect.CLEAR-ALL' | translate }}\n </button>\n </div>\n }\n</div>\n"
68298
67890
  },
68299
67891
  {
68300
67892
  "name": "EclMultiselectInputComponent",
68301
- "id": "component-EclMultiselectInputComponent-b7f3429a0cdb2eb544c6e609077fc9422a0e5cbd9d25668e95ef82aaac6c39d83553b7e1db18b4db4ba50595a087145aa62a2e3078244e18459d907db0d209e9",
67893
+ "id": "component-EclMultiselectInputComponent-2f973d47455461b5c3d53fbf54b66331657ecf900e01d29fa021ebaa5f93f3580b73247356f7f7d311fbb721eac4574b59d2c5f8ce169453e39fe46c632de314",
68302
67894
  "file": "packages/ecl/components/ecl-multiselect/ecl-multiselect-input/ecl-multiselect-input.component.ts",
68303
67895
  "encapsulation": [],
68304
67896
  "entryComponents": [],
@@ -68326,7 +67918,7 @@
68326
67918
  "indexKey": "",
68327
67919
  "optional": false,
68328
67920
  "description": "<p>ARIA controls attribute for accessibility.</p>\n",
68329
- "line": 90,
67921
+ "line": 75,
68330
67922
  "rawdescription": "\n\nARIA controls attribute for accessibility.\n",
68331
67923
  "required": false
68332
67924
  },
@@ -68340,7 +67932,7 @@
68340
67932
  "indexKey": "",
68341
67933
  "optional": false,
68342
67934
  "description": "<p>ARIA describedby attribute for accessibility.</p>\n",
68343
- "line": 95,
67935
+ "line": 80,
68344
67936
  "rawdescription": "\n\nARIA describedby attribute for accessibility.\n",
68345
67937
  "required": false
68346
67938
  },
@@ -68354,7 +67946,7 @@
68354
67946
  "indexKey": "",
68355
67947
  "optional": false,
68356
67948
  "description": "<p>Label for the selections counter, read by screen readers.</p>\n",
68357
- "line": 39,
67949
+ "line": 35,
68358
67950
  "rawdescription": "\n\nLabel for the selections counter, read by screen readers.\n",
68359
67951
  "required": false
68360
67952
  },
@@ -68368,7 +67960,7 @@
68368
67960
  "indexKey": "",
68369
67961
  "optional": false,
68370
67962
  "description": "<p>Size modifier for the multiselect input (e.g., &#39;s&#39;, &#39;m&#39;, &#39;l&#39;).</p>\n",
68371
- "line": 29,
67963
+ "line": 30,
68372
67964
  "rawdescription": "\n\nSize modifier for the multiselect input (e.g., 's', 'm', 'l').\n",
68373
67965
  "required": false
68374
67966
  },
@@ -68382,7 +67974,7 @@
68382
67974
  "indexKey": "",
68383
67975
  "optional": false,
68384
67976
  "description": "<p>Placeholder text for the input when no items are selected.</p>\n",
68385
- "line": 75,
67977
+ "line": 60,
68386
67978
  "rawdescription": "\n\nPlaceholder text for the input when no items are selected.\n",
68387
67979
  "required": false
68388
67980
  },
@@ -68396,7 +67988,7 @@
68396
67988
  "indexKey": "",
68397
67989
  "optional": false,
68398
67990
  "description": "<p>Marks the component as disabled.</p>\n",
68399
- "line": 54,
67991
+ "line": 50,
68400
67992
  "rawdescription": "\n\nMarks the component as disabled.\n",
68401
67993
  "required": false
68402
67994
  },
@@ -68410,7 +68002,7 @@
68410
68002
  "indexKey": "",
68411
68003
  "optional": false,
68412
68004
  "description": "<p>Indicates that the dropdown is currently expanded.</p>\n",
68413
- "line": 85,
68005
+ "line": 70,
68414
68006
  "rawdescription": "\n\nIndicates that the dropdown is currently expanded.\n",
68415
68007
  "required": false
68416
68008
  },
@@ -68424,12 +68016,12 @@
68424
68016
  "indexKey": "",
68425
68017
  "optional": false,
68426
68018
  "description": "<p>Marks the component as being in an invalid state.</p>\n",
68427
- "line": 59,
68019
+ "line": 55,
68428
68020
  "rawdescription": "\n\nMarks the component as being in an invalid state.\n",
68429
68021
  "required": false
68430
68022
  },
68431
68023
  {
68432
- "name": "selectedItems",
68024
+ "name": "selectedItemsLabels",
68433
68025
  "coverageIgnore": false,
68434
68026
  "defaultValue": "[]",
68435
68027
  "deprecated": false,
@@ -68438,7 +68030,7 @@
68438
68030
  "indexKey": "",
68439
68031
  "optional": false,
68440
68032
  "description": "<p>Array of currently selected item labels.</p>\n",
68441
- "line": 80,
68033
+ "line": 65,
68442
68034
  "rawdescription": "\n\nArray of currently selected item labels.\n",
68443
68035
  "required": false
68444
68036
  },
@@ -68452,7 +68044,7 @@
68452
68044
  "indexKey": "",
68453
68045
  "optional": false,
68454
68046
  "description": "<p>ID of the toggle button element (used for accessibility).</p>\n",
68455
- "line": 44,
68047
+ "line": 40,
68456
68048
  "rawdescription": "\n\nID of the toggle button element (used for accessibility).\n",
68457
68049
  "required": false
68458
68050
  },
@@ -68466,7 +68058,7 @@
68466
68058
  "indexKey": "",
68467
68059
  "optional": false,
68468
68060
  "description": "<p>Label for the toggle button (optional).</p>\n",
68469
- "line": 49,
68061
+ "line": 45,
68470
68062
  "rawdescription": "\n\nLabel for the toggle button (optional).\n",
68471
68063
  "required": false
68472
68064
  },
@@ -68524,7 +68116,7 @@
68524
68116
  "indexKey": "",
68525
68117
  "optional": false,
68526
68118
  "description": "<p>Event emitted when the input is clicked.</p>\n",
68527
- "line": 114,
68119
+ "line": 85,
68528
68120
  "rawdescription": "\n\nEvent emitted when the input is clicked.\n",
68529
68121
  "modifierKind": [
68530
68122
  148
@@ -68540,7 +68132,7 @@
68540
68132
  "indexKey": "",
68541
68133
  "optional": false,
68542
68134
  "description": "<p>Event emitted when a key is pressed on the input.</p>\n",
68543
- "line": 119,
68135
+ "line": 90,
68544
68136
  "rawdescription": "\n\nEvent emitted when a key is pressed on the input.\n",
68545
68137
  "modifierKind": [
68546
68138
  148
@@ -68559,21 +68151,27 @@
68559
68151
  "indexKey": "",
68560
68152
  "optional": false,
68561
68153
  "description": "<p>Computed ARIA describedby combining the input value with the counter ID.</p>\n",
68562
- "line": 100,
68563
- "rawdescription": "\n\nComputed ARIA describedby combining the input value with the counter ID.\n"
68154
+ "line": 105,
68155
+ "rawdescription": "\n\nComputed ARIA describedby combining the input value with the counter ID.\n",
68156
+ "modifierKind": [
68157
+ 124
68158
+ ]
68564
68159
  },
68565
68160
  {
68566
68161
  "name": "buttonText",
68567
68162
  "coverageIgnore": false,
68568
- "defaultValue": "computed(() => {\n const items = this.selectedItems();\n return items.length === 0 ? this.inputPlaceholder() : items.join(',');\n })",
68163
+ "defaultValue": "computed(() => {\n const items = this.selectedItemsLabels();\n return items.length === 0 ? this.inputPlaceholder() : items.join(',');\n })",
68569
68164
  "deprecated": false,
68570
68165
  "deprecationMessage": "",
68571
68166
  "type": "unknown",
68572
68167
  "indexKey": "",
68573
68168
  "optional": false,
68574
68169
  "description": "<p>Returns the label text shown inside the button.</p>\n",
68575
- "line": 129,
68576
- "rawdescription": "\n\nReturns the label text shown inside the button.\n"
68170
+ "line": 114,
68171
+ "rawdescription": "\n\nReturns the label text shown inside the button.\n",
68172
+ "modifierKind": [
68173
+ 124
68174
+ ]
68577
68175
  },
68578
68176
  {
68579
68177
  "name": "counterId",
@@ -68585,8 +68183,11 @@
68585
68183
  "indexKey": "",
68586
68184
  "optional": false,
68587
68185
  "description": "<p>Unique ID for the counter element.</p>\n",
68588
- "line": 34,
68589
- "rawdescription": "\n\nUnique ID for the counter element.\n"
68186
+ "line": 95,
68187
+ "rawdescription": "\n\nUnique ID for the counter element.\n",
68188
+ "modifierKind": [
68189
+ 124
68190
+ ]
68590
68191
  },
68591
68192
  {
68592
68193
  "name": "inputMultiselect",
@@ -68598,9 +68199,10 @@
68598
68199
  "indexKey": "",
68599
68200
  "optional": false,
68600
68201
  "description": "<p>Reference to the internal input element.</p>\n",
68601
- "line": 109,
68202
+ "line": 100,
68602
68203
  "rawdescription": "\n\nReference to the internal input element.\n",
68603
68204
  "modifierKind": [
68205
+ 124,
68604
68206
  148
68605
68207
  ]
68606
68208
  },
@@ -68614,34 +68216,43 @@
68614
68216
  "indexKey": "",
68615
68217
  "optional": false,
68616
68218
  "description": "<p>Indicates that the dropdown is expanded (active).</p>\n",
68617
- "line": 147,
68618
- "rawdescription": "\n\nIndicates that the dropdown is expanded (active).\n"
68219
+ "line": 132,
68220
+ "rawdescription": "\n\nIndicates that the dropdown is expanded (active).\n",
68221
+ "modifierKind": [
68222
+ 124
68223
+ ]
68619
68224
  },
68620
68225
  {
68621
68226
  "name": "isShowCounter",
68622
68227
  "coverageIgnore": false,
68623
- "defaultValue": "computed(() => this.selectedItems().length > 0)",
68228
+ "defaultValue": "computed(() => this.selectedItemsLabels().length > 0)",
68624
68229
  "deprecated": false,
68625
68230
  "deprecationMessage": "",
68626
68231
  "type": "unknown",
68627
68232
  "indexKey": "",
68628
68233
  "optional": false,
68629
68234
  "description": "<p>Displays a count badge when items are selected.</p>\n",
68630
- "line": 142,
68631
- "rawdescription": "\n\nDisplays a count badge when items are selected.\n"
68235
+ "line": 127,
68236
+ "rawdescription": "\n\nDisplays a count badge when items are selected.\n",
68237
+ "modifierKind": [
68238
+ 124
68239
+ ]
68632
68240
  },
68633
68241
  {
68634
68242
  "name": "selectedItemsCount",
68635
68243
  "coverageIgnore": false,
68636
- "defaultValue": "computed(() => this.selectedItems().length)",
68244
+ "defaultValue": "computed(() => this.selectedItemsLabels().length)",
68637
68245
  "deprecated": false,
68638
68246
  "deprecationMessage": "",
68639
68247
  "type": "unknown",
68640
68248
  "indexKey": "",
68641
68249
  "optional": false,
68642
68250
  "description": "<p>Returns the count of selected items.</p>\n",
68643
- "line": 137,
68644
- "rawdescription": "\n\nReturns the count of selected items.\n"
68251
+ "line": 122,
68252
+ "rawdescription": "\n\nReturns the count of selected items.\n",
68253
+ "modifierKind": [
68254
+ 124
68255
+ ]
68645
68256
  }
68646
68257
  ],
68647
68258
  "methodsClass": [
@@ -68661,11 +68272,14 @@
68661
68272
  "optional": false,
68662
68273
  "returnType": "void",
68663
68274
  "typeParameters": [],
68664
- "line": 163,
68275
+ "line": 170,
68665
68276
  "deprecated": false,
68666
68277
  "deprecationMessage": "",
68667
68278
  "rawdescription": "\n\nHandles click on the input container. Emits custom event with original DOM event.\n",
68668
68279
  "description": "<p>Handles click on the input container. Emits custom event with original DOM event.</p>\n",
68280
+ "modifierKind": [
68281
+ 124
68282
+ ],
68669
68283
  "jsdoctags": [
68670
68284
  {
68671
68285
  "name": "evt",
@@ -68687,7 +68301,7 @@
68687
68301
  "optional": false,
68688
68302
  "returnType": "void",
68689
68303
  "typeParameters": [],
68690
- "line": 189,
68304
+ "line": 163,
68691
68305
  "deprecated": false,
68692
68306
  "deprecationMessage": "",
68693
68307
  "rawdescription": "\n\nFocuses the multiselect input element.\n",
@@ -68709,11 +68323,14 @@
68709
68323
  "optional": false,
68710
68324
  "returnType": "void",
68711
68325
  "typeParameters": [],
68712
- "line": 171,
68326
+ "line": 178,
68713
68327
  "deprecated": false,
68714
68328
  "deprecationMessage": "",
68715
68329
  "rawdescription": "\n\nHandles keydown events on the input.\nOnly emits event on ArrowDown, Enter, or Space keys.\n",
68716
68330
  "description": "<p>Handles keydown events on the input.\nOnly emits event on ArrowDown, Enter, or Space keys.</p>\n",
68331
+ "modifierKind": [
68332
+ 124
68333
+ ],
68717
68334
  "jsdoctags": [
68718
68335
  {
68719
68336
  "name": "evt",
@@ -68770,20 +68387,7 @@
68770
68387
  "coverageIgnore": false,
68771
68388
  "deprecated": false,
68772
68389
  "deprecationMessage": "",
68773
- "hostBindings": [
68774
- {
68775
- "coverageIgnore": false,
68776
- "name": "class",
68777
- "actualName": "cssClasses",
68778
- "deprecated": false,
68779
- "deprecationMessage": "",
68780
- "rawdescription": "\n\nCSS classes for the component, including size and inherited classes.\n",
68781
- "description": "<p>CSS classes for the component, including size and inherited classes.</p>\n",
68782
- "line": 65,
68783
- "type": "string",
68784
- "decorators": []
68785
- }
68786
- ],
68390
+ "hostBindings": [],
68787
68391
  "hostListeners": [],
68788
68392
  "standalone": false,
68789
68393
  "imports": [
@@ -68801,14 +68405,14 @@
68801
68405
  "description": "<p>Component representing the main input of a multiselect component.\nHandles displaying selected items, opening the dropdown, and managing accessibility.</p>\n",
68802
68406
  "rawdescription": "\n\nComponent representing the main input of a multiselect component.\nHandles displaying selected items, opening the dropdown, and managing accessibility.\n",
68803
68407
  "type": "component",
68804
- "sourceCode": "import { Component, ElementRef, HostBinding, Renderer2, booleanAttribute, computed, inject, input, signal, output, viewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { KeyCode } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclThemeService } from '@eui/ecl/core';\nimport { EclMultiselectMainInputClickEvent } from '../events';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\n/**\n * Component representing the main input of a multiselect component.\n * Handles displaying selected items, opening the dropdown, and managing accessibility.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectInput]',\n templateUrl: './ecl-multiselect-input.component.html',\n imports: [TranslatePipe, ...EUI_ECL_BUTTON, ...EUI_ECL_ICON],\n host: {\n '[class.ecl-select__container--disabled]': 'isDisabled()',\n '[class.ecl-select__container--invalid]': 'isInvalid()',\n },\n})\nexport class EclMultiselectInputComponent extends ECLBaseDirective {\n\n /**\n * Size modifier for the multiselect input (e.g., 's', 'm', 'l').\n */\n eclSize = input('m');\n\n /**\n * Unique ID for the counter element.\n */\n counterId = signal(crypto.randomUUID());\n\n /**\n * Label for the selections counter, read by screen readers.\n */\n counterLabel = input('ecl.multiselect.SELECTED');\n\n /**\n * ID of the toggle button element (used for accessibility).\n */\n toggleId = input<string>('');\n\n /**\n * Label for the toggle button (optional).\n */\n toggleLabel = input<string | undefined>(undefined);\n\n /**\n * Marks the component as disabled.\n */\n isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Marks the component as being in an invalid state.\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * CSS classes for the component, including size and inherited classes.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [\n super.getCssClasses('ecl-select__container'),\n `ecl-select__container--${this.eclSize()}`,\n ].join(' ').trim();\n }\n\n /**\n * Placeholder text for the input when no items are selected.\n */\n inputPlaceholder = input('');\n\n /**\n * Array of currently selected item labels.\n */\n selectedItems = input<string[]>([]);\n\n /**\n * Indicates that the dropdown is currently expanded.\n */\n isDropdownExpanded = input(false, { transform: booleanAttribute });\n\n /**\n * ARIA controls attribute for accessibility.\n */\n ariaControls = input<string | undefined>(undefined);\n\n /**\n * ARIA describedby attribute for accessibility.\n */\n ariaDescribedby = input<string | undefined>(undefined);\n\n /**\n * Computed ARIA describedby combining the input value with the counter ID.\n */\n ariaDescribedbyFull = computed(() => {\n const describedby = this.ariaDescribedby();\n const counter = this.counterId();\n return [describedby, counter].filter(Boolean).join(' ') || undefined;\n });\n\n /**\n * Reference to the internal input element.\n */\n readonly inputMultiselect = viewChild<ElementRef>('inputMultiselect');\n\n /**\n * Event emitted when the input is clicked.\n */\n readonly mainInputClick = output<EclMultiselectMainInputClickEvent>();\n\n /**\n * Event emitted when a key is pressed on the input.\n */\n readonly mainInputKeydown = output<Event>();\n\n private readonly ICON_SIZE_FOR_EC_THEME_ON = 'xs';\n private readonly ICON_SIZE_FOR_EU_THEME_ON = 's';\n private eclThemeService = inject(EclThemeService);\n private renderer = inject(Renderer2);\n\n /**\n * Returns the label text shown inside the button.\n */\n buttonText = computed(() => {\n const items = this.selectedItems();\n return items.length === 0 ? this.inputPlaceholder() : items.join(',');\n });\n\n /**\n * Returns the count of selected items.\n */\n selectedItemsCount = computed(() => this.selectedItems().length);\n\n /**\n * Displays a count badge when items are selected.\n */\n isShowCounter = computed(() => this.selectedItems().length > 0);\n\n /**\n * Indicates that the dropdown is expanded (active).\n */\n isActive = computed(() => this.isDropdownExpanded());\n\n /**\n * Returns icon size depending on the theme.\n */\n get sizeIcon(): string {\n if (this.eclThemeService.isECTheme()) {\n return this.ICON_SIZE_FOR_EC_THEME_ON;\n } else {\n return this.ICON_SIZE_FOR_EU_THEME_ON;\n }\n }\n\n /**\n * Handles click on the input container. Emits custom event with original DOM event.\n */\n onClick(evt: Event): void {\n this.mainInputClick.emit(new EclMultiselectMainInputClickEvent(evt));\n }\n\n /**\n * Handles keydown events on the input.\n * Only emits event on ArrowDown, Enter, or Space keys.\n */\n onKeydown(evt: KeyboardEvent): void {\n switch (evt.key) {\n case KeyCode.ARROW_DOWN:\n case KeyCode.ENTER:\n case KeyCode.SPACE:\n {\n this.mainInputKeydown.emit(evt);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n /**\n * Focuses the multiselect input element.\n */\n onFocus(): void {\n this.renderer.selectRootElement(this.inputMultiselect().nativeElement, true).focus();\n }\n}\n",
68408
+ "sourceCode": "import { Component, ElementRef, Renderer2, booleanAttribute, computed, inject, input, signal, output, viewChild } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { KeyCode } from '@eui/ecl/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclThemeService } from '@eui/ecl/core';\nimport { EclMultiselectMainInputClickEvent } from '../events';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\n/**\n * Component representing the main input of a multiselect component.\n * Handles displaying selected items, opening the dropdown, and managing accessibility.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectInput]',\n templateUrl: './ecl-multiselect-input.component.html',\n imports: [TranslatePipe, ...EUI_ECL_BUTTON, ...EUI_ECL_ICON],\n host: {\n '[class]': 'cssClasses',\n '[class.ecl-select__container--disabled]': 'isDisabled()',\n '[class.ecl-select__container--invalid]': 'isInvalid()',\n },\n})\nexport class EclMultiselectInputComponent extends ECLBaseDirective {\n\n /**\n * Size modifier for the multiselect input (e.g., 's', 'm', 'l').\n */\n eclSize = input('m');\n\n /**\n * Label for the selections counter, read by screen readers.\n */\n counterLabel = input('ecl.multiselect.SELECTED');\n\n /**\n * ID of the toggle button element (used for accessibility).\n */\n toggleId = input<string>('');\n\n /**\n * Label for the toggle button (optional).\n */\n toggleLabel = input<string | undefined>(undefined);\n\n /**\n * Marks the component as disabled.\n */\n isDisabled = input(false, { transform: booleanAttribute });\n\n /**\n * Marks the component as being in an invalid state.\n */\n isInvalid = input(false, { transform: booleanAttribute });\n\n /**\n * Placeholder text for the input when no items are selected.\n */\n inputPlaceholder = input('');\n\n /**\n * Array of currently selected item labels.\n */\n selectedItemsLabels = input<string[]>([]);\n\n /**\n * Indicates that the dropdown is currently expanded.\n */\n isDropdownExpanded = input(false, { transform: booleanAttribute });\n\n /**\n * ARIA controls attribute for accessibility.\n */\n ariaControls = input<string | undefined>(undefined);\n\n /**\n * ARIA describedby attribute for accessibility.\n */\n ariaDescribedby = input<string | undefined>(undefined);\n\n /**\n * Event emitted when the input is clicked.\n */\n readonly mainInputClick = output<EclMultiselectMainInputClickEvent>();\n\n /**\n * Event emitted when a key is pressed on the input.\n */\n readonly mainInputKeydown = output<Event>();\n\n /**\n * Unique ID for the counter element.\n */\n protected counterId = signal(crypto.randomUUID());\n\n /**\n * Reference to the internal input element.\n */\n protected readonly inputMultiselect = viewChild<ElementRef>('inputMultiselect');\n\n /**\n * Computed ARIA describedby combining the input value with the counter ID.\n */\n protected ariaDescribedbyFull = computed(() => {\n const describedby = this.ariaDescribedby();\n const counter = this.counterId();\n return [describedby, counter].filter(Boolean).join(' ') || undefined;\n });\n\n /**\n * Returns the label text shown inside the button.\n */\n protected buttonText = computed(() => {\n const items = this.selectedItemsLabels();\n return items.length === 0 ? this.inputPlaceholder() : items.join(',');\n });\n\n /**\n * Returns the count of selected items.\n */\n protected selectedItemsCount = computed(() => this.selectedItemsLabels().length);\n\n /**\n * Displays a count badge when items are selected.\n */\n protected isShowCounter = computed(() => this.selectedItemsLabels().length > 0);\n\n /**\n * Indicates that the dropdown is expanded (active).\n */\n protected isActive = computed(() => this.isDropdownExpanded());\n\n /**\n * CSS classes for the component, including size and inherited classes.\n */\n protected get cssClasses(): string {\n return [\n super.getCssClasses('ecl-select__container'),\n `ecl-select__container--${this.eclSize()}`,\n ].join(' ').trim();\n }\n\n /**\n * Returns icon size depending on the theme.\n */\n protected get sizeIcon(): string {\n if (this.eclThemeService.isECTheme()) {\n return this.ICON_SIZE_FOR_EC_THEME_ON;\n } else {\n return this.ICON_SIZE_FOR_EU_THEME_ON;\n }\n }\n\n private readonly ICON_SIZE_FOR_EC_THEME_ON = 'xs';\n private readonly ICON_SIZE_FOR_EU_THEME_ON = 's';\n private eclThemeService = inject(EclThemeService);\n private renderer = inject(Renderer2);\n\n /**\n * Focuses the multiselect input element.\n */\n onFocus(): void {\n this.renderer.selectRootElement(this.inputMultiselect().nativeElement, true).focus();\n }\n\n /**\n * Handles click on the input container. Emits custom event with original DOM event.\n */\n protected onClick(evt: Event): void {\n this.mainInputClick.emit(new EclMultiselectMainInputClickEvent(evt));\n }\n\n /**\n * Handles keydown events on the input.\n * Only emits event on ArrowDown, Enter, or Space keys.\n */\n protected onKeydown(evt: KeyboardEvent): void {\n switch (evt.key) {\n case KeyCode.ARROW_DOWN:\n case KeyCode.ENTER:\n case KeyCode.SPACE:\n {\n this.mainInputKeydown.emit(evt);\n break;\n }\n default: {\n break;\n }\n }\n }\n}\n",
68805
68409
  "assetsDirs": [],
68806
68410
  "styleUrlsData": "",
68807
68411
  "stylesData": "",
68808
68412
  "jsdoctags": [
68809
68413
  {
68810
- "pos": 532,
68811
- "end": 696,
68414
+ "pos": 519,
68415
+ "end": 683,
68812
68416
  "kind": 321,
68813
68417
  "id": 0,
68814
68418
  "flags": 16777216,
@@ -68827,7 +68431,7 @@
68827
68431
  "name": "cssClasses",
68828
68432
  "type": "string",
68829
68433
  "returnType": "string",
68830
- "line": 65,
68434
+ "line": 137,
68831
68435
  "rawdescription": "\n\nCSS classes for the component, including size and inherited classes.\n",
68832
68436
  "description": "<p>CSS classes for the component, including size and inherited classes.</p>\n"
68833
68437
  }
@@ -68838,7 +68442,7 @@
68838
68442
  "name": "sizeIcon",
68839
68443
  "type": "string",
68840
68444
  "returnType": "string",
68841
- "line": 152,
68445
+ "line": 147,
68842
68446
  "rawdescription": "\n\nReturns icon size depending on the theme.\n",
68843
68447
  "description": "<p>Returns icon size depending on the theme.</p>\n"
68844
68448
  }
@@ -69069,10 +68673,11 @@
69069
68673
  },
69070
68674
  {
69071
68675
  "name": "EclMultiselectOptionComponent",
69072
- "id": "component-EclMultiselectOptionComponent-c1e3c02acade637b889ca2026c49b0f6ad3b482c6ab7ad7579c3e183584231ee63ba7042d72ec7beced8c527442ef79710118dadf1ff6e43cdbf5e76efb5dafa",
68676
+ "id": "component-EclMultiselectOptionComponent-0e284c928514db24c4eb917a0cc45bf38c927cbb78e93147b88d2b365b98b844f73bcd6ac6818a5de6b97938a2bd4f9bcdf72ab9af89ccda8b557ff0cce8ed2a",
69073
68677
  "file": "packages/ecl/components/ecl-multiselect/ecl-multiselect-option/ecl-multiselect-option.component.ts",
69074
68678
  "encapsulation": [],
69075
68679
  "entryComponents": [],
68680
+ "host": {},
69076
68681
  "inputs": [],
69077
68682
  "outputs": [],
69078
68683
  "providers": [],
@@ -69091,50 +68696,72 @@
69091
68696
  ],
69092
68697
  "inputsClass": [
69093
68698
  {
69094
- "coverageIgnore": false,
69095
- "required": false,
69096
68699
  "name": "disabled",
68700
+ "coverageIgnore": false,
69097
68701
  "defaultValue": "false",
69098
68702
  "deprecated": false,
69099
68703
  "deprecationMessage": "",
69100
- "rawdescription": "\n\nDisables the option when true.\n",
69101
- "description": "<p>Disables the option when true.</p>\n",
69102
- "line": 64,
69103
68704
  "type": "boolean",
69104
- "decorators": []
68705
+ "indexKey": "",
68706
+ "optional": false,
68707
+ "description": "<p>Disables the option when true.</p>\n",
68708
+ "line": 54,
68709
+ "rawdescription": "\n\nDisables the option when true.\n",
68710
+ "modifierKind": [
68711
+ 148
68712
+ ],
68713
+ "required": false
69105
68714
  },
69106
68715
  {
69107
- "coverageIgnore": false,
69108
68716
  "name": "isChecked",
68717
+ "coverageIgnore": false,
68718
+ "defaultValue": "false",
69109
68719
  "deprecated": false,
69110
68720
  "deprecationMessage": "",
69111
- "rawdescription": "\n\nIndicates whether the option is selected.\n",
69112
- "description": "<p>Indicates whether the option is selected.</p>\n",
69113
- "line": 87,
69114
68721
  "type": "boolean",
69115
- "decorators": []
68722
+ "indexKey": "",
68723
+ "optional": false,
68724
+ "description": "<p>Indicates whether the option is selected.</p>\n",
68725
+ "line": 59,
68726
+ "rawdescription": "\n\nIndicates whether the option is selected.\n",
68727
+ "modifierKind": [
68728
+ 148
68729
+ ],
68730
+ "required": false
69116
68731
  },
69117
68732
  {
69118
- "coverageIgnore": false,
69119
68733
  "name": "label",
68734
+ "coverageIgnore": false,
68735
+ "defaultValue": "''",
69120
68736
  "deprecated": false,
69121
68737
  "deprecationMessage": "",
69122
- "rawdescription": "\n\nDisplay label for the option.\n",
69123
- "description": "<p>Display label for the option.</p>\n",
69124
- "line": 54,
69125
68738
  "type": "string",
69126
- "decorators": []
68739
+ "indexKey": "",
68740
+ "optional": false,
68741
+ "description": "<p>Display label for the option.</p>\n",
68742
+ "line": 49,
68743
+ "rawdescription": "\n\nDisplay label for the option.\n",
68744
+ "modifierKind": [
68745
+ 148
68746
+ ],
68747
+ "required": false
69127
68748
  },
69128
68749
  {
69129
- "coverageIgnore": false,
69130
68750
  "name": "value",
68751
+ "coverageIgnore": false,
68752
+ "defaultValue": "''",
69131
68753
  "deprecated": false,
69132
68754
  "deprecationMessage": "",
69133
- "rawdescription": "\n",
69134
- "description": "",
69135
- "line": 43,
69136
68755
  "type": "string",
69137
- "decorators": []
68756
+ "indexKey": "",
68757
+ "optional": false,
68758
+ "description": "<p>Value assigned to the option.</p>\n",
68759
+ "line": 44,
68760
+ "rawdescription": "\n\nValue assigned to the option.\n",
68761
+ "modifierKind": [
68762
+ 148
68763
+ ],
68764
+ "required": false
69138
68765
  },
69139
68766
  {
69140
68767
  "coverageIgnore": false,
@@ -69181,6 +68808,23 @@
69181
68808
  }
69182
68809
  ],
69183
68810
  "outputsClass": [
68811
+ {
68812
+ "name": "isChecked",
68813
+ "coverageIgnore": false,
68814
+ "defaultValue": "false",
68815
+ "deprecated": false,
68816
+ "deprecationMessage": "",
68817
+ "type": "boolean",
68818
+ "indexKey": "",
68819
+ "optional": false,
68820
+ "description": "<p>Indicates whether the option is selected.</p>\n",
68821
+ "line": 59,
68822
+ "rawdescription": "\n\nIndicates whether the option is selected.\n",
68823
+ "modifierKind": [
68824
+ 148
68825
+ ],
68826
+ "required": false
68827
+ },
69184
68828
  {
69185
68829
  "name": "optionClick",
69186
68830
  "coverageIgnore": false,
@@ -69190,7 +68834,7 @@
69190
68834
  "indexKey": "",
69191
68835
  "optional": false,
69192
68836
  "description": "<p>Emits when the option is clicked.</p>\n",
69193
- "line": 69,
68837
+ "line": 64,
69194
68838
  "rawdescription": "\n\nEmits when the option is clicked.\n",
69195
68839
  "modifierKind": [
69196
68840
  148
@@ -69206,7 +68850,7 @@
69206
68850
  "indexKey": "",
69207
68851
  "optional": false,
69208
68852
  "description": "<p>Emits when a key is pressed while focused on the option.</p>\n",
69209
- "line": 74,
68853
+ "line": 69,
69210
68854
  "rawdescription": "\n\nEmits when a key is pressed while focused on the option.\n",
69211
68855
  "modifierKind": [
69212
68856
  148
@@ -69215,40 +68859,21 @@
69215
68859
  }
69216
68860
  ],
69217
68861
  "propertiesClass": [
69218
- {
69219
- "name": "changes",
69220
- "coverageIgnore": false,
69221
- "defaultValue": "new Subject()",
69222
- "deprecated": false,
69223
- "deprecationMessage": "",
69224
- "type": "unknown",
69225
- "indexKey": "",
69226
- "optional": false,
69227
- "description": "",
69228
- "line": 56,
69229
- "rawdescription": "\n"
69230
- },
69231
68862
  {
69232
68863
  "name": "display",
69233
68864
  "coverageIgnore": false,
69234
- "defaultValue": "'flex'",
68865
+ "defaultValue": "signal('flex')",
69235
68866
  "deprecated": false,
69236
68867
  "deprecationMessage": "",
69237
- "type": "string",
68868
+ "type": "unknown",
69238
68869
  "indexKey": "",
69239
68870
  "optional": false,
69240
- "description": "",
69241
- "line": 76,
69242
- "rawdescription": "\n",
69243
- "decorators": [
69244
- {
69245
- "name": "HostBinding",
69246
- "stringifiedArguments": "'style.display'"
69247
- }
69248
- ],
68871
+ "description": "<p>Controls the host element visibility (<code>display</code> style).</p>\n",
68872
+ "line": 84,
68873
+ "rawdescription": "\n\nControls the host element visibility (`display` style).\n",
69249
68874
  "modifierKind": [
69250
- 171,
69251
- 124
68875
+ 124,
68876
+ 148
69252
68877
  ]
69253
68878
  },
69254
68879
  {
@@ -69260,10 +68885,11 @@
69260
68885
  "type": "unknown",
69261
68886
  "indexKey": "",
69262
68887
  "optional": false,
69263
- "description": "",
69264
- "line": 38,
69265
- "rawdescription": "\n",
68888
+ "description": "<p>Reference to the checkbox input element.</p>\n",
68889
+ "line": 74,
68890
+ "rawdescription": "\n\nReference to the checkbox input element.\n",
69266
68891
  "modifierKind": [
68892
+ 124,
69267
68893
  148
69268
68894
  ]
69269
68895
  },
@@ -69276,9 +68902,12 @@
69276
68902
  "type": "string",
69277
68903
  "indexKey": "",
69278
68904
  "optional": false,
69279
- "description": "",
69280
- "line": 40,
69281
- "rawdescription": "\n"
68905
+ "description": "<p>Keyword used by the boldText pipe to highlight matching text.</p>\n",
68906
+ "line": 79,
68907
+ "rawdescription": "\n\nKeyword used by the boldText pipe to highlight matching text.\n",
68908
+ "modifierKind": [
68909
+ 124
68910
+ ]
69282
68911
  }
69283
68912
  ],
69284
68913
  "methodsClass": [
@@ -69289,7 +68918,7 @@
69289
68918
  "optional": false,
69290
68919
  "returnType": "void",
69291
68920
  "typeParameters": [],
69292
- "line": 158,
68921
+ "line": 124,
69293
68922
  "deprecated": false,
69294
68923
  "deprecationMessage": "",
69295
68924
  "rawdescription": "\n\nHides the option from view.\n",
@@ -69311,11 +68940,11 @@
69311
68940
  "optional": false,
69312
68941
  "returnType": "void",
69313
68942
  "typeParameters": [],
69314
- "line": 165,
68943
+ "line": 131,
69315
68944
  "deprecated": false,
69316
68945
  "deprecationMessage": "",
69317
- "rawdescription": "\n\nSets the keyword for search highlighting.\n",
69318
- "description": "<p>Sets the keyword for search highlighting.</p>\n",
68946
+ "rawdescription": "\n\nSets the keyword used by the boldText pipe to highlight matching text.\n",
68947
+ "description": "<p>Sets the keyword used by the boldText pipe to highlight matching text.</p>\n",
69319
68948
  "jsdoctags": [
69320
68949
  {
69321
68950
  "name": "keyword",
@@ -69330,32 +68959,6 @@
69330
68959
  }
69331
68960
  ]
69332
68961
  },
69333
- {
69334
- "name": "ngOnChanges",
69335
- "coverageIgnore": false,
69336
- "args": [],
69337
- "optional": false,
69338
- "returnType": "void",
69339
- "typeParameters": [],
69340
- "line": 114,
69341
- "deprecated": false,
69342
- "deprecationMessage": "",
69343
- "rawdescription": "\n",
69344
- "description": ""
69345
- },
69346
- {
69347
- "name": "ngOnDestroy",
69348
- "coverageIgnore": false,
69349
- "args": [],
69350
- "optional": false,
69351
- "returnType": "void",
69352
- "typeParameters": [],
69353
- "line": 122,
69354
- "deprecated": false,
69355
- "deprecationMessage": "",
69356
- "rawdescription": "\n",
69357
- "description": ""
69358
- },
69359
68962
  {
69360
68963
  "name": "ngOnInit",
69361
68964
  "coverageIgnore": false,
@@ -69363,7 +68966,7 @@
69363
68966
  "optional": false,
69364
68967
  "returnType": "void",
69365
68968
  "typeParameters": [],
69366
- "line": 118,
68969
+ "line": 103,
69367
68970
  "deprecated": false,
69368
68971
  "deprecationMessage": "",
69369
68972
  "rawdescription": "\n",
@@ -69376,7 +68979,7 @@
69376
68979
  "optional": false,
69377
68980
  "returnType": "void",
69378
68981
  "typeParameters": [],
69379
- "line": 144,
68982
+ "line": 110,
69380
68983
  "deprecated": false,
69381
68984
  "deprecationMessage": "",
69382
68985
  "rawdescription": "\n\nFocuses the checkbox input.\n",
@@ -69389,11 +68992,14 @@
69389
68992
  "optional": false,
69390
68993
  "returnType": "void",
69391
68994
  "typeParameters": [],
69392
- "line": 129,
68995
+ "line": 145,
69393
68996
  "deprecated": false,
69394
68997
  "deprecationMessage": "",
69395
68998
  "rawdescription": "\n\nToggles the selected state and emits the optionClick event.\n",
69396
- "description": "<p>Toggles the selected state and emits the optionClick event.</p>\n"
68999
+ "description": "<p>Toggles the selected state and emits the optionClick event.</p>\n",
69000
+ "modifierKind": [
69001
+ 124
69002
+ ]
69397
69003
  },
69398
69004
  {
69399
69005
  "name": "onOptionKeydown",
@@ -69411,11 +69017,14 @@
69411
69017
  "optional": false,
69412
69018
  "returnType": "void",
69413
69019
  "typeParameters": [],
69414
- "line": 137,
69020
+ "line": 153,
69415
69021
  "deprecated": false,
69416
69022
  "deprecationMessage": "",
69417
69023
  "rawdescription": "\n\nEmits the optionKeydown event when a key is pressed.\n",
69418
69024
  "description": "<p>Emits the optionKeydown event when a key is pressed.</p>\n",
69025
+ "modifierKind": [
69026
+ 124
69027
+ ],
69419
69028
  "jsdoctags": [
69420
69029
  {
69421
69030
  "name": "evt",
@@ -69437,7 +69046,7 @@
69437
69046
  "optional": false,
69438
69047
  "returnType": "void",
69439
69048
  "typeParameters": [],
69440
- "line": 151,
69049
+ "line": 117,
69441
69050
  "deprecated": false,
69442
69051
  "deprecationMessage": "",
69443
69052
  "rawdescription": "\n\nMakes the option visible.\n",
@@ -69485,33 +69094,7 @@
69485
69094
  "coverageIgnore": false,
69486
69095
  "deprecated": false,
69487
69096
  "deprecationMessage": "",
69488
- "hostBindings": [
69489
- {
69490
- "coverageIgnore": false,
69491
- "name": "class",
69492
- "actualName": "cssClasses",
69493
- "deprecated": false,
69494
- "deprecationMessage": "",
69495
- "rawdescription": "\n",
69496
- "description": "",
69497
- "line": 79,
69498
- "type": "string",
69499
- "decorators": []
69500
- },
69501
- {
69502
- "coverageIgnore": false,
69503
- "name": "style.display",
69504
- "actualName": "display",
69505
- "defaultValue": "'flex'",
69506
- "deprecated": false,
69507
- "deprecationMessage": "",
69508
- "rawdescription": "\n",
69509
- "description": "",
69510
- "line": 76,
69511
- "type": "string",
69512
- "decorators": []
69513
- }
69514
- ],
69097
+ "hostBindings": [],
69515
69098
  "hostListeners": [],
69516
69099
  "standalone": false,
69517
69100
  "imports": [
@@ -69526,14 +69109,14 @@
69526
69109
  "description": "<p>Component representing a single selectable option in the multiselect dropdown.</p>\n",
69527
69110
  "rawdescription": "\n\nComponent representing a single selectable option in the multiselect dropdown.\n",
69528
69111
  "type": "component",
69529
- "sourceCode": "import {\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n booleanAttribute,\n inject,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { EclCheckboxDirective, EUI_ECL_CHECKBOX } from '@eui/ecl/components/ecl-checkbox';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { Subject } from 'rxjs';\nimport { BoldTextPipe } from '../boldText.pipe';\nimport {\n EclMultiselectOptionClickEvent,\n EclMultiselectOptionKeydownEvent,\n} from '../events/ecl-multiselect-option.event';\nimport { EclMultiselectOption } from '../models/ecl-multiselect-option.model';\n\n/**\n * Component representing a single selectable option in the multiselect dropdown.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectOption]',\n templateUrl: './ecl-multiselect-option.component.html',\n imports: [BoldTextPipe, ...EUI_ECL_CHECKBOX],\n hostDirectives: [EclCheckboxDirective],\n})\nexport class EclMultiselectOptionComponent extends ECLBaseDirective implements EclMultiselectOption, OnChanges, OnDestroy, OnInit {\n\n readonly eclCheckboxInput = viewChild<ElementRef>('checkboxInput');\n\n keyword = '';\n\n @Input()\n set value(value: string) {\n this._value = value;\n }\n\n get value(): string {\n return this._value;\n }\n\n /**\n * Display label for the option.\n */\n @Input() label: string;\n\n changes = new Subject();\n\n /**\n * Disables the option when true.\n */\n @Input({ transform: booleanAttribute })\n @HostBinding('class.ecl-checkbox--disabled')\n @HostBinding('attr.disabled')\n disabled = false;\n\n /**\n * Emits when the option is clicked.\n */\n readonly optionClick = output<EclMultiselectOptionClickEvent>();\n\n /**\n * Emits when a key is pressed while focused on the option.\n */\n readonly optionKeydown = output<EclMultiselectOptionKeydownEvent>();\n\n @HostBinding('style.display') protected display = 'flex';\n\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-checkbox')].join(' ').trim();\n }\n\n /**\n * Indicates whether the option is selected.\n */\n @Input()\n get isChecked(): boolean {\n return this._checked();\n }\n\n set isChecked(value: boolean) {\n this._checked.set(value);\n }\n\n private _id = '';\n private _checked = signal(false);\n private _value = '';\n private renderer = inject(Renderer2);\n\n /**\n * Returns the unique identifier for the option.\n */\n get id(): string {\n return this._id;\n }\n\n /**\n * Indicates whether the option is active (visible and not disabled).\n */\n get isActive(): boolean {\n return this.display === 'flex' && !this.disabled;\n }\n\n ngOnChanges(): void {\n this.changes.next(this.label);\n }\n\n ngOnInit(): void {\n this._id = this.createId();\n }\n\n ngOnDestroy(): void {\n this.changes.complete();\n }\n\n /**\n * Toggles the selected state and emits the optionClick event.\n */\n onOptionClick(): void {\n this.isChecked = !this.isChecked;\n this.optionClick.emit(new EclMultiselectOptionClickEvent(this));\n }\n\n /**\n * Emits the optionKeydown event when a key is pressed.\n */\n onOptionKeydown(evt: KeyboardEvent): void {\n this.optionKeydown.emit(new EclMultiselectOptionKeydownEvent(this, evt));\n }\n\n /**\n * Focuses the checkbox input.\n */\n onFocus(): void {\n this.renderer.selectRootElement(this.eclCheckboxInput().nativeElement, true).focus();\n }\n\n /**\n * Makes the option visible.\n */\n show(): void {\n this.display = 'flex';\n }\n\n /**\n * Hides the option from view.\n */\n hide(): void {\n this.display = 'none';\n }\n\n /**\n * Sets the keyword for search highlighting.\n */\n highlightSearchText(keyword: string): void {\n this.keyword = keyword;\n const re = new RegExp(keyword, 'gi');\n const res = this.label.replace(re, '<b>$&</b>');\n }\n\n private createId(): string {\n return crypto.randomUUID();\n }\n}\n",
69112
+ "sourceCode": "import {\n Component,\n ElementRef,\n OnInit,\n Renderer2,\n booleanAttribute,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { EclCheckboxDirective, EUI_ECL_CHECKBOX } from '@eui/ecl/components/ecl-checkbox';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { BoldTextPipe } from '../boldText.pipe';\nimport {\n EclMultiselectOptionClickEvent,\n EclMultiselectOptionKeydownEvent,\n} from '../events/ecl-multiselect-option.event';\nimport { EclMultiselectOption } from '../models/ecl-multiselect-option.model';\n\n/**\n * Component representing a single selectable option in the multiselect dropdown.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div[eclMultiselectOption]',\n templateUrl: './ecl-multiselect-option.component.html',\n imports: [BoldTextPipe, ...EUI_ECL_CHECKBOX],\n hostDirectives: [EclCheckboxDirective],\n host: {\n '[class]': 'cssClasses',\n '[class.ecl-checkbox--disabled]': 'disabled()',\n '[attr.disabled]': 'disabled() || null',\n '[style.display]': 'display()',\n },\n})\nexport class EclMultiselectOptionComponent extends ECLBaseDirective implements EclMultiselectOption, OnInit {\n\n /**\n * Value assigned to the option.\n */\n readonly value = input<string>('');\n\n /**\n * Display label for the option.\n */\n readonly label = input<string>('');\n\n /**\n * Disables the option when true.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Indicates whether the option is selected.\n */\n readonly isChecked = model(false);\n\n /**\n * Emits when the option is clicked.\n */\n readonly optionClick = output<EclMultiselectOptionClickEvent>();\n\n /**\n * Emits when a key is pressed while focused on the option.\n */\n readonly optionKeydown = output<EclMultiselectOptionKeydownEvent>();\n\n /**\n * Reference to the checkbox input element.\n */\n protected readonly eclCheckboxInput = viewChild<ElementRef>('checkboxInput');\n\n /**\n * Keyword used by the boldText pipe to highlight matching text.\n */\n protected keyword = '';\n\n /**\n * Controls the host element visibility (`display` style).\n */\n protected readonly display = signal('flex');\n\n private readonly renderer = inject(Renderer2);\n private _id = '';\n\n /**\n * Returns the unique identifier for the option.\n */\n get id(): string {\n return this._id;\n }\n\n /**\n * Indicates whether the option is active (visible and not disabled).\n */\n get isActive(): boolean {\n return this.display() === 'flex' && !this.disabled();\n }\n\n ngOnInit(): void {\n this._id = this.createId();\n }\n\n /**\n * Focuses the checkbox input.\n */\n onFocus(): void {\n this.renderer.selectRootElement(this.eclCheckboxInput().nativeElement, true).focus();\n }\n\n /**\n * Makes the option visible.\n */\n show(): void {\n this.display.set('flex');\n }\n\n /**\n * Hides the option from view.\n */\n hide(): void {\n this.display.set('none');\n }\n\n /**\n * Sets the keyword used by the boldText pipe to highlight matching text.\n */\n highlightSearchText(keyword: string): void {\n this.keyword = keyword;\n }\n\n /**\n * Applies ECL checkbox styling class to the option.\n */\n protected get cssClasses(): string {\n return [super.getCssClasses('ecl-checkbox')].join(' ').trim();\n }\n\n /**\n * Toggles the selected state and emits the optionClick event.\n */\n protected onOptionClick(): void {\n this.isChecked.set(!this.isChecked());\n this.optionClick.emit(new EclMultiselectOptionClickEvent(this));\n }\n\n /**\n * Emits the optionKeydown event when a key is pressed.\n */\n protected onOptionKeydown(evt: KeyboardEvent): void {\n this.optionKeydown.emit(new EclMultiselectOptionKeydownEvent(this, evt));\n }\n\n private createId(): string {\n return crypto.randomUUID();\n }\n}\n",
69530
69113
  "assetsDirs": [],
69531
69114
  "styleUrlsData": "",
69532
69115
  "stylesData": "",
69533
69116
  "jsdoctags": [
69534
69117
  {
69535
- "pos": 656,
69536
- "end": 745,
69118
+ "pos": 588,
69119
+ "end": 677,
69537
69120
  "kind": 321,
69538
69121
  "id": 0,
69539
69122
  "flags": 16777216,
@@ -69547,117 +69130,16 @@
69547
69130
  ],
69548
69131
  "implements": [
69549
69132
  "EclMultiselectOption",
69550
- "OnChanges",
69551
- "OnDestroy",
69552
69133
  "OnInit"
69553
69134
  ],
69554
69135
  "accessors": {
69555
- "value": {
69556
- "name": "value",
69557
- "setSignature": {
69558
- "name": "value",
69559
- "type": "void",
69560
- "deprecated": false,
69561
- "deprecationMessage": "",
69562
- "args": [
69563
- {
69564
- "name": "value",
69565
- "type": "string",
69566
- "optional": false,
69567
- "dotDotDotToken": false,
69568
- "deprecated": false,
69569
- "deprecationMessage": ""
69570
- }
69571
- ],
69572
- "returnType": "void",
69573
- "line": 43,
69574
- "rawdescription": "\n",
69575
- "description": "",
69576
- "jsdoctags": [
69577
- {
69578
- "name": "value",
69579
- "type": "string",
69580
- "optional": false,
69581
- "dotDotDotToken": false,
69582
- "deprecated": false,
69583
- "deprecationMessage": "",
69584
- "tagName": {
69585
- "text": "param"
69586
- }
69587
- }
69588
- ]
69589
- },
69590
- "getSignature": {
69591
- "name": "value",
69592
- "type": "string",
69593
- "returnType": "string",
69594
- "line": 47,
69595
- "rawdescription": "\n",
69596
- "description": ""
69597
- }
69598
- },
69599
- "cssClasses": {
69600
- "name": "cssClasses",
69601
- "getSignature": {
69602
- "name": "cssClasses",
69603
- "type": "string",
69604
- "returnType": "string",
69605
- "line": 79,
69606
- "rawdescription": "\n",
69607
- "description": ""
69608
- }
69609
- },
69610
- "isChecked": {
69611
- "name": "isChecked",
69612
- "setSignature": {
69613
- "name": "isChecked",
69614
- "type": "void",
69615
- "deprecated": false,
69616
- "deprecationMessage": "",
69617
- "args": [
69618
- {
69619
- "name": "value",
69620
- "type": "boolean",
69621
- "optional": false,
69622
- "dotDotDotToken": false,
69623
- "deprecated": false,
69624
- "deprecationMessage": ""
69625
- }
69626
- ],
69627
- "returnType": "void",
69628
- "line": 91,
69629
- "rawdescription": "\n",
69630
- "description": "",
69631
- "jsdoctags": [
69632
- {
69633
- "name": "value",
69634
- "type": "boolean",
69635
- "optional": false,
69636
- "dotDotDotToken": false,
69637
- "deprecated": false,
69638
- "deprecationMessage": "",
69639
- "tagName": {
69640
- "text": "param"
69641
- }
69642
- }
69643
- ]
69644
- },
69645
- "getSignature": {
69646
- "name": "isChecked",
69647
- "type": "boolean",
69648
- "returnType": "boolean",
69649
- "line": 87,
69650
- "rawdescription": "\n\nIndicates whether the option is selected.\n",
69651
- "description": "<p>Indicates whether the option is selected.</p>\n"
69652
- }
69653
- },
69654
69136
  "id": {
69655
69137
  "name": "id",
69656
69138
  "getSignature": {
69657
69139
  "name": "id",
69658
69140
  "type": "string",
69659
69141
  "returnType": "string",
69660
- "line": 103,
69142
+ "line": 92,
69661
69143
  "rawdescription": "\n\nReturns the unique identifier for the option.\n",
69662
69144
  "description": "<p>Returns the unique identifier for the option.</p>\n"
69663
69145
  }
@@ -69668,10 +69150,21 @@
69668
69150
  "name": "isActive",
69669
69151
  "type": "boolean",
69670
69152
  "returnType": "boolean",
69671
- "line": 110,
69153
+ "line": 99,
69672
69154
  "rawdescription": "\n\nIndicates whether the option is active (visible and not disabled).\n",
69673
69155
  "description": "<p>Indicates whether the option is active (visible and not disabled).</p>\n"
69674
69156
  }
69157
+ },
69158
+ "cssClasses": {
69159
+ "name": "cssClasses",
69160
+ "getSignature": {
69161
+ "name": "cssClasses",
69162
+ "type": "string",
69163
+ "returnType": "string",
69164
+ "line": 138,
69165
+ "rawdescription": "\n\nApplies ECL checkbox styling class to the option.\n",
69166
+ "description": "<p>Applies ECL checkbox styling class to the option.</p>\n"
69167
+ }
69675
69168
  }
69676
69169
  },
69677
69170
  "relationships": {
@@ -69704,21 +69197,13 @@
69704
69197
  "name": "EclMultiselectOption",
69705
69198
  "type": "interface"
69706
69199
  },
69707
- {
69708
- "name": "OnChanges",
69709
- "type": "interface"
69710
- },
69711
- {
69712
- "name": "OnDestroy",
69713
- "type": "interface"
69714
- },
69715
69200
  {
69716
69201
  "name": "OnInit",
69717
69202
  "type": "interface"
69718
69203
  }
69719
69204
  ]
69720
69205
  },
69721
- "templateData": "<input\n eclCheckboxInput\n type=\"checkbox\"\n [id]=\"id\"\n [value]=\"value\"\n (click)=\"onOptionClick()\"\n (keydown)=\"onOptionKeydown($event)\"\n [checked]=\"isChecked\"\n [disabled]=\"disabled\"\n #checkboxInput />\n<label [for]=\"id\" eclCheckboxLabel><span [innerHTML]=\"label | boldText: keyword\"></span></label>\n"
69206
+ "templateData": "<input\n eclCheckboxInput\n type=\"checkbox\"\n [id]=\"id\"\n [value]=\"value()\"\n (click)=\"onOptionClick()\"\n (keydown)=\"onOptionKeydown($event)\"\n [checked]=\"isChecked()\"\n [disabled]=\"disabled()\"\n #checkboxInput />\n<label [for]=\"id\" eclCheckboxLabel><span [innerHTML]=\"label() | boldText: keyword\"></span></label>\n"
69722
69207
  },
69723
69208
  {
69724
69209
  "name": "EclNavigationListComponent",
@@ -76727,7 +76212,7 @@
76727
76212
  },
76728
76213
  {
76729
76214
  "name": "EclRatingFieldComponent",
76730
- "id": "component-EclRatingFieldComponent-5bff7b4c2f0571cc17754975648827be37a8b736aca9417c62e5e0417b5679d0da81dce5d14a5ea21652b54d6214ca05c543ac879ebe773767c1ee6a3c01c124",
76215
+ "id": "component-EclRatingFieldComponent-25f427527d34e1b59c5cd7ab632bae64ae4cbfd1f3b26c427b3f7e9694008a36ed3cde1e1b54e93e02baa459d6f8def487eb3c24a82f8670b621829fcf4eaafb",
76731
76216
  "file": "packages/ecl/components/ecl-rating-field/ecl-rating-field.component.ts",
76732
76217
  "encapsulation": [],
76733
76218
  "entryComponents": [],
@@ -76759,7 +76244,7 @@
76759
76244
  "indexKey": "",
76760
76245
  "optional": false,
76761
76246
  "description": "<p>Can be used to set disabled status.</p>\n",
76762
- "line": 56,
76247
+ "line": 57,
76763
76248
  "rawdescription": "\n\nCan be used to set disabled status.\n",
76764
76249
  "modifierKind": [
76765
76250
  148
@@ -76776,7 +76261,7 @@
76776
76261
  "indexKey": "",
76777
76262
  "optional": false,
76778
76263
  "description": "<p>Name of the radio group. Also used for creating id for each radio button.</p>\n",
76779
- "line": 34,
76264
+ "line": 35,
76780
76265
  "rawdescription": "\n\nName of the radio group. Also used for creating id for each radio button.\n",
76781
76266
  "modifierKind": [
76782
76267
  148
@@ -76793,7 +76278,7 @@
76793
76278
  "indexKey": "",
76794
76279
  "optional": false,
76795
76280
  "description": "<p>How many stars should the rating have.</p>\n",
76796
- "line": 38,
76281
+ "line": 39,
76797
76282
  "rawdescription": "\n\nHow many stars should the rating have.\n",
76798
76283
  "modifierKind": [
76799
76284
  148
@@ -76810,7 +76295,7 @@
76810
76295
  "indexKey": "",
76811
76296
  "optional": false,
76812
76297
  "description": "<p>The initial value, if any.</p>\n",
76813
- "line": 42,
76298
+ "line": 43,
76814
76299
  "rawdescription": "\n\nThe initial value, if any.\n",
76815
76300
  "modifierKind": [
76816
76301
  148
@@ -76872,7 +76357,7 @@
76872
76357
  "indexKey": "",
76873
76358
  "optional": false,
76874
76359
  "description": "<p>Can be used to set disabled status.</p>\n",
76875
- "line": 56,
76360
+ "line": 57,
76876
76361
  "rawdescription": "\n\nCan be used to set disabled status.\n",
76877
76362
  "modifierKind": [
76878
76363
  148
@@ -76888,7 +76373,7 @@
76888
76373
  "indexKey": "",
76889
76374
  "optional": false,
76890
76375
  "description": "<p>The event to be emitted when rating is changed.</p>\n",
76891
- "line": 62,
76376
+ "line": 63,
76892
76377
  "rawdescription": "\n\nThe event to be emitted when rating is changed.\n",
76893
76378
  "modifierKind": [
76894
76379
  148
@@ -76907,7 +76392,7 @@
76907
76392
  "indexKey": "",
76908
76393
  "optional": false,
76909
76394
  "description": "<p>Internal mutable rating value, falls back to the input</p>\n",
76910
- "line": 45,
76395
+ "line": 46,
76911
76396
  "rawdescription": "\nInternal mutable rating value, falls back to the input",
76912
76397
  "modifierKind": [
76913
76398
  148
@@ -76939,8 +76424,8 @@
76939
76424
  "jsdoctags": [
76940
76425
  {
76941
76426
  "name": {
76942
- "pos": 2948,
76943
- "end": 2954,
76427
+ "pos": 2942,
76428
+ "end": 2948,
76944
76429
  "kind": 80,
76945
76430
  "id": 0,
76946
76431
  "flags": 16842752,
@@ -76953,8 +76438,8 @@
76953
76438
  "deprecated": false,
76954
76439
  "deprecationMessage": "",
76955
76440
  "tagName": {
76956
- "pos": 2942,
76957
- "end": 2947,
76441
+ "pos": 2936,
76442
+ "end": 2941,
76958
76443
  "kind": 80,
76959
76444
  "id": 0,
76960
76445
  "flags": 16842752,
@@ -77059,8 +76544,8 @@
77059
76544
  "jsdoctags": [
77060
76545
  {
77061
76546
  "name": {
77062
- "pos": 3534,
77063
- "end": 3544,
76547
+ "pos": 3528,
76548
+ "end": 3538,
77064
76549
  "kind": 80,
77065
76550
  "id": 0,
77066
76551
  "flags": 16842752,
@@ -77073,8 +76558,8 @@
77073
76558
  "deprecated": false,
77074
76559
  "deprecationMessage": "",
77075
76560
  "tagName": {
77076
- "pos": 3528,
77077
- "end": 3533,
76561
+ "pos": 3522,
76562
+ "end": 3527,
77078
76563
  "kind": 80,
77079
76564
  "id": 0,
77080
76565
  "flags": 16842752,
@@ -77109,8 +76594,8 @@
77109
76594
  "jsdoctags": [
77110
76595
  {
77111
76596
  "name": {
77112
- "pos": 3381,
77113
- "end": 3386,
76597
+ "pos": 3375,
76598
+ "end": 3380,
77114
76599
  "kind": 80,
77115
76600
  "id": 0,
77116
76601
  "flags": 16842752,
@@ -77123,8 +76608,8 @@
77123
76608
  "deprecated": false,
77124
76609
  "deprecationMessage": "",
77125
76610
  "tagName": {
77126
- "pos": 3375,
77127
- "end": 3380,
76611
+ "pos": 3369,
76612
+ "end": 3374,
77128
76613
  "kind": 80,
77129
76614
  "id": 0,
77130
76615
  "flags": 16842752,
@@ -77177,20 +76662,7 @@
77177
76662
  "coverageIgnore": false,
77178
76663
  "deprecated": false,
77179
76664
  "deprecationMessage": "",
77180
- "hostBindings": [
77181
- {
77182
- "coverageIgnore": false,
77183
- "name": "class",
77184
- "actualName": "cssClasses",
77185
- "deprecated": false,
77186
- "deprecationMessage": "",
77187
- "rawdescription": "\n\nApplies the base class `ecl-rating-field` to the host element. Applies 'ecl-rating-field--disabled' class on condition.\n",
77188
- "description": "<p>Applies the base class <code>ecl-rating-field</code> to the host element. Applies &#39;ecl-rating-field--disabled&#39; class on condition.</p>\n",
77189
- "line": 81,
77190
- "type": "string",
77191
- "decorators": []
77192
- }
77193
- ],
76665
+ "hostBindings": [],
77194
76666
  "hostListeners": [],
77195
76667
  "standalone": false,
77196
76668
  "imports": [
@@ -77201,14 +76673,14 @@
77201
76673
  "description": "<p>Component representing rating field, displayed with stars.\nTypically used when the user needs to evaluate something.</p>\n",
77202
76674
  "rawdescription": "\n\nComponent representing rating field, displayed with stars.\nTypically used when the user needs to evaluate something.\n",
77203
76675
  "type": "component",
77204
- "sourceCode": "import { Component, effect, forwardRef, HostBinding, numberAttribute, Provider, output, input, model, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclRatingChangeEvent } from './events/ecl-rating-change.event';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\nexport const ECL_RATINGFIELD_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclRatingFieldComponent),\n multi: true,\n};\n\nconst noop = (): void => {\n /** empty */\n};\n\n/**\n * Component representing rating field, displayed with stars.\n * Typically used when the user needs to evaluate something.\n */\n@Component({\n selector: 'ecl-rating-field',\n templateUrl: './ecl-rating-field.component.html',\n imports: [...EUI_ECL_ICON],\n providers: [ECL_RATINGFIELD_VALUE_ACCESSOR],\n host: {\n '[attr.disabled]': 'disabled()',\n },\n})\nexport class EclRatingFieldComponent extends ECLBaseDirective implements ControlValueAccessor {\n /**\n * Name of the radio group. Also used for creating id for each radio button.\n */\n readonly name = input('rating');\n /**\n * How many stars should the rating have.\n */\n readonly numberOfStars = input(5, { transform: numberAttribute });\n /**\n * The initial value, if any.\n */\n readonly rating = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /** Internal mutable rating value, falls back to the input */\n readonly currentRating = signal<number>(undefined);\n\n private readonly _syncRating = effect(() => {\n const inputRating = this.rating();\n if (inputRating !== undefined) {\n this.currentRating.set(inputRating);\n }\n });\n /**\n * Can be used to set disabled status.\n */\n readonly disabled = model<boolean>(undefined);\n\n /**\n * The event to be emitted when rating is changed.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly ratingChange = output<any>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (_: any) => void = noop;\n private onTouched: () => void = noop;\n\n /**\n * Array of numbers, from 1 to 'numberOfStars'\n */\n get numbers(): number[] {\n return Array(this.numberOfStars())\n .fill(0)\n .map((_, i) => this.numberOfStars() - i);\n }\n\n /**\n * Applies the base class `ecl-rating-field` to the host element. Applies 'ecl-rating-field--disabled' class on condition.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-rating-field'), this.disabled() ? 'ecl-rating-field--disabled' : ''].join(' ').trim();\n }\n\n /**\n * Method that sets the new rating and emit 'ratingChange' event, that includes the new rating number.\n * @param rating - the new rating\n */\n onRadioClick(rating: number): void {\n this.currentRating.set(rating);\n this.onTouched();\n this.onChange(this.currentRating());\n\n const evt = new EclRatingChangeEvent(rating);\n this.ratingChange.emit(evt);\n }\n\n /**\n * Informs the component of any changes in the parent (ControlValueAccessor). Sets the new value for the 'rating' property.\n * @param value\n */\n writeValue(value: number): void {\n this.currentRating.set(value);\n }\n\n /**\n * Disable/enable component.\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled || null);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}\n",
76676
+ "sourceCode": "import { Component, effect, forwardRef, numberAttribute, Provider, output, input, model, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclRatingChangeEvent } from './events/ecl-rating-change.event';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\nexport const ECL_RATINGFIELD_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclRatingFieldComponent),\n multi: true,\n};\n\nconst noop = (): void => {\n /** empty */\n};\n\n/**\n * Component representing rating field, displayed with stars.\n * Typically used when the user needs to evaluate something.\n */\n@Component({\n selector: 'ecl-rating-field',\n templateUrl: './ecl-rating-field.component.html',\n imports: [...EUI_ECL_ICON],\n providers: [ECL_RATINGFIELD_VALUE_ACCESSOR],\n host: {\n '[attr.disabled]': 'disabled()',\n '[class]': 'cssClasses',\n },\n})\nexport class EclRatingFieldComponent extends ECLBaseDirective implements ControlValueAccessor {\n /**\n * Name of the radio group. Also used for creating id for each radio button.\n */\n readonly name = input('rating');\n /**\n * How many stars should the rating have.\n */\n readonly numberOfStars = input(5, { transform: numberAttribute });\n /**\n * The initial value, if any.\n */\n readonly rating = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /** Internal mutable rating value, falls back to the input */\n readonly currentRating = signal<number>(undefined);\n\n private readonly _syncRating = effect(() => {\n const inputRating = this.rating();\n if (inputRating !== undefined) {\n this.currentRating.set(inputRating);\n }\n });\n /**\n * Can be used to set disabled status.\n */\n readonly disabled = model<boolean>(undefined);\n\n /**\n * The event to be emitted when rating is changed.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly ratingChange = output<any>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (_: any) => void = noop;\n private onTouched: () => void = noop;\n\n /**\n * Array of numbers, from 1 to 'numberOfStars'\n */\n get numbers(): number[] {\n return Array(this.numberOfStars())\n .fill(0)\n .map((_, i) => this.numberOfStars() - i);\n }\n\n /**\n * Applies the base class `ecl-rating-field` to the host element. Applies 'ecl-rating-field--disabled' class on condition.\n */\n get cssClasses(): string {\n return [super.getCssClasses('ecl-rating-field'), this.disabled() ? 'ecl-rating-field--disabled' : ''].join(' ').trim();\n }\n\n /**\n * Method that sets the new rating and emit 'ratingChange' event, that includes the new rating number.\n * @param rating - the new rating\n */\n onRadioClick(rating: number): void {\n this.currentRating.set(rating);\n this.onTouched();\n this.onChange(this.currentRating());\n\n const evt = new EclRatingChangeEvent(rating);\n this.ratingChange.emit(evt);\n }\n\n /**\n * Informs the component of any changes in the parent (ControlValueAccessor). Sets the new value for the 'rating' property.\n * @param value\n */\n writeValue(value: number): void {\n this.currentRating.set(value);\n }\n\n /**\n * Disable/enable component.\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled || null);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}\n",
77205
76677
  "assetsDirs": [],
77206
76678
  "styleUrlsData": "",
77207
76679
  "stylesData": "",
77208
76680
  "jsdoctags": [
77209
76681
  {
77210
- "pos": 611,
77211
- "end": 741,
76682
+ "pos": 598,
76683
+ "end": 728,
77212
76684
  "kind": 321,
77213
76685
  "id": 0,
77214
76686
  "flags": 16777216,
@@ -77230,7 +76702,7 @@
77230
76702
  "name": "numbers",
77231
76703
  "type": "[]",
77232
76704
  "returnType": "number[]",
77233
- "line": 71,
76705
+ "line": 72,
77234
76706
  "rawdescription": "\n\nArray of numbers, from 1 to 'numberOfStars'\n",
77235
76707
  "description": "<p>Array of numbers, from 1 to &#39;numberOfStars&#39;</p>\n"
77236
76708
  }
@@ -77272,10 +76744,11 @@
77272
76744
  },
77273
76745
  {
77274
76746
  "name": "EclSearchFormComponent",
77275
- "id": "component-EclSearchFormComponent-910c2264ef355a929c966776966c0f0b888509720be9e40438355d350e2ce3b6db10a079d55795dc53e3cda88d4e5b3dcf9b6670a37c97ec7f499a90b855833e",
76747
+ "id": "component-EclSearchFormComponent-46cef857d014a25d75640024aa26a1e3525a2d6296799d324f4dd23c9276e9a728ac32148af1c22e504acced5b1d742cfe39ce7577a9ca078dc0a794651a1c81",
77276
76748
  "file": "packages/ecl/components/ecl-search-form/ecl-search-form.component.ts",
77277
76749
  "encapsulation": [],
77278
76750
  "entryComponents": [],
76751
+ "host": {},
77279
76752
  "inputs": [],
77280
76753
  "outputs": [],
77281
76754
  "providers": [
@@ -77303,7 +76776,7 @@
77303
76776
  "indexKey": "",
77304
76777
  "optional": false,
77305
76778
  "description": "",
77306
- "line": 51,
76779
+ "line": 52,
77307
76780
  "rawdescription": "\n",
77308
76781
  "modifierKind": [
77309
76782
  148
@@ -77320,7 +76793,7 @@
77320
76793
  "indexKey": "",
77321
76794
  "optional": false,
77322
76795
  "description": "",
77323
- "line": 52,
76796
+ "line": 53,
77324
76797
  "rawdescription": "\n",
77325
76798
  "modifierKind": [
77326
76799
  148
@@ -77337,7 +76810,7 @@
77337
76810
  "indexKey": "",
77338
76811
  "optional": false,
77339
76812
  "description": "",
77340
- "line": 48,
76813
+ "line": 49,
77341
76814
  "rawdescription": "\n",
77342
76815
  "modifierKind": [
77343
76816
  148
@@ -77354,7 +76827,7 @@
77354
76827
  "indexKey": "",
77355
76828
  "optional": false,
77356
76829
  "description": "",
77357
- "line": 50,
76830
+ "line": 51,
77358
76831
  "rawdescription": "\n",
77359
76832
  "modifierKind": [
77360
76833
  148
@@ -77371,7 +76844,7 @@
77371
76844
  "indexKey": "",
77372
76845
  "optional": false,
77373
76846
  "description": "",
77374
- "line": 49,
76847
+ "line": 50,
77375
76848
  "rawdescription": "\n",
77376
76849
  "modifierKind": [
77377
76850
  148
@@ -77388,7 +76861,7 @@
77388
76861
  "indexKey": "",
77389
76862
  "optional": false,
77390
76863
  "description": "<p>The current/default search text.</p>\n",
77391
- "line": 47,
76864
+ "line": 48,
77392
76865
  "rawdescription": "\n\nThe current/default search text.\n",
77393
76866
  "modifierKind": [
77394
76867
  148
@@ -77449,7 +76922,7 @@
77449
76922
  "indexKey": "",
77450
76923
  "optional": false,
77451
76924
  "description": "<p>This event is emited, when user performs the search action. Includes the search text from the input field.</p>\n",
77452
- "line": 67,
76925
+ "line": 58,
77453
76926
  "rawdescription": "\n\nThis event is emited, when user performs the search action. Includes the search text from the input field.\n",
77454
76927
  "modifierKind": [
77455
76928
  148
@@ -77466,7 +76939,7 @@
77466
76939
  "indexKey": "",
77467
76940
  "optional": false,
77468
76941
  "description": "<p>The current/default search text.</p>\n",
77469
- "line": 47,
76942
+ "line": 48,
77470
76943
  "rawdescription": "\n\nThe current/default search text.\n",
77471
76944
  "modifierKind": [
77472
76945
  148
@@ -77485,7 +76958,7 @@
77485
76958
  "indexKey": "",
77486
76959
  "optional": false,
77487
76960
  "description": "",
77488
- "line": 42,
76961
+ "line": 75,
77489
76962
  "rawdescription": "\n",
77490
76963
  "modifierKind": [
77491
76964
  124
@@ -77501,16 +76974,10 @@
77501
76974
  "indexKey": "",
77502
76975
  "optional": false,
77503
76976
  "description": "",
77504
- "line": 62,
76977
+ "line": 77,
77505
76978
  "rawdescription": "\n",
77506
- "decorators": [
77507
- {
77508
- "name": "HostBinding",
77509
- "stringifiedArguments": "'attr.role'"
77510
- }
77511
- ],
77512
76979
  "modifierKind": [
77513
- 171
76980
+ 124
77514
76981
  ]
77515
76982
  }
77516
76983
  ],
@@ -77531,19 +76998,13 @@
77531
76998
  "optional": false,
77532
76999
  "returnType": "void",
77533
77000
  "typeParameters": [],
77534
- "line": 86,
77001
+ "line": 97,
77535
77002
  "deprecated": false,
77536
77003
  "deprecationMessage": "",
77537
77004
  "rawdescription": "\n\nPerform search when user clicks Enter when on the input field. Emits the search event with the search text.\n",
77538
77005
  "description": "<p>Perform search when user clicks Enter when on the input field. Emits the search event with the search text.</p>\n",
77539
- "decorators": [
77540
- {
77541
- "name": "HostListener",
77542
- "stringifiedArguments": "'keydown.enter', ['$event']"
77543
- }
77544
- ],
77545
77006
  "modifierKind": [
77546
- 171
77007
+ 124
77547
77008
  ],
77548
77009
  "jsdoctags": [
77549
77010
  {
@@ -77575,16 +77036,19 @@
77575
77036
  "optional": false,
77576
77037
  "returnType": "void",
77577
77038
  "typeParameters": [],
77578
- "line": 95,
77039
+ "line": 106,
77579
77040
  "deprecated": false,
77580
77041
  "deprecationMessage": "",
77581
77042
  "rawdescription": "\n\nAssigns the new input text value to the 'searchInputText' property, each time the input is changed.\n",
77582
77043
  "description": "<p>Assigns the new input text value to the &#39;searchInputText&#39; property, each time the input is changed.</p>\n",
77044
+ "modifierKind": [
77045
+ 124
77046
+ ],
77583
77047
  "jsdoctags": [
77584
77048
  {
77585
77049
  "name": {
77586
- "pos": 3307,
77587
- "end": 3315,
77050
+ "pos": 3577,
77051
+ "end": 3585,
77588
77052
  "kind": 80,
77589
77053
  "id": 0,
77590
77054
  "flags": 16842752,
@@ -77597,8 +77061,8 @@
77597
77061
  "deprecated": false,
77598
77062
  "deprecationMessage": "",
77599
77063
  "tagName": {
77600
- "pos": 3301,
77601
- "end": 3306,
77064
+ "pos": 3571,
77065
+ "end": 3576,
77602
77066
  "kind": 80,
77603
77067
  "id": 0,
77604
77068
  "flags": 16842752,
@@ -77625,11 +77089,14 @@
77625
77089
  "optional": false,
77626
77090
  "returnType": "void",
77627
77091
  "typeParameters": [],
77628
- "line": 77,
77092
+ "line": 89,
77629
77093
  "deprecated": false,
77630
77094
  "deprecationMessage": "",
77631
77095
  "rawdescription": "\n\nPerform search when user clicks the search button. Emits the search event with the search text.\n",
77632
77096
  "description": "<p>Perform search when user clicks the search button. Emits the search event with the search text.</p>\n",
77097
+ "modifierKind": [
77098
+ 124
77099
+ ],
77633
77100
  "jsdoctags": [
77634
77101
  {
77635
77102
  "name": "evt",
@@ -77670,7 +77137,7 @@
77670
77137
  "optional": false,
77671
77138
  "returnType": "void",
77672
77139
  "typeParameters": [],
77673
- "line": 106,
77140
+ "line": 66,
77674
77141
  "deprecated": false,
77675
77142
  "deprecationMessage": "",
77676
77143
  "rawdescription": "\n",
@@ -77725,7 +77192,7 @@
77725
77192
  "optional": false,
77726
77193
  "returnType": "void",
77727
77194
  "typeParameters": [],
77728
- "line": 111,
77195
+ "line": 71,
77729
77196
  "deprecated": false,
77730
77197
  "deprecationMessage": "",
77731
77198
  "rawdescription": "\n",
@@ -77770,7 +77237,7 @@
77770
77237
  "optional": false,
77771
77238
  "returnType": "void",
77772
77239
  "typeParameters": [],
77773
- "line": 101,
77240
+ "line": 61,
77774
77241
  "deprecated": false,
77775
77242
  "deprecationMessage": "",
77776
77243
  "rawdescription": "\n",
@@ -77831,57 +77298,8 @@
77831
77298
  "coverageIgnore": false,
77832
77299
  "deprecated": false,
77833
77300
  "deprecationMessage": "",
77834
- "hostBindings": [
77835
- {
77836
- "coverageIgnore": false,
77837
- "name": "attr.role",
77838
- "actualName": "role",
77839
- "defaultValue": "'search'",
77840
- "deprecated": false,
77841
- "deprecationMessage": "",
77842
- "rawdescription": "\n",
77843
- "description": "",
77844
- "line": 62,
77845
- "type": "string",
77846
- "decorators": []
77847
- },
77848
- {
77849
- "coverageIgnore": false,
77850
- "name": "class",
77851
- "actualName": "cssClasses",
77852
- "deprecated": false,
77853
- "deprecationMessage": "",
77854
- "rawdescription": "\n\nApplies the base class `ecl-search-form` to the host element.\n",
77855
- "description": "<p>Applies the base class <code>ecl-search-form</code> to the host element.</p>\n",
77856
- "line": 58,
77857
- "type": "string",
77858
- "decorators": []
77859
- }
77860
- ],
77861
- "hostListeners": [
77862
- {
77863
- "coverageIgnore": false,
77864
- "name": "keydown.enter",
77865
- "args": [
77866
- {
77867
- "name": "evt",
77868
- "type": "Event",
77869
- "optional": false,
77870
- "dotDotDotToken": false,
77871
- "deprecated": false,
77872
- "deprecationMessage": ""
77873
- }
77874
- ],
77875
- "argsDecorator": [
77876
- "$event"
77877
- ],
77878
- "deprecated": false,
77879
- "deprecationMessage": "",
77880
- "rawdescription": "\n\nPerform search when user clicks Enter when on the input field. Emits the search event with the search text.\n",
77881
- "description": "<p>Perform search when user clicks Enter when on the input field. Emits the search event with the search text.</p>\n",
77882
- "line": 86
77883
- }
77884
- ],
77301
+ "hostBindings": [],
77302
+ "hostListeners": [],
77885
77303
  "standalone": false,
77886
77304
  "imports": [
77887
77305
  {
@@ -77908,14 +77326,14 @@
77908
77326
  "description": "<p>Component representing search field - input and button, in a responsive, styled layout.</p>\n",
77909
77327
  "rawdescription": "\n\nComponent representing search field - input and button, in a responsive, styled layout.\n",
77910
77328
  "type": "component",
77911
- "sourceCode": "import {\n Component,\n forwardRef,\n HostBinding,\n HostListener,\n Provider,\n inject,\n output,\n input,\n model,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclThemeService } from '@eui/ecl/core';\nimport { EclSearchFormEvent } from './events/ecl-search-form.event';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_FORM_GROUP } from '@eui/ecl/components/ecl-form-group';\nimport { EUI_ECL_TEXT_INPUT } from '@eui/ecl/components/ecl-text-input';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\nexport const ECL_SEARCH_FORM_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclSearchFormComponent),\n multi: true,\n};\n\nconst noop = (): void => {\n /** empty*/\n};\n\n/**\n * Component representing search field - input and button, in a responsive, styled layout.\n */\n@Component({\n selector: 'ecl-search-form',\n templateUrl: 'ecl-search-form.component.html',\n imports: [TranslatePipe, FormsModule, ...EUI_ECL_BUTTON, ...EUI_ECL_FORM_GROUP, ...EUI_ECL_TEXT_INPUT, ...EUI_ECL_ICON], // TODO: replace with new names EUI_ECL_...\n providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR],\n})\nexport class EclSearchFormComponent extends ECLBaseDirective implements ControlValueAccessor {\n protected eclThemeService = inject(EclThemeService);\n\n /**\n * The current/default search text.\n */\n readonly searchInputText = model<string>(undefined);\n readonly placeholder = input<string>(undefined);\n readonly searchButtonLabel = input<string>(undefined);\n readonly searchButtonIcon = input('search');\n readonly buttonExtraClassses = input('');\n readonly inputExtraClassses = input('');\n\n /**\n * Applies the base class `ecl-search-form` to the host element.\n */\n @HostBinding('class')\n get cssClasses(): string {\n return [super.getCssClasses('ecl-search-form')].join(' ').trim();\n }\n\n @HostBinding('attr.role') role = 'search';\n\n /**\n * This event is emited, when user performs the search action. Includes the search text from the input field.\n */\n readonly searchEvent = output<EclSearchFormEvent>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (_: any) => void = noop;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onTouched: (_: any) => void = noop;\n\n /**\n * Perform search when user clicks the search button. Emits the search event with the search text.\n */\n onSearchClick(evt: Event): void {\n this.searchEvent.emit(new EclSearchFormEvent(this.searchInputText()));\n evt.preventDefault();\n }\n\n /**\n * Perform search when user clicks Enter when on the input field. Emits the search event with the search text.\n */\n @HostListener('keydown.enter', ['$event'])\n onEnterKeyDown(evt: Event): void {\n this.searchEvent.emit(new EclSearchFormEvent(this.searchInputText()));\n evt.preventDefault();\n }\n\n /**\n * Assigns the new input text value to the 'searchInputText' property, each time the input is changed.\n * @param newValue\n */\n onModelChange(newValue: string): void {\n this.searchInputText.set(newValue);\n this.onChange(newValue);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(value: any): void {\n this.searchInputText.set(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: (_: any) => void): void {\n this.onTouched = fn;\n }\n}\n",
77329
+ "sourceCode": "import {\n Component,\n forwardRef,\n Provider,\n inject,\n output,\n input,\n model,\n} from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ECLBaseDirective } from '@eui/ecl/core';\nimport { EclThemeService } from '@eui/ecl/core';\nimport { EclSearchFormEvent } from './events/ecl-search-form.event';\nimport { EUI_ECL_BUTTON } from '@eui/ecl/components/ecl-button';\nimport { EUI_ECL_FORM_GROUP } from '@eui/ecl/components/ecl-form-group';\nimport { EUI_ECL_TEXT_INPUT } from '@eui/ecl/components/ecl-text-input';\nimport { EUI_ECL_ICON } from '@eui/ecl/components/ecl-icon';\n\nexport const ECL_SEARCH_FORM_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EclSearchFormComponent),\n multi: true,\n};\n\nconst noop = (): void => {\n /** empty*/\n};\n\n/**\n * Component representing search field - input and button, in a responsive, styled layout.\n */\n@Component({\n selector: 'ecl-search-form',\n templateUrl: 'ecl-search-form.component.html',\n imports: [TranslatePipe, FormsModule, ...EUI_ECL_BUTTON, ...EUI_ECL_FORM_GROUP, ...EUI_ECL_TEXT_INPUT, ...EUI_ECL_ICON], // TODO: replace with new names EUI_ECL_...\n providers: [ECL_SEARCH_FORM_VALUE_ACCESSOR],\n host: {\n '[class]': 'cssClasses',\n '[attr.role]': 'role',\n '(keydown.enter)': 'onEnterKeyDown($event)',\n },\n})\nexport class EclSearchFormComponent extends ECLBaseDirective implements ControlValueAccessor {\n /**\n * The current/default search text.\n */\n readonly searchInputText = model<string>(undefined);\n readonly placeholder = input<string>(undefined);\n readonly searchButtonLabel = input<string>(undefined);\n readonly searchButtonIcon = input('search');\n readonly buttonExtraClassses = input('');\n readonly inputExtraClassses = input('');\n\n /**\n * This event is emited, when user performs the search action. Includes the search text from the input field.\n */\n readonly searchEvent = output<EclSearchFormEvent>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(value: any): void {\n this.searchInputText.set(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: (_: any) => void): void {\n this.onTouched = fn;\n }\n\n protected eclThemeService = inject(EclThemeService);\n\n protected role = 'search';\n\n /**\n * Applies the base class `ecl-search-form` to the host element.\n */\n protected get cssClasses(): string {\n return [super.getCssClasses('ecl-search-form')].join(' ').trim();\n }\n\n /**\n * Perform search when user clicks the search button. Emits the search event with the search text.\n */\n protected onSearchClick(evt: Event): void {\n this.searchEvent.emit(new EclSearchFormEvent(this.searchInputText()));\n evt.preventDefault();\n }\n\n /**\n * Perform search when user clicks Enter when on the input field. Emits the search event with the search text.\n */\n protected onEnterKeyDown(evt: Event): void {\n this.searchEvent.emit(new EclSearchFormEvent(this.searchInputText()));\n evt.preventDefault();\n }\n\n /**\n * Assigns the new input text value to the 'searchInputText' property, each time the input is changed.\n * @param newValue\n */\n protected onModelChange(newValue: string): void {\n this.searchInputText.set(newValue);\n this.onChange(newValue);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (_: any) => void = noop;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onTouched: (_: any) => void = noop;\n}\n",
77912
77330
  "assetsDirs": [],
77913
77331
  "styleUrlsData": "",
77914
77332
  "stylesData": "",
77915
77333
  "jsdoctags": [
77916
77334
  {
77917
- "pos": 957,
77918
- "end": 1055,
77335
+ "pos": 922,
77336
+ "end": 1020,
77919
77337
  "kind": 321,
77920
77338
  "id": 0,
77921
77339
  "flags": 16777216,
@@ -77937,7 +77355,7 @@
77937
77355
  "name": "cssClasses",
77938
77356
  "type": "string",
77939
77357
  "returnType": "string",
77940
- "line": 58,
77358
+ "line": 82,
77941
77359
  "rawdescription": "\n\nApplies the base class `ecl-search-form` to the host element.\n",
77942
77360
  "description": "<p>Applies the base class <code>ecl-search-form</code> to the host element.</p>\n"
77943
77361
  }