@sapudex/web-components 2.40.0 → 2.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/cypress/specs/Dropdown.cy.tsx +90 -0
  2. package/cypress/specs/PasswordField.cy.tsx +37 -0
  3. package/cypress/specs/Search.cy.tsx +244 -138
  4. package/cypress/specs/SelectBox.cy.tsx +184 -5
  5. package/cypress/support/component-imports.instrumented.ts +2 -0
  6. package/cypress/support/component-imports.src.ts +2 -0
  7. package/dist/Dropdown.d.ts +5 -0
  8. package/dist/Dropdown.js +56 -0
  9. package/dist/Dropdown.js.map +1 -1
  10. package/dist/List.d.ts +1 -6
  11. package/dist/List.js +2 -10
  12. package/dist/List.js.map +1 -1
  13. package/dist/MastheadCountrySelector.d.ts +7 -0
  14. package/dist/MastheadCountrySelector.js +3 -0
  15. package/dist/MastheadCountrySelector.js.map +1 -1
  16. package/dist/PasswordField.d.ts +10 -0
  17. package/dist/PasswordField.js +17 -2
  18. package/dist/PasswordField.js.map +1 -1
  19. package/dist/PasswordFieldTemplate.js +1 -1
  20. package/dist/PasswordFieldTemplate.js.map +1 -1
  21. package/dist/Search.d.ts +1 -1
  22. package/dist/Search.js +13 -9
  23. package/dist/Search.js.map +1 -1
  24. package/dist/SearchTemplate.js +3 -3
  25. package/dist/SearchTemplate.js.map +1 -1
  26. package/dist/SearchableListBase.d.ts +1 -6
  27. package/dist/SearchableListBase.js.map +1 -1
  28. package/dist/SearchableListBaseTemplate.js +1 -1
  29. package/dist/SearchableListBaseTemplate.js.map +1 -1
  30. package/dist/SelectBase.d.ts +7 -1
  31. package/dist/SelectBase.js +114 -17
  32. package/dist/SelectBase.js.map +1 -1
  33. package/dist/TextField.d.ts +1 -1
  34. package/dist/TextField.js +2 -2
  35. package/dist/TextField.js.map +1 -1
  36. package/dist/TextFieldTemplate.js +1 -1
  37. package/dist/TextFieldTemplate.js.map +1 -1
  38. package/dist/assets/{InputSuggestions-DAElWNvY.js → InputSuggestions-BSg7bjcx.js} +1 -1
  39. package/dist/assets/{ListItemStandardExpandableTextTemplate-B2fGcGW7.js → ListItemStandardExpandableTextTemplate-CCEQur_J.js} +1 -1
  40. package/dist/assets/{bundle.esm-DPVxY8xv.js → bundle.esm-I7iOjLgn.js} +232 -232
  41. package/dist/assets/messagebundle_en-BZqDcZHN.js +1 -0
  42. package/dist/assets/messagebundle_hu-CBV3ISbF.js +1 -0
  43. package/dist/css/themes/MastheadCountrySelector.css +1 -1
  44. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  45. package/dist/css/themes/StatusMessage.css +1 -1
  46. package/dist/css/themes/TextField.css +1 -1
  47. package/dist/css/themes/Toast.css +1 -1
  48. package/dist/custom-elements-internal.json +38 -146
  49. package/dist/custom-elements.json +38 -114
  50. package/dist/features/SearchSuggestionsPopover.d.ts +6 -9
  51. package/dist/features/SearchSuggestionsPopover.js +47 -163
  52. package/dist/features/SearchSuggestionsPopover.js.map +1 -1
  53. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  54. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  55. package/dist/generated/i18n/i18n-defaults.d.ts +3 -2
  56. package/dist/generated/i18n/i18n-defaults.js +3 -2
  57. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  58. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +6 -5
  59. package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
  60. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +1 -1
  61. package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
  62. package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
  63. package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
  64. package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
  65. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  66. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  67. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  68. package/dist/generated/themes/StatusMessage.css.d.ts +1 -1
  69. package/dist/generated/themes/StatusMessage.css.js +1 -1
  70. package/dist/generated/themes/StatusMessage.css.js.map +1 -1
  71. package/dist/generated/themes/TextField.css.d.ts +1 -1
  72. package/dist/generated/themes/TextField.css.js +1 -1
  73. package/dist/generated/themes/TextField.css.js.map +1 -1
  74. package/dist/generated/themes/Toast.css.d.ts +1 -1
  75. package/dist/generated/themes/Toast.css.js +1 -1
  76. package/dist/generated/themes/Toast.css.js.map +1 -1
  77. package/dist/messagebundle.properties +2 -1
  78. package/dist/messagebundle_en.properties +2 -1
  79. package/dist/messagebundle_hu.properties +125 -0
  80. package/dist/vscode.html-custom-data.json +10 -25
  81. package/dist/web-types.json +21 -41
  82. package/package.json +1 -1
  83. package/src/Dropdown.ts +62 -0
  84. package/src/List.ts +3 -18
  85. package/src/MastheadCountrySelector.hbs +2 -0
  86. package/src/MastheadCountrySelector.ts +9 -0
  87. package/src/MastheadMobileMenu.hbs +1 -0
  88. package/src/PasswordField.ts +24 -0
  89. package/src/PasswordFieldTemplate.tsx +2 -2
  90. package/src/Search.ts +13 -9
  91. package/src/SearchTemplate.tsx +0 -3
  92. package/src/SearchableListBase.ts +1 -6
  93. package/src/SearchableListBaseTemplate.tsx +0 -1
  94. package/src/SelectBase.ts +114 -19
  95. package/src/TextField.ts +1 -1
  96. package/src/TextFieldTemplate.tsx +1 -1
  97. package/src/features/SearchSuggestionsPopover.ts +55 -177
  98. package/src/generated/i18n/i18n-defaults.ts +2 -2
  99. package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +6 -5
  100. package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +1 -1
  101. package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
  102. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  103. package/src/generated/themes/StatusMessage.css.ts +1 -1
  104. package/src/generated/themes/TextField.css.ts +1 -1
  105. package/src/generated/themes/Toast.css.ts +1 -1
  106. package/src/i18n/messagebundle.properties +2 -1
  107. package/src/i18n/messagebundle_en.properties +2 -1
  108. package/src/i18n/messagebundle_hu.properties +125 -0
  109. package/src/themes/MastheadCountrySelector.css +5 -2
  110. package/src/themes/MastheadProfileMenu.css +0 -5
  111. package/src/themes/StatusMessage.css +4 -4
  112. package/src/themes/TextField.css +3 -0
  113. package/src/themes/Toast.css +14 -2
  114. package/dist/assets/messagebundle_en-BxjFAY2S.js +0 -1
  115. package/dist/assets/messagebundle_hu-BEMbu-EE.js +0 -1
@@ -3396,16 +3396,6 @@
3396
3396
  "default": "undefined",
3397
3397
  "privacy": "public"
3398
3398
  },
3399
- {
3400
- "kind": "field",
3401
- "name": "tabNavigationEnabled",
3402
- "type": {
3403
- "text": "boolean | undefined"
3404
- },
3405
- "description": "Enables tab navigation for the list.",
3406
- "default": "\"\"",
3407
- "privacy": "public"
3408
- },
3409
3399
  {
3410
3400
  "kind": "field",
3411
3401
  "name": "valueState",
@@ -3549,15 +3539,6 @@
3549
3539
  "type": {
3550
3540
  "text": "boolean"
3551
3541
  }
3552
- },
3553
- {
3554
- "description": "Enables tab navigation for the list.",
3555
- "name": "tab-navigation-enabled",
3556
- "default": "\"\"",
3557
- "fieldName": "tabNavigationEnabled",
3558
- "type": {
3559
- "text": "boolean | undefined"
3560
- }
3561
3542
  }
3562
3543
  ],
3563
3544
  "superclass": {
@@ -5666,16 +5647,6 @@
5666
5647
  "default": "false",
5667
5648
  "privacy": "public"
5668
5649
  },
5669
- {
5670
- "kind": "field",
5671
- "name": "tabNavigationEnabled",
5672
- "type": {
5673
- "text": "boolean | undefined"
5674
- },
5675
- "description": "Enables tab navigation for the list.",
5676
- "default": "\"\"",
5677
- "privacy": "public"
5678
- },
5679
5650
  {
5680
5651
  "kind": "field",
5681
5652
  "name": "triggerAccessibleRole",
@@ -6004,15 +5975,6 @@
6004
5975
  "text": "boolean"
6005
5976
  }
6006
5977
  },
6007
- {
6008
- "description": "Enables tab navigation for the list.",
6009
- "name": "tab-navigation-enabled",
6010
- "default": "\"\"",
6011
- "fieldName": "tabNavigationEnabled",
6012
- "type": {
6013
- "text": "boolean | undefined"
6014
- }
6015
- },
6016
5978
  {
6017
5979
  "description": "Allows setting a custom role for dropdown trigger.",
6018
5980
  "name": "trigger-accessible-role",
@@ -9632,16 +9594,6 @@
9632
9594
  "default": "\"SingleSelect\"",
9633
9595
  "privacy": "public"
9634
9596
  },
9635
- {
9636
- "kind": "field",
9637
- "name": "tabNavigationEnabled",
9638
- "type": {
9639
- "text": "boolean | undefined"
9640
- },
9641
- "description": "Enables tab navigation for the list.",
9642
- "default": "\"\"",
9643
- "privacy": "public"
9644
- },
9645
9597
  {
9646
9598
  "kind": "field",
9647
9599
  "name": "type",
@@ -9738,15 +9690,6 @@
9738
9690
  "text": "\"SingleSelect\" | \"MultiSelect\" | \"SingleContent\" | \"RadioGroup\""
9739
9691
  }
9740
9692
  },
9741
- {
9742
- "description": "Enables tab navigation for the list.",
9743
- "name": "tab-navigation-enabled",
9744
- "default": "\"\"",
9745
- "fieldName": "tabNavigationEnabled",
9746
- "type": {
9747
- "text": "boolean | undefined"
9748
- }
9749
- },
9750
9693
  {
9751
9694
  "description": "Defines the type of the item.",
9752
9695
  "name": "type",
@@ -12030,6 +11973,16 @@
12030
11973
  "default": "\"\"",
12031
11974
  "privacy": "public"
12032
11975
  },
11976
+ {
11977
+ "kind": "field",
11978
+ "name": "hideSearch",
11979
+ "type": {
11980
+ "text": "boolean"
11981
+ },
11982
+ "description": "Hides the search field in the country list view.",
11983
+ "default": "false",
11984
+ "privacy": "public"
11985
+ },
12033
11986
  {
12034
11987
  "kind": "field",
12035
11988
  "name": "languageVoice",
@@ -12153,6 +12106,15 @@
12153
12106
  "text": "string"
12154
12107
  }
12155
12108
  },
12109
+ {
12110
+ "description": "Hides the search field in the country list view.",
12111
+ "name": "hide-search",
12112
+ "default": "false",
12113
+ "fieldName": "hideSearch",
12114
+ "type": {
12115
+ "text": "boolean"
12116
+ }
12117
+ },
12156
12118
  {
12157
12119
  "description": "Defines the language voice of the search",
12158
12120
  "name": "language-voice",
@@ -15588,6 +15550,16 @@
15588
15550
  "default": "false",
15589
15551
  "privacy": "public"
15590
15552
  },
15553
+ {
15554
+ "kind": "field",
15555
+ "name": "hideButtonTooltip",
15556
+ "type": {
15557
+ "text": "string"
15558
+ },
15559
+ "description": "Defines the tooltip for the hide password button.",
15560
+ "default": "\"\"",
15561
+ "privacy": "public"
15562
+ },
15591
15563
  {
15592
15564
  "kind": "field",
15593
15565
  "name": "label",
@@ -15778,6 +15750,15 @@
15778
15750
  "text": "boolean"
15779
15751
  }
15780
15752
  },
15753
+ {
15754
+ "description": "Defines the tooltip for the hide password button.",
15755
+ "name": "hide-button-tooltip",
15756
+ "default": "\"\"",
15757
+ "fieldName": "hideButtonTooltip",
15758
+ "type": {
15759
+ "text": "string"
15760
+ }
15761
+ },
15781
15762
  {
15782
15763
  "description": "Defines label text for the input field.",
15783
15764
  "name": "label",
@@ -18646,16 +18627,6 @@
18646
18627
  "description": "Defines if the search input is visible.",
18647
18628
  "default": "false",
18648
18629
  "privacy": "public"
18649
- },
18650
- {
18651
- "kind": "field",
18652
- "name": "tabNavigationEnabled",
18653
- "type": {
18654
- "text": "boolean | undefined"
18655
- },
18656
- "description": "Enables tab navigation for the list.",
18657
- "default": "\"\"",
18658
- "privacy": "public"
18659
18630
  }
18660
18631
  ],
18661
18632
  "events": [
@@ -18807,15 +18778,6 @@
18807
18778
  "type": {
18808
18779
  "text": "boolean"
18809
18780
  }
18810
- },
18811
- {
18812
- "description": "Enables tab navigation for the list.",
18813
- "name": "tab-navigation-enabled",
18814
- "default": "\"\"",
18815
- "fieldName": "tabNavigationEnabled",
18816
- "type": {
18817
- "text": "boolean | undefined"
18818
- }
18819
18781
  }
18820
18782
  ],
18821
18783
  "superclass": {
@@ -20398,16 +20360,6 @@
20398
20360
  "default": "undefined",
20399
20361
  "privacy": "public"
20400
20362
  },
20401
- {
20402
- "kind": "field",
20403
- "name": "tabNavigationEnabled",
20404
- "type": {
20405
- "text": "boolean | undefined"
20406
- },
20407
- "description": "Enables tab navigation for the list.",
20408
- "default": "\"\"",
20409
- "privacy": "public"
20410
- },
20411
20363
  {
20412
20364
  "kind": "field",
20413
20365
  "name": "valueState",
@@ -20529,15 +20481,6 @@
20529
20481
  "type": {
20530
20482
  "text": "boolean"
20531
20483
  }
20532
- },
20533
- {
20534
- "description": "Enables tab navigation for the list.",
20535
- "name": "tab-navigation-enabled",
20536
- "default": "\"\"",
20537
- "fieldName": "tabNavigationEnabled",
20538
- "type": {
20539
- "text": "boolean | undefined"
20540
- }
20541
20484
  }
20542
20485
  ],
20543
20486
  "events": [
@@ -20836,16 +20779,6 @@
20836
20779
  "default": "undefined",
20837
20780
  "privacy": "public"
20838
20781
  },
20839
- {
20840
- "kind": "field",
20841
- "name": "tabNavigationEnabled",
20842
- "type": {
20843
- "text": "boolean | undefined"
20844
- },
20845
- "description": "Enables tab navigation for the list.",
20846
- "default": "\"\"",
20847
- "privacy": "public"
20848
- },
20849
20782
  {
20850
20783
  "kind": "field",
20851
20784
  "name": "tooltipPlacement",
@@ -21054,15 +20987,6 @@
21054
20987
  "text": "boolean"
21055
20988
  }
21056
20989
  },
21057
- {
21058
- "description": "Enables tab navigation for the list.",
21059
- "name": "tab-navigation-enabled",
21060
- "default": "\"\"",
21061
- "fieldName": "tabNavigationEnabled",
21062
- "type": {
21063
- "text": "boolean | undefined"
21064
- }
21065
- },
21066
20990
  {
21067
20991
  "description": "Determines on which side of the component the Tooltip is displayed.",
21068
20992
  "name": "tooltip-placement",
@@ -6,7 +6,7 @@ interface SuggestionComponent extends UI5Element {
6
6
  open: boolean;
7
7
  value?: string;
8
8
  suggestionItems?: string;
9
- openSuggestionPopup?: boolean;
9
+ openSuggestionPopup: boolean;
10
10
  }
11
11
  type SearchInputSuggestion = {
12
12
  handleSelectItem: () => void;
@@ -26,8 +26,6 @@ declare class Suggestion {
26
26
  focusabledList?: HTMLDivElement;
27
27
  lists?: Array<HTMLDivElement>;
28
28
  _focusHandler: UDExListWithFirstLetterFocus;
29
- _tabEscapedFromPopover: boolean;
30
- _shiftTabEscapedFromPopover: boolean;
31
29
  constructor(component: SuggestionComponent);
32
30
  _getComponent(): SuggestionComponent;
33
31
  _getSuggestionPopover(): Popover | null;
@@ -39,15 +37,14 @@ declare class Suggestion {
39
37
  resetFocusState(): void;
40
38
  onFocusInput(): void;
41
39
  onEnter(e: KeyboardEvent): void;
42
- onTab(e: KeyboardEvent): void;
43
- getFocusableItems(): Element[];
44
- onShiftTab(e: KeyboardEvent): void;
40
+ getAllFocusableItems(): Element[];
41
+ private _updateItemSelection;
42
+ onKeyDown(e: KeyboardEvent): void;
43
+ onKeyUp(e: KeyboardEvent): void;
44
+ onTab(): void;
45
45
  onEscape(e: KeyboardEvent): void;
46
46
  onKeyTabList(e: KeyboardEvent): void;
47
47
  onPrevKeyTabList(e: KeyboardEvent): void;
48
- onKeyDown(e: KeyboardEvent): true | undefined;
49
- onKeyUp(e: KeyboardEvent): true | undefined;
50
- handlePrevTabReset(e: KeyboardEvent): void;
51
48
  static get dependencies(): (typeof Button | typeof Popover)[];
52
49
  }
53
50
  export default Suggestion;
@@ -13,8 +13,6 @@ import UDExFirstLetterFocusHandler from "../utils/ListWithFirstLetterFocus.js";
13
13
  class Suggestion {
14
14
  constructor(component) {
15
15
  this._focusHandler = new UDExFirstLetterFocusHandler();
16
- this._tabEscapedFromPopover = false;
17
- this._shiftTabEscapedFromPopover = false;
18
16
  this.component = component;
19
17
  this._getSuggestionPopover();
20
18
  this.selectedItemIndex = -1;
@@ -50,18 +48,12 @@ class Suggestion {
50
48
  }
51
49
  }
52
50
  initLists() {
53
- const list = this.popover?.querySelectorAll(".udex-search-suggestions__list") ? this.popover?.querySelectorAll(".udex-search-suggestions__list") : [];
54
- const newLists = Array.from(list);
55
- if (this.focusabledList && this.lists?.length && newLists.length) {
56
- const oldIndex = this.lists.indexOf(this.focusabledList);
57
- if (oldIndex >= 0 && oldIndex < newLists.length) {
58
- this.focusabledList = newLists[oldIndex];
59
- }
60
- }
61
- this.lists = newLists;
51
+ const list = this.popover?.querySelectorAll(".udex-search-suggestions__list") ?? [];
52
+ this.lists = Array.from(list);
62
53
  }
63
54
  close() {
64
55
  this._getSuggestionPopover();
56
+ this.getAllFocusableItems().forEach(item => item.removeAttribute("aria-selected"));
65
57
  this._getComponent().open = false;
66
58
  this.popover.open = false;
67
59
  this.selectedItemIndex = -1;
@@ -80,36 +72,45 @@ class Suggestion {
80
72
  this.component.value = this._getItems()[this.selectedItemIndex].getAttribute("title")?.replace(/<[^>]*>?/gm, "");
81
73
  }
82
74
  }
83
- onTab(e) {
84
- if (this._tabEscapedFromPopover) {
85
- this._tabEscapedFromPopover = false;
86
- return;
87
- }
88
- if (this.lists?.length && this._getComponent().open) {
89
- this._shiftTabEscapedFromPopover = false;
90
- e.preventDefault();
91
- this.focusabledList = this.lists[0];
92
- this.selectedItemIndex = -1;
93
- this.focusabledList.focus();
75
+ getAllFocusableItems() {
76
+ return Array.from(this.popover?.querySelectorAll("[ui5-button]") ?? []);
77
+ }
78
+ _updateItemSelection(items, nextIndex) {
79
+ if (this.selectedItemIndex >= 0 && this.selectedItemIndex < items.length) {
80
+ items[this.selectedItemIndex].removeAttribute("aria-selected");
94
81
  }
82
+ const button = items[nextIndex];
83
+ button.setAttribute("aria-selected", "true");
84
+ button.focus();
85
+ this.selectedItemIndex = nextIndex;
95
86
  }
96
- getFocusableItems() {
97
- const items = this.focusabledList?.children ? this.focusabledList?.querySelectorAll("[ui5-button]") : [];
98
- return Array.from(items);
87
+ onKeyDown(e) {
88
+ e.preventDefault();
89
+ const items = this.getAllFocusableItems();
90
+ if (!items.length) {
91
+ return;
92
+ }
93
+ const nextIndex = this.selectedItemIndex < 0 || this.selectedItemIndex >= items.length - 1
94
+ ? 0
95
+ : this.selectedItemIndex + 1;
96
+ this._updateItemSelection(items, nextIndex);
99
97
  }
100
- onShiftTab(e) {
101
- if (this._shiftTabEscapedFromPopover) {
102
- this._shiftTabEscapedFromPopover = false;
98
+ onKeyUp(e) {
99
+ e.preventDefault();
100
+ const items = this.getAllFocusableItems();
101
+ if (!items.length) {
103
102
  return;
104
103
  }
105
- const keepOpen = !!this.component.openSuggestionPopup;
106
- if (keepOpen && this.lists?.length && this._getComponent().open) {
107
- this._tabEscapedFromPopover = false;
108
- e.preventDefault();
109
- this.focusabledList = this.lists[this.lists.length - 1];
110
- this.focusabledList.focus();
111
- this.selectedItemIndex = -1;
104
+ const prevIndex = this.selectedItemIndex <= 0
105
+ ? items.length - 1
106
+ : this.selectedItemIndex - 1;
107
+ this._updateItemSelection(items, prevIndex);
108
+ }
109
+ onTab() {
110
+ if (!this._getComponent().openSuggestionPopup) {
111
+ this.close();
112
112
  }
113
+ this.resetFocusState();
113
114
  }
114
115
  onEscape(e) {
115
116
  e.preventDefault();
@@ -117,140 +118,23 @@ class Suggestion {
117
118
  this.onFocusInput();
118
119
  }
119
120
  onKeyTabList(e) {
120
- const keepOpen = !!this.component.openSuggestionPopup;
121
- if (this.lists?.length === 2) {
122
- if (this.focusabledList === this.lists[1]) {
123
- e.preventDefault();
124
- if (keepOpen) {
125
- this.focusabledList = undefined;
126
- this.selectedItemIndex = -1;
127
- this._tabEscapedFromPopover = true;
128
- this.onFocusInput();
129
- return;
130
- }
131
- this.close();
132
- this.onFocusInput();
133
- return;
134
- }
135
- if (this.focusabledList === this.lists[0]) {
136
- e.preventDefault();
137
- this.focusabledList = this.lists[1];
138
- this.focusabledList.focus();
139
- this.selectedItemIndex = -1;
140
- }
141
- }
142
- if (this.lists?.length === 1) {
143
- e.preventDefault();
144
- if (keepOpen) {
145
- this.focusabledList = undefined;
146
- this.selectedItemIndex = -1;
147
- this._tabEscapedFromPopover = true;
148
- this.onFocusInput();
149
- return;
150
- }
151
- this.close();
152
- this.onFocusInput();
153
- }
154
- }
155
- onPrevKeyTabList(e) {
156
- const keepOpen = !!this.component.openSuggestionPopup;
157
121
  e.preventDefault();
158
- if (this.lists?.length === 2) {
159
- if (this.focusabledList === this.lists[0]) {
160
- if (keepOpen) {
161
- this.focusabledList = undefined;
162
- this.selectedItemIndex = -1;
163
- this._shiftTabEscapedFromPopover = true;
164
- }
165
- this.onFocusInput();
166
- return;
167
- }
168
- if (this.focusabledList === this.lists[1]) {
169
- this.focusabledList = this.lists[0];
170
- this.focusabledList.focus();
171
- this.selectedItemIndex = -1;
172
- }
122
+ this.close();
123
+ this.resetFocusState();
124
+ const shadow = this._getComponent().shadowRoot;
125
+ const firstBtn = shadow?.querySelector("#reset-button, #voice-button, #submit-button");
126
+ if (firstBtn) {
127
+ firstBtn.focus();
173
128
  }
174
- if (this.lists?.length === 1) {
175
- if (keepOpen) {
176
- this.focusabledList = undefined;
177
- this.selectedItemIndex = -1;
178
- this._shiftTabEscapedFromPopover = true;
179
- }
129
+ else {
180
130
  this.onFocusInput();
181
131
  }
182
132
  }
183
- onKeyDown(e) {
184
- e.preventDefault();
185
- const nextSelectedIdx = this.selectedItemIndex;
186
- const focusabledItems = this.getFocusableItems();
187
- const itemCount = focusabledItems.length - 1;
188
- if (this.lists?.length) {
189
- if (nextSelectedIdx === -1) {
190
- const button = focusabledItems[0];
191
- button.setAttribute("aria-selected", "true");
192
- button.focus();
193
- this.selectedItemIndex = 0;
194
- this.focusabledList?.setAttribute("aria-activedescendant", button.id);
195
- return true;
196
- }
197
- if (nextSelectedIdx >= 0 && nextSelectedIdx !== itemCount) {
198
- const button = focusabledItems[nextSelectedIdx + 1];
199
- focusabledItems[nextSelectedIdx].removeAttribute("aria-selected");
200
- button.setAttribute("aria-selected", "true");
201
- button.focus();
202
- this.selectedItemIndex = nextSelectedIdx + 1;
203
- this.focusabledList?.setAttribute("aria-activedescendant", button.id);
204
- return true;
205
- }
206
- if (nextSelectedIdx === itemCount && this.focusabledList === this.lists[0] && this.lists.length === 2) {
207
- focusabledItems[nextSelectedIdx].removeAttribute("aria-selected");
208
- this.focusabledList?.removeAttribute("aria-activedescendant");
209
- this.focusabledList = this.lists[1];
210
- this.focusabledList.focus();
211
- this.selectedItemIndex = -1;
212
- return true;
213
- }
214
- }
215
- }
216
- onKeyUp(e) {
133
+ onPrevKeyTabList(e) {
217
134
  e.preventDefault();
218
- const focusabledItems = this.getFocusableItems();
219
- const itemCount = focusabledItems.length - 1;
220
- const previousSelectedIdx = this.selectedItemIndex;
221
- if (this.lists?.length) {
222
- if (previousSelectedIdx === -1) {
223
- const button = focusabledItems[0];
224
- button.setAttribute("aria-selected", "true");
225
- button.focus();
226
- this.selectedItemIndex = 0;
227
- this.focusabledList?.setAttribute("aria-activedescendant", button.id);
228
- return true;
229
- }
230
- if (previousSelectedIdx > 0 && previousSelectedIdx <= itemCount) {
231
- const button = focusabledItems[previousSelectedIdx - 1];
232
- focusabledItems[previousSelectedIdx].removeAttribute("aria-selected");
233
- button.setAttribute("aria-selected", "true");
234
- button.focus();
235
- this.selectedItemIndex = previousSelectedIdx - 1;
236
- this.focusabledList?.setAttribute("aria-activedescendant", button.id);
237
- return true;
238
- }
239
- if (previousSelectedIdx === 0 && this.lists.length === 2 && this.focusabledList === this.lists[1]) {
240
- focusabledItems[previousSelectedIdx].removeAttribute("aria-selected");
241
- this.focusabledList?.removeAttribute("aria-activedescendant");
242
- this.focusabledList = this.lists[0];
243
- this.focusabledList.focus();
244
- this.selectedItemIndex = -1;
245
- return true;
246
- }
247
- }
248
- }
249
- handlePrevTabReset(e) {
250
- if (this.focusabledList) {
251
- e.preventDefault();
252
- this.focusabledList.focus();
253
- }
135
+ this.close();
136
+ this.resetFocusState();
137
+ this.onFocusInput();
254
138
  }
255
139
  static get dependencies() {
256
140
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"SearchSuggestionsPopover.js","sourceRoot":"","sources":["../../src/features/SearchSuggestionsPopover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,MAAM,MAAM,mCAAmC,CAAC;AACvD,OAAO,OAAO,MAAM,oCAAoC,CAAC;AACzD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,2BAA2B,MAAM,sCAAsC,CAAC;AAc/E;;;;;;GAMG;AACH,MAAM,UAAU;IAUd,YAAY,SAA8B;QAJ1C,kBAAa,GAAiC,IAAI,2BAA2B,EAAE,CAAC;QAChF,2BAAsB,GAAY,KAAK,CAAC;QACxC,gCAA2B,GAAY,KAAK,CAAC;QAG3C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,UAAW,CAAC,aAAa,CAAU,sBAAsB,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;IAED,IAAI;QACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,OAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,CAAgB;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAiB,gCAAgC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtK,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAChD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,OAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,CAAgB;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAgB;QACpB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;YACzC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAS,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjH,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,CAAgB;QACzB,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACrC,IAAI,CAAC,2BAA2B,GAAG,KAAK,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;QACtD,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;YAChE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;YACpC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,CAAgB;QACvB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,CAAgB;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;QAEtD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;oBAChC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;oBACnC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,CAAgB;QAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;QACtD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;oBAChC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;gBAC1C,CAAC;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;gBAChC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAe,CAAC;gBAEhD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,eAAe,CAAC,eAAe,GAAG,CAAC,CAAe,CAAC;gBAElE,eAAe,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBAClE,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,eAAe,GAAG,CAAC,CAAC;gBAC7C,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtG,eAAe,CAAC,eAAe,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBAClE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;gBAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAgB;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEnD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAe,CAAC;gBAEhD,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,IAAI,SAAS,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,eAAe,CAAC,mBAAmB,GAAG,CAAC,CAAe,CAAC;gBAEtE,eAAe,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACtE,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,GAAG,mBAAmB,GAAG,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,mBAAmB,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClG,eAAe,CAAC,mBAAmB,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACtE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;gBAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,CAAgB;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO;YACL,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAED,eAAe,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;AAErD,eAAe,UAAU,CAAC","sourcesContent":["import type UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport { registerFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Popover from \"@ui5/webcomponents/dist/Popover.js\";\nimport isLetterKey from \"../utils/isLetterKeyPressed.js\";\nimport type { UDExListWithFirstLetterFocus } from \"../utils/ListWithFirstLetterFocus.js\";\nimport UDExFirstLetterFocusHandler from \"../utils/ListWithFirstLetterFocus.js\";\n\ninterface SuggestionComponent extends UI5Element {\n open: boolean;\n value?: string;\n suggestionItems?: string;\n openSuggestionPopup?: boolean;\n}\n\ntype SearchInputSuggestion = {\n handleSelectItem: () => void;\n text: string;\n}\n\n/**\n * A class to manage the <code>Search</code suggestion items.\n *\n * @class\n * @private\n * @author SAP SE\n */\nclass Suggestion {\n component: SuggestionComponent;\n popover?: Popover | null;\n selectedItemIndex: number;\n focusabledList?: HTMLDivElement;\n lists?: Array<HTMLDivElement>;\n _focusHandler: UDExListWithFirstLetterFocus = new UDExFirstLetterFocusHandler();\n _tabEscapedFromPopover: boolean = false;\n _shiftTabEscapedFromPopover: boolean = false;\n\n constructor(component: SuggestionComponent) {\n this.component = component;\n this._getSuggestionPopover();\n this.selectedItemIndex = -1;\n }\n\n _getComponent(): SuggestionComponent {\n return this.component;\n }\n\n _getSuggestionPopover() {\n if (this.popover) {\n return this.popover;\n }\n\n this.popover = this._getComponent().shadowRoot!.querySelector<Popover>(\"#suggestions-popover\");\n return this.popover;\n }\n\n _getItems() {\n return this.popover ? [...this.popover?.querySelectorAll(\"[ui5-button]\")] : [];\n }\n\n open(): void {\n this._getSuggestionPopover();\n this._getComponent().open = true;\n this.popover!.opener = this._getComponent();\n this.popover!.open = true;\n this.initLists();\n this._focusHandler._focusableListItems = this._getItems();\n this._focusHandler.resetMatchingItems();\n }\n\n handleKeyPress(e: KeyboardEvent): void {\n const key = e.key;\n if (isLetterKey(key)) {\n e.preventDefault();\n e.stopPropagation();\n this._focusHandler.focusMatchingListItem(key);\n }\n }\n initLists(): void {\n const list = this.popover?.querySelectorAll(\".udex-search-suggestions__list\") ? this.popover?.querySelectorAll<HTMLDivElement>(\".udex-search-suggestions__list\") : [];\n const newLists = Array.from(list);\n\n if (this.focusabledList && this.lists?.length && newLists.length) {\n const oldIndex = this.lists.indexOf(this.focusabledList);\n if (oldIndex >= 0 && oldIndex < newLists.length) {\n this.focusabledList = newLists[oldIndex];\n }\n }\n\n this.lists = newLists;\n }\n\n close(): void {\n this._getSuggestionPopover();\n this._getComponent().open = false;\n this.popover!.open = false;\n this.selectedItemIndex = -1;\n }\n\n resetFocusState() {\n this.lists = [];\n this.selectedItemIndex = -1;\n this.focusabledList = undefined;\n }\n\n onFocusInput(): void {\n this.component.shadowRoot?.querySelector(\"input\")?.focus();\n }\n\n onEnter(e: KeyboardEvent) {\n e.preventDefault();\n if (this.selectedItemIndex >= 0) {\n this.component.value = this._getItems()[this.selectedItemIndex].getAttribute(\"title\")?.replace(/<[^>]*>?/gm, \"\");\n }\n }\n\n onTab(e: KeyboardEvent) {\n if (this._tabEscapedFromPopover) {\n this._tabEscapedFromPopover = false;\n return;\n }\n if (this.lists?.length && this._getComponent().open) {\n this._shiftTabEscapedFromPopover = false;\n e.preventDefault();\n this.focusabledList = this.lists[0];\n this.selectedItemIndex = -1;\n this.focusabledList.focus();\n }\n }\n\n getFocusableItems(): Element[] {\n const items = this.focusabledList?.children ? this.focusabledList?.querySelectorAll<Button>(\"[ui5-button]\") : [];\n return Array.from(items);\n }\n\n onShiftTab(e: KeyboardEvent): void {\n if (this._shiftTabEscapedFromPopover) {\n this._shiftTabEscapedFromPopover = false;\n return;\n }\n const keepOpen = !!this.component.openSuggestionPopup;\n if (keepOpen && this.lists?.length && this._getComponent().open) {\n this._tabEscapedFromPopover = false;\n e.preventDefault();\n this.focusabledList = this.lists[this.lists.length - 1];\n this.focusabledList.focus();\n this.selectedItemIndex = -1;\n }\n }\n\n onEscape(e: KeyboardEvent) {\n e.preventDefault();\n this.close();\n this.onFocusInput();\n }\n\n onKeyTabList(e: KeyboardEvent) {\n const keepOpen = !!this.component.openSuggestionPopup;\n\n if (this.lists?.length === 2) {\n if (this.focusabledList === this.lists[1]) {\n e.preventDefault();\n if (keepOpen) {\n this.focusabledList = undefined;\n this.selectedItemIndex = -1;\n this._tabEscapedFromPopover = true;\n this.onFocusInput();\n return;\n }\n this.close();\n this.onFocusInput();\n return;\n }\n if (this.focusabledList === this.lists[0]) {\n e.preventDefault();\n this.focusabledList = this.lists[1];\n this.focusabledList.focus();\n this.selectedItemIndex = -1;\n }\n }\n if (this.lists?.length === 1) {\n e.preventDefault();\n if (keepOpen) {\n this.focusabledList = undefined;\n this.selectedItemIndex = -1;\n this._tabEscapedFromPopover = true;\n this.onFocusInput();\n return;\n }\n this.close();\n this.onFocusInput();\n }\n }\n\n onPrevKeyTabList(e: KeyboardEvent) {\n const keepOpen = !!this.component.openSuggestionPopup;\n e.preventDefault();\n if (this.lists?.length === 2) {\n if (this.focusabledList === this.lists[0]) {\n if (keepOpen) {\n this.focusabledList = undefined;\n this.selectedItemIndex = -1;\n this._shiftTabEscapedFromPopover = true;\n }\n this.onFocusInput();\n return;\n }\n if (this.focusabledList === this.lists[1]) {\n this.focusabledList = this.lists[0];\n this.focusabledList.focus();\n this.selectedItemIndex = -1;\n }\n }\n if (this.lists?.length === 1) {\n if (keepOpen) {\n this.focusabledList = undefined;\n this.selectedItemIndex = -1;\n this._shiftTabEscapedFromPopover = true;\n }\n this.onFocusInput();\n }\n }\n\n onKeyDown(e: KeyboardEvent) {\n e.preventDefault();\n const nextSelectedIdx = this.selectedItemIndex;\n const focusabledItems = this.getFocusableItems();\n const itemCount = focusabledItems.length - 1;\n\n if (this.lists?.length) {\n if (nextSelectedIdx === -1) {\n const button = focusabledItems[0] as UI5Element;\n\n button.setAttribute(\"aria-selected\", \"true\");\n button.focus();\n this.selectedItemIndex = 0;\n this.focusabledList?.setAttribute(\"aria-activedescendant\", button.id);\n return true;\n }\n if (nextSelectedIdx >= 0 && nextSelectedIdx !== itemCount) {\n const button = focusabledItems[nextSelectedIdx + 1] as UI5Element;\n\n focusabledItems[nextSelectedIdx].removeAttribute(\"aria-selected\");\n button.setAttribute(\"aria-selected\", \"true\");\n button.focus();\n this.selectedItemIndex = nextSelectedIdx + 1;\n this.focusabledList?.setAttribute(\"aria-activedescendant\", button.id);\n return true;\n }\n if (nextSelectedIdx === itemCount && this.focusabledList === this.lists[0] && this.lists.length === 2) {\n focusabledItems[nextSelectedIdx].removeAttribute(\"aria-selected\");\n this.focusabledList?.removeAttribute(\"aria-activedescendant\");\n this.focusabledList = this.lists[1];\n this.focusabledList.focus();\n this.selectedItemIndex = -1;\n return true;\n }\n }\n }\n\n onKeyUp(e: KeyboardEvent) {\n e.preventDefault();\n const focusabledItems = this.getFocusableItems();\n const itemCount = focusabledItems.length - 1;\n const previousSelectedIdx = this.selectedItemIndex;\n\n if (this.lists?.length) {\n if (previousSelectedIdx === -1) {\n const button = focusabledItems[0] as UI5Element;\n\n button.setAttribute(\"aria-selected\", \"true\");\n button.focus();\n this.selectedItemIndex = 0;\n this.focusabledList?.setAttribute(\"aria-activedescendant\", button.id);\n return true;\n }\n if (previousSelectedIdx > 0 && previousSelectedIdx <= itemCount) {\n const button = focusabledItems[previousSelectedIdx - 1] as UI5Element;\n\n focusabledItems[previousSelectedIdx].removeAttribute(\"aria-selected\");\n button.setAttribute(\"aria-selected\", \"true\");\n button.focus();\n this.selectedItemIndex = previousSelectedIdx - 1;\n this.focusabledList?.setAttribute(\"aria-activedescendant\", button.id);\n return true;\n }\n if (previousSelectedIdx === 0 && this.lists.length === 2 && this.focusabledList === this.lists[1]) {\n focusabledItems[previousSelectedIdx].removeAttribute(\"aria-selected\");\n this.focusabledList?.removeAttribute(\"aria-activedescendant\");\n this.focusabledList = this.lists[0];\n this.focusabledList.focus();\n this.selectedItemIndex = -1;\n return true;\n }\n }\n }\n\n handlePrevTabReset(e: KeyboardEvent) {\n if (this.focusabledList) {\n e.preventDefault();\n this.focusabledList.focus();\n }\n }\n\n static get dependencies() {\n return [\n Popover,\n Button,\n ];\n }\n}\n\nregisterFeature(\"SearchInputSuggestion\", Suggestion);\n\nexport default Suggestion;\n\nexport type {\n SuggestionComponent,\n SearchInputSuggestion,\n};\n"]}
1
+ {"version":3,"file":"SearchSuggestionsPopover.js","sourceRoot":"","sources":["../../src/features/SearchSuggestionsPopover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,MAAM,MAAM,mCAAmC,CAAC;AACvD,OAAO,OAAO,MAAM,oCAAoC,CAAC;AACzD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,2BAA2B,MAAM,sCAAsC,CAAC;AAc/E;;;;;;GAMG;AACH,MAAM,UAAU;IAQd,YAAY,SAA8B;QAF1C,kBAAa,GAAiC,IAAI,2BAA2B,EAAE,CAAC;QAG9E,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,UAAW,CAAC,aAAa,CAAU,sBAAsB,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,CAAC;IAED,IAAI;QACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,OAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,CAAgB;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAiB,gCAAgC,CAAC,IAAI,EAAE,CAAC;QACpG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,OAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,CAAgB;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAS,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IAEO,oBAAoB,CAAC,KAAgB,EAAE,SAAiB;QAC9D,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAe,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YACxF,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAE/B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,CAAgB;QACtB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC;YAC3C,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAE/B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,mBAAmB,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,CAAgB;QACvB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,CAAgB;QAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,EAAE,aAAa,CAAc,8CAA8C,CAAC,CAAC;QACpG,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,CAAgB;QAC/B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,YAAY;QACrB,OAAO;YACL,OAAO;YACP,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAED,eAAe,CAAC,uBAAuB,EAAE,UAAU,CAAC,CAAC;AAErD,eAAe,UAAU,CAAC","sourcesContent":["import type UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport { registerFeature } from \"@ui5/webcomponents-base/dist/FeaturesRegistry.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Popover from \"@ui5/webcomponents/dist/Popover.js\";\nimport isLetterKey from \"../utils/isLetterKeyPressed.js\";\nimport type { UDExListWithFirstLetterFocus } from \"../utils/ListWithFirstLetterFocus.js\";\nimport UDExFirstLetterFocusHandler from \"../utils/ListWithFirstLetterFocus.js\";\n\ninterface SuggestionComponent extends UI5Element {\n open: boolean;\n value?: string;\n suggestionItems?: string;\n openSuggestionPopup: boolean;\n}\n\ntype SearchInputSuggestion = {\n handleSelectItem: () => void;\n text: string;\n}\n\n/**\n * A class to manage the <code>Search</code suggestion items.\n *\n * @class\n * @private\n * @author SAP SE\n */\nclass Suggestion {\n component: SuggestionComponent;\n popover?: Popover | null;\n selectedItemIndex: number;\n focusabledList?: HTMLDivElement;\n lists?: Array<HTMLDivElement>;\n _focusHandler: UDExListWithFirstLetterFocus = new UDExFirstLetterFocusHandler();\n\n constructor(component: SuggestionComponent) {\n this.component = component;\n this._getSuggestionPopover();\n this.selectedItemIndex = -1;\n }\n\n _getComponent(): SuggestionComponent {\n return this.component;\n }\n\n _getSuggestionPopover() {\n if (this.popover) {\n return this.popover;\n }\n\n this.popover = this._getComponent().shadowRoot!.querySelector<Popover>(\"#suggestions-popover\");\n return this.popover;\n }\n\n _getItems() {\n return this.popover ? [...this.popover?.querySelectorAll(\"[ui5-button]\")] : [];\n }\n\n open(): void {\n this._getSuggestionPopover();\n this._getComponent().open = true;\n this.popover!.opener = this._getComponent();\n this.popover!.open = true;\n this.initLists();\n this._focusHandler._focusableListItems = this._getItems();\n this._focusHandler.resetMatchingItems();\n }\n\n handleKeyPress(e: KeyboardEvent): void {\n const key = e.key;\n if (isLetterKey(key)) {\n e.preventDefault();\n e.stopPropagation();\n this._focusHandler.focusMatchingListItem(key);\n }\n }\n\n initLists(): void {\n const list = this.popover?.querySelectorAll<HTMLDivElement>(\".udex-search-suggestions__list\") ?? [];\n this.lists = Array.from(list);\n }\n\n close(): void {\n this._getSuggestionPopover();\n this.getAllFocusableItems().forEach(item => item.removeAttribute(\"aria-selected\"));\n this._getComponent().open = false;\n this.popover!.open = false;\n this.selectedItemIndex = -1;\n }\n\n resetFocusState() {\n this.lists = [];\n this.selectedItemIndex = -1;\n this.focusabledList = undefined;\n }\n\n onFocusInput(): void {\n this.component.shadowRoot?.querySelector(\"input\")?.focus();\n }\n\n onEnter(e: KeyboardEvent) {\n e.preventDefault();\n if (this.selectedItemIndex >= 0) {\n this.component.value = this._getItems()[this.selectedItemIndex].getAttribute(\"title\")?.replace(/<[^>]*>?/gm, \"\");\n }\n }\n\n getAllFocusableItems(): Element[] {\n return Array.from(this.popover?.querySelectorAll<Button>(\"[ui5-button]\") ?? []);\n }\n\n private _updateItemSelection(items: Element[], nextIndex: number): void {\n if (this.selectedItemIndex >= 0 && this.selectedItemIndex < items.length) {\n items[this.selectedItemIndex].removeAttribute(\"aria-selected\");\n }\n const button = items[nextIndex] as UI5Element;\n button.setAttribute(\"aria-selected\", \"true\");\n button.focus();\n this.selectedItemIndex = nextIndex;\n }\n\n onKeyDown(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getAllFocusableItems();\n if (!items.length) {\n return;\n }\n\n const nextIndex = this.selectedItemIndex < 0 || this.selectedItemIndex >= items.length - 1\n ? 0\n : this.selectedItemIndex + 1;\n\n this._updateItemSelection(items, nextIndex);\n }\n\n onKeyUp(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getAllFocusableItems();\n if (!items.length) {\n return;\n }\n\n const prevIndex = this.selectedItemIndex <= 0\n ? items.length - 1\n : this.selectedItemIndex - 1;\n\n this._updateItemSelection(items, prevIndex);\n }\n\n onTab(): void {\n if (!this._getComponent().openSuggestionPopup) {\n this.close();\n }\n this.resetFocusState();\n }\n\n onEscape(e: KeyboardEvent): void {\n e.preventDefault();\n this.close();\n this.onFocusInput();\n }\n\n onKeyTabList(e: KeyboardEvent): void {\n e.preventDefault();\n this.close();\n this.resetFocusState();\n const shadow = this._getComponent().shadowRoot;\n const firstBtn = shadow?.querySelector<HTMLElement>(\"#reset-button, #voice-button, #submit-button\");\n if (firstBtn) {\n firstBtn.focus();\n } else {\n this.onFocusInput();\n }\n }\n\n onPrevKeyTabList(e: KeyboardEvent): void {\n e.preventDefault();\n this.close();\n this.resetFocusState();\n this.onFocusInput();\n }\n\n static get dependencies() {\n return [\n Popover,\n Button,\n ];\n }\n}\n\nregisterFeature(\"SearchInputSuggestion\", Suggestion);\n\nexport default Suggestion;\n\nexport type {\n SuggestionComponent,\n SearchInputSuggestion,\n};\n"]}
@@ -1 +1 @@
1
- {"COUNT":"Count","OF":"of","PAGINATION_PAGE":"Pagination page","SELECTED":"Selected","UNSELECTED":"Unselected","INDETERMINATE":"Indeterminate","EDIT_BUTTON":"Edit","DELETE_BUTTON":"Delete","BACK_TO_REGION_LIST":"back to region list","BUTTON_ARIA_TYPE_PRIMARY":"Primary","BUTTON_ARIA_TYPE_SECONDARY":"Secondary","BUTTON_ARIA_TYPE_TERTIARY":"Tertiary","BUTTON_ARIA_TYPE_WARNING":"Warning","BUTTON_ARIA_TYPE_POSITIVE":"Positive","BUTTON_ARIA_TYPE_NEGATIVE":"Negative","BUTTON_ARIA_EMPHASIZED":"Emphasized","BUTTON_ARIA_DEFAULT":"Default","BUTTON_ARIA_TRANSPARENT":"Transparent","BUTTON_ARIA_ATTENTION":"Attention","DATEPICKER_DATE_DESCRIPTION":"Date Input","TOGGLED":"Toggled","FIRST_PAGE":"First page","LAST_PAGE":"Last page","PREVIOUS_PAGE":"Previous page","NEXT_PAGE":"Next page","CURRENT_PAGE":"Current page","ACTIVATE_PAGE":"Activate page number","SUGGESTED_TEXT":"Suggested searches","ACCESSIBLE_NAME_RESET_ICON":"Clear","ACCESSIBLE_NAME_SEARCH_ICON":"Search","TOOLTIP_RESET_BUTTON":"Clear","TOOLTIP_VOICE_BUTTON":"Voice","TOOLTIP_SUBMIT_BUTTON":"Submit","LISTENING":"Listening","AVAILABLE_VALUES":"Available Values","RECOMMENDED_TEXT":"Recommended pages","EXPAND_ALL":"Expand All","COLLAPSE_ALL":"Collapse All","MORE":"More","ATTENTION_BADGE":"Attention badge","READ_MORE":"Read more","READ_LESS":"Read less","SHOW_MORE":"Show more","SHOW_LESS":"Show less","RATING_INDICATOR_TEXT":"Rating Indicator","RATING_INDICATOR_TOOLTIP_TEXT":"Rating","RATING_INDICATOR_ARIA_DESCRIPTION":"Required","TOTAL":"Total","RATING_COUNT_TITLE":"Rating","ARIA_LABEL_LIST_MULTISELECTABLE":"Contains Multi-Selectable Items","ARIA_LABEL_LIST_SELECTABLE":"Contains Selectable Items","SHOW_RESULTS":"Show Results","SHOW_HIDE_PASSWORD":"Show/Hide Password Button","RESET":"Reset","MESSAGE_STRIP_CLOSE_BUTTON":"Message Strip Close Button","MESSAGE_STRIP_INFORMATION":"Information Bar","MESSAGE_STRIP_SUCCESS":"Positive Bar","MESSAGE_STRIP_WARNING":"Warning Bar","MESSAGE_STRIP_ERROR":"Negative Bar","MESSAGE_STRIP_ACTION":"Action Bar","REVIEWS":"reviews","STARS":"stars","SELECT_OPTIONS":"Select Options","SELECT_ALL":"Select All","TEXTAREA_CHARACTERS_LEFT":"{0} characters remaining","VALUE_STATE_TYPE_ERROR":"Field State Error","VALUE_STATE_TYPE_WARNING":"Field State Warning","VALUE_STATE_TYPE_SUCCESS":"Field State Success","VALUE_STATE_TYPE_STANDARD":"Field State Standard","CAROUSEL_PREVIOUS_ARROW_TEXT":"Previous Page","CAROUSEL_NEXT_ARROW_TEXT":"Next Page","NO_MATCHES_FOUND":"No matches found.","BREADCRUMBS_ARIA_LABEL":"Breadcrumb Trail","BREADCRUMBS_OVERFLOW_ARIA_LABEL":"More","STEPINPUT_INC_ICON_TITLE":"Increase by","STEPINPUT_DEC_ICON_TITLE":"Decrease by","TABLE_NO_DATA_FOUND":"No data found","VALUE_STATE_ERROR":"Invalid entry","VALUE_STATE_WARNING":"Warning issued","VALUE_STATE_INFORMATION":"Informative entry","VALUE_STATE_SUCCESS":"Entry successfully validated","READ_ONLY":"Read only","LOGOUT":"Logout","SWITCH_ACCOUNT":"Switch account","BACK":"Back","OTHER_IDENTITIES":"Other identities","ADD_OR_REMOVE_ACCOUNT":"Add or remove account","COUNTRY_SELECT":"Select country","OVERVIEW":"Overview","CART":"Cart","COUNTRY_SELECTOR":"Country Selector","SUPPORT":"Support","PHONE_NUMBER":"Phone number","CONTACT_US":"Contact us","EMAIL":"Email","CHAT_WITH_US":"Chat with us","QUICK_LINKS":"Quick Links","TRENDING":"Trending","ABOUT_SAP":"About SAP","SITE_INFORMATION":"Site Information","SEE_COMPLETE_LIST":"Or see our complete list of","LOCAL_COUNTRY_NAMES":"local country numbers","COPYRIGHT":"© {0} SAP SE or an SAP affiliate company. All rights reserved.","AVATAR_TEXT":"Avatar","CALENDAR_ICON":"Open Calendar icon","LIST_ITEM_EDIT_ICON":"Edit list item entry","LIST_ITEM_DELETE_ICON":"Delete list item entry","BACK_BUTTON_LABEL":"return back","STATUS_BADGE_TEXT":"Status Badge","STATUS_BADGE_EDIT_TITLE":"Click to edit profile","STATUS_BADGE_INFORMATION_TITLE":"Click to open profile information","STATUS_BADGE_WARNING_TITLE":"Warning, potential risk with the profile","STATUS_BADGE_ERROR_TITLE":"There is an error with the profile","STATUS_BADGE_SUCCESS_TITLE":"Successfully verified profile","PROFILE":"Profile","MAIN_LINKS":"main links","OPENS_IN_A_NEW_WINDOW":"opens in a new window","TEXT_FIELD":"Text field","UPLOADING_FILE_STATUS_TEXT":"Uploading","TERMINATED_FILE_STATUS_TEXT":"Terminated","REMOVE_FILE_TEXT":"Remove file","UPLOAD_BUTTON_LABEL":"Upload file","COMPLETE_LIST_OF":"Complete list of","CALL_US_TODAY":"Call us today!","SEARCH":"Search","RESULT_RETURNED":"results returned.","SOCIAL_MEDIA_BUTTON":"Social Media Button","PROMO_TILE":"Promo Tile","PROMO_TILE_ICON":"Promo Tile Icon","BACK_TO_TOP":"Back to top","PLAY_BUTTON_ACCESSIBLE_NAME":"Start button to begin customer logos rotation","PAUSE_BUTTON_ACCESSIBLE_NAME":"Pause button to stop customer logos rotation","LOCATION":"Location","TOAST_CLOSE_ACCESSIBLE_NAME":"Close","DISABLED":"Disabled","EXPAND":"Expand","COLLAPSE":"Collapse"}
1
+ {"COUNT":"Count","OF":"of","PAGINATION_PAGE":"Pagination page","SELECTED":"Selected","UNSELECTED":"Unselected","INDETERMINATE":"Indeterminate","EDIT_BUTTON":"Edit","DELETE_BUTTON":"Delete","BACK_TO_REGION_LIST":"back to region list","BUTTON_ARIA_TYPE_PRIMARY":"Primary","BUTTON_ARIA_TYPE_SECONDARY":"Secondary","BUTTON_ARIA_TYPE_TERTIARY":"Tertiary","BUTTON_ARIA_TYPE_WARNING":"Warning","BUTTON_ARIA_TYPE_POSITIVE":"Positive","BUTTON_ARIA_TYPE_NEGATIVE":"Negative","BUTTON_ARIA_EMPHASIZED":"Emphasized","BUTTON_ARIA_DEFAULT":"Default","BUTTON_ARIA_TRANSPARENT":"Transparent","BUTTON_ARIA_ATTENTION":"Attention","DATEPICKER_DATE_DESCRIPTION":"Date Input","TOGGLED":"Toggled","FIRST_PAGE":"First page","LAST_PAGE":"Last page","PREVIOUS_PAGE":"Previous page","NEXT_PAGE":"Next page","CURRENT_PAGE":"Current page","ACTIVATE_PAGE":"Activate page number","SUGGESTED_TEXT":"Suggested searches","ACCESSIBLE_NAME_RESET_ICON":"Clear","ACCESSIBLE_NAME_SEARCH_ICON":"Search","TOOLTIP_RESET_BUTTON":"Clear","TOOLTIP_VOICE_BUTTON":"Voice","TOOLTIP_SUBMIT_BUTTON":"Submit","LISTENING":"Listening","AVAILABLE_VALUES":"Available Values","RECOMMENDED_TEXT":"Recommended pages","EXPAND_ALL":"Expand All","COLLAPSE_ALL":"Collapse All","MORE":"More","ATTENTION_BADGE":"Attention badge","READ_MORE":"Read more","READ_LESS":"Read less","SHOW_MORE":"Show more","SHOW_LESS":"Show less","RATING_INDICATOR_TEXT":"Rating Indicator","RATING_INDICATOR_TOOLTIP_TEXT":"Rating","RATING_INDICATOR_ARIA_DESCRIPTION":"Required","TOTAL":"Total","RATING_COUNT_TITLE":"Rating","ARIA_LABEL_LIST_MULTISELECTABLE":"Contains Multi-Selectable Items","ARIA_LABEL_LIST_SELECTABLE":"Contains Selectable Items","SHOW_RESULTS":"Show Results","SHOW_PASSWORD":"Show password","HIDE_PASSWORD":"Hide password","RESET":"Reset","MESSAGE_STRIP_CLOSE_BUTTON":"Message Strip Close Button","MESSAGE_STRIP_INFORMATION":"Information Bar","MESSAGE_STRIP_SUCCESS":"Positive Bar","MESSAGE_STRIP_WARNING":"Warning Bar","MESSAGE_STRIP_ERROR":"Negative Bar","MESSAGE_STRIP_ACTION":"Action Bar","REVIEWS":"reviews","STARS":"stars","SELECT_OPTIONS":"Select Options","SELECT_ALL":"Select All","TEXTAREA_CHARACTERS_LEFT":"{0} characters remaining","VALUE_STATE_TYPE_ERROR":"Field State Error","VALUE_STATE_TYPE_WARNING":"Field State Warning","VALUE_STATE_TYPE_SUCCESS":"Field State Success","VALUE_STATE_TYPE_STANDARD":"Field State Standard","CAROUSEL_PREVIOUS_ARROW_TEXT":"Previous Page","CAROUSEL_NEXT_ARROW_TEXT":"Next Page","NO_MATCHES_FOUND":"No matches found.","BREADCRUMBS_ARIA_LABEL":"Breadcrumb Trail","BREADCRUMBS_OVERFLOW_ARIA_LABEL":"More","STEPINPUT_INC_ICON_TITLE":"Increase by","STEPINPUT_DEC_ICON_TITLE":"Decrease by","TABLE_NO_DATA_FOUND":"No data found","VALUE_STATE_ERROR":"Invalid entry","VALUE_STATE_WARNING":"Warning issued","VALUE_STATE_INFORMATION":"Informative entry","VALUE_STATE_SUCCESS":"Entry successfully validated","READ_ONLY":"Read only","LOGOUT":"Logout","SWITCH_ACCOUNT":"Switch account","BACK":"Back","OTHER_IDENTITIES":"Other identities","ADD_OR_REMOVE_ACCOUNT":"Add or remove account","COUNTRY_SELECT":"Select country","OVERVIEW":"Overview","CART":"Cart","COUNTRY_SELECTOR":"Country Selector","SUPPORT":"Support","PHONE_NUMBER":"Phone number","CONTACT_US":"Contact us","EMAIL":"Email","CHAT_WITH_US":"Chat with us","QUICK_LINKS":"Quick Links","TRENDING":"Trending","ABOUT_SAP":"About SAP","SITE_INFORMATION":"Site Information","SEE_COMPLETE_LIST":"Or see our complete list of","LOCAL_COUNTRY_NAMES":"local country numbers","COPYRIGHT":"© {0} SAP SE or an SAP affiliate company. All rights reserved.","AVATAR_TEXT":"Avatar","CALENDAR_ICON":"Open Calendar icon","LIST_ITEM_EDIT_ICON":"Edit list item entry","LIST_ITEM_DELETE_ICON":"Delete list item entry","BACK_BUTTON_LABEL":"return back","STATUS_BADGE_TEXT":"Status Badge","STATUS_BADGE_EDIT_TITLE":"Click to edit profile","STATUS_BADGE_INFORMATION_TITLE":"Click to open profile information","STATUS_BADGE_WARNING_TITLE":"Warning, potential risk with the profile","STATUS_BADGE_ERROR_TITLE":"There is an error with the profile","STATUS_BADGE_SUCCESS_TITLE":"Successfully verified profile","PROFILE":"Profile","MAIN_LINKS":"main links","OPENS_IN_A_NEW_WINDOW":"opens in a new window","TEXT_FIELD":"Text field","UPLOADING_FILE_STATUS_TEXT":"Uploading","TERMINATED_FILE_STATUS_TEXT":"Terminated","REMOVE_FILE_TEXT":"Remove file","UPLOAD_BUTTON_LABEL":"Upload file","COMPLETE_LIST_OF":"Complete list of","CALL_US_TODAY":"Call us today!","SEARCH":"Search","RESULT_RETURNED":"results returned.","SOCIAL_MEDIA_BUTTON":"Social Media Button","PROMO_TILE":"Promo Tile","PROMO_TILE_ICON":"Promo Tile Icon","BACK_TO_TOP":"Back to top","PLAY_BUTTON_ACCESSIBLE_NAME":"Start button to begin customer logos rotation","PAUSE_BUTTON_ACCESSIBLE_NAME":"Pause button to stop customer logos rotation","LOCATION":"Location","TOAST_CLOSE_ACCESSIBLE_NAME":"Close","DISABLED":"Disabled","EXPAND":"Expand","COLLAPSE":"Collapse"}