@sapudex/web-components 2.40.0 → 2.42.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.
- package/config/wdio.conf.cjs +18 -2
- package/cypress/specs/Dropdown.cy.tsx +90 -0
- package/cypress/specs/MessageStrip.cy.tsx +77 -0
- package/cypress/specs/PasswordField.cy.tsx +37 -0
- package/cypress/specs/Search.cy.tsx +244 -138
- package/cypress/specs/SelectBox.cy.tsx +184 -5
- package/cypress/support/component-imports.instrumented.ts +2 -0
- package/cypress/support/component-imports.src.ts +2 -0
- package/cypress.config.ts +10 -0
- package/dist/Dropdown.d.ts +5 -0
- package/dist/Dropdown.js +56 -0
- package/dist/Dropdown.js.map +1 -1
- package/dist/List.d.ts +1 -6
- package/dist/List.js +2 -10
- package/dist/List.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +7 -0
- package/dist/MastheadCountrySelector.js +3 -0
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MessageStrip.d.ts +25 -0
- package/dist/MessageStrip.js +16 -4
- package/dist/MessageStrip.js.map +1 -1
- package/dist/PasswordField.d.ts +10 -0
- package/dist/PasswordField.js +17 -2
- package/dist/PasswordField.js.map +1 -1
- package/dist/PasswordFieldTemplate.js +1 -1
- package/dist/PasswordFieldTemplate.js.map +1 -1
- package/dist/Search.d.ts +1 -1
- package/dist/Search.js +13 -9
- package/dist/Search.js.map +1 -1
- package/dist/SearchTemplate.js +3 -3
- package/dist/SearchTemplate.js.map +1 -1
- package/dist/SearchableListBase.d.ts +1 -6
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +1 -1
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.d.ts +7 -1
- package/dist/SelectBase.js +114 -17
- package/dist/SelectBase.js.map +1 -1
- package/dist/TextField.d.ts +1 -1
- package/dist/TextField.js +2 -2
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldTemplate.js +1 -1
- package/dist/TextFieldTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-DAElWNvY.js → InputSuggestions-DVRXb_CJ.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-B2fGcGW7.js → ListItemStandardExpandableTextTemplate-DhmGlKzk.js} +1 -1
- package/dist/assets/{bundle.esm-DPVxY8xv.js → bundle.esm-CjF11YUZ.js} +233 -233
- package/dist/assets/messagebundle_en-BZqDcZHN.js +1 -0
- package/dist/assets/messagebundle_hu-CBV3ISbF.js +1 -0
- package/dist/assets/messagebundle_tr-DOeCmUdx.js +1 -0
- package/dist/assets/messagebundle_uk-GmdhsMsP.js +1 -0
- package/dist/assets/messagebundle_zh_CN-CHwH3F3-.js +1 -0
- package/dist/assets/messagebundle_zh_TW-FO0BCkub.js +1 -0
- package/dist/css/themes/MastheadCountrySelector.css +1 -1
- package/dist/css/themes/MastheadMenuItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/StatusMessage.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/css/themes/Toast.css +1 -1
- package/dist/css/themes/Wizard.css +1 -1
- package/dist/css/themes/WizardTab.css +1 -1
- package/dist/custom-elements-internal.json +114 -146
- package/dist/custom-elements.json +114 -114
- package/dist/features/SearchSuggestionsPopover.d.ts +6 -9
- package/dist/features/SearchSuggestionsPopover.js +47 -163
- package/dist/features/SearchSuggestionsPopover.js.map +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -2
- package/dist/generated/i18n/i18n-defaults.js +3 -2
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +6 -5
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
- package/dist/generated/themes/StatusMessage.css.d.ts +1 -1
- package/dist/generated/themes/StatusMessage.css.js +1 -1
- package/dist/generated/themes/StatusMessage.css.js.map +1 -1
- package/dist/generated/themes/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.css.js.map +1 -1
- package/dist/generated/themes/Toast.css.d.ts +1 -1
- package/dist/generated/themes/Toast.css.js +1 -1
- package/dist/generated/themes/Toast.css.js.map +1 -1
- package/dist/generated/themes/Wizard.css.d.ts +1 -1
- package/dist/generated/themes/Wizard.css.js +1 -1
- package/dist/generated/themes/Wizard.css.js.map +1 -1
- package/dist/generated/themes/WizardTab.css.d.ts +1 -1
- package/dist/generated/themes/WizardTab.css.js +1 -1
- package/dist/generated/themes/WizardTab.css.js.map +1 -1
- package/dist/messagebundle.properties +2 -1
- package/dist/messagebundle_en.properties +2 -1
- package/dist/messagebundle_hu.properties +125 -0
- package/dist/messagebundle_tr.properties +126 -0
- package/dist/messagebundle_uk.properties +128 -0
- package/dist/messagebundle_zh_CN.properties +126 -0
- package/dist/messagebundle_zh_TW.properties +126 -0
- package/dist/utils/sanitizeString.js +1 -4
- package/dist/utils/sanitizeString.js.map +1 -1
- package/dist/vscode.html-custom-data.json +30 -25
- package/dist/web-types.json +61 -41
- package/package.json +2 -2
- package/src/Dropdown.ts +62 -0
- package/src/List.ts +3 -18
- package/src/MastheadCountrySelector.hbs +2 -0
- package/src/MastheadCountrySelector.ts +9 -0
- package/src/MastheadMobileMenu.hbs +1 -0
- package/src/MessageStrip.ts +37 -4
- package/src/PasswordField.ts +24 -0
- package/src/PasswordFieldTemplate.tsx +2 -2
- package/src/Search.ts +13 -9
- package/src/SearchTemplate.tsx +0 -3
- package/src/SearchableListBase.ts +1 -6
- package/src/SearchableListBaseTemplate.tsx +0 -1
- package/src/SelectBase.ts +114 -19
- package/src/TextField.ts +1 -1
- package/src/TextFieldTemplate.tsx +1 -1
- package/src/features/SearchSuggestionsPopover.ts +55 -177
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +6 -5
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +1 -1
- package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
- package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/StatusMessage.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/generated/themes/Toast.css.ts +1 -1
- package/src/generated/themes/Wizard.css.ts +1 -1
- package/src/generated/themes/WizardTab.css.ts +1 -1
- package/src/i18n/messagebundle.properties +2 -1
- package/src/i18n/messagebundle_en.properties +2 -1
- package/src/i18n/messagebundle_hu.properties +125 -0
- package/src/i18n/messagebundle_tr.properties +126 -0
- package/src/i18n/messagebundle_uk.properties +128 -0
- package/src/i18n/messagebundle_zh_CN.properties +126 -0
- package/src/i18n/messagebundle_zh_TW.properties +126 -0
- package/src/themes/MastheadCountrySelector.css +5 -2
- package/src/themes/MastheadMenuItem.css +12 -4
- package/src/themes/MastheadProfileMenu.css +0 -5
- package/src/themes/StatusMessage.css +4 -4
- package/src/themes/TextField.css +3 -0
- package/src/themes/Toast.css +14 -2
- package/src/themes/Wizard.css +7 -0
- package/src/themes/WizardTab.css +23 -0
- package/src/utils/sanitizeString.ts +1 -4
- package/dist/assets/messagebundle_en-BxjFAY2S.js +0 -1
- package/dist/assets/messagebundle_hu-BEMbu-EE.js +0 -1
- package/dist/assets/messagebundle_tr-9FvYSV7d.js +0 -1
- package/dist/assets/messagebundle_uk-BgTRxken.js +0 -1
- package/dist/assets/messagebundle_zh_CN-BsCxQ-NE.js +0 -1
- package/dist/assets/messagebundle_zh_TW-Li9m-Dgo.js +0 -1
package/dist/web-types.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
|
|
3
3
|
"name": "@sapudex/web-components",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.42.0",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
@@ -971,11 +971,6 @@
|
|
|
971
971
|
"name": "show-search-input",
|
|
972
972
|
"description": "Defines if the search input is visible.",
|
|
973
973
|
"value": { "type": "boolean", "default": "false" }
|
|
974
|
-
},
|
|
975
|
-
{
|
|
976
|
-
"name": "tab-navigation-enabled",
|
|
977
|
-
"description": "Enables tab navigation for the list.",
|
|
978
|
-
"value": { "type": "boolean | undefined", "default": "\"\"" }
|
|
979
974
|
}
|
|
980
975
|
],
|
|
981
976
|
"slots": [
|
|
@@ -1085,11 +1080,6 @@
|
|
|
1085
1080
|
"name": "show-search-input",
|
|
1086
1081
|
"description": "Defines if the search input is visible.",
|
|
1087
1082
|
"value": { "type": "boolean" }
|
|
1088
|
-
},
|
|
1089
|
-
{
|
|
1090
|
-
"name": "tab-navigation-enabled",
|
|
1091
|
-
"description": "Enables tab navigation for the list.",
|
|
1092
|
-
"value": { "type": "boolean | undefined" }
|
|
1093
1083
|
}
|
|
1094
1084
|
],
|
|
1095
1085
|
"events": [
|
|
@@ -1789,11 +1779,6 @@
|
|
|
1789
1779
|
"description": "Defines if the search input is visible.",
|
|
1790
1780
|
"value": { "type": "boolean", "default": "false" }
|
|
1791
1781
|
},
|
|
1792
|
-
{
|
|
1793
|
-
"name": "tab-navigation-enabled",
|
|
1794
|
-
"description": "Enables tab navigation for the list.",
|
|
1795
|
-
"value": { "type": "boolean | undefined", "default": "\"\"" }
|
|
1796
|
-
},
|
|
1797
1782
|
{
|
|
1798
1783
|
"name": "trigger-accessible-role",
|
|
1799
1784
|
"description": "Allows setting a custom role for dropdown trigger.",
|
|
@@ -1985,11 +1970,6 @@
|
|
|
1985
1970
|
"description": "Defines if the search input is visible.",
|
|
1986
1971
|
"value": { "type": "boolean" }
|
|
1987
1972
|
},
|
|
1988
|
-
{
|
|
1989
|
-
"name": "tab-navigation-enabled",
|
|
1990
|
-
"description": "Enables tab navigation for the list.",
|
|
1991
|
-
"value": { "type": "boolean | undefined" }
|
|
1992
|
-
},
|
|
1993
1973
|
{
|
|
1994
1974
|
"name": "trigger-accessible-role",
|
|
1995
1975
|
"description": "Allows setting a custom role for dropdown trigger.",
|
|
@@ -3749,11 +3729,6 @@
|
|
|
3749
3729
|
"default": "\"SingleSelect\""
|
|
3750
3730
|
}
|
|
3751
3731
|
},
|
|
3752
|
-
{
|
|
3753
|
-
"name": "tab-navigation-enabled",
|
|
3754
|
-
"description": "Enables tab navigation for the list.",
|
|
3755
|
-
"value": { "type": "boolean | undefined", "default": "\"\"" }
|
|
3756
|
-
},
|
|
3757
3732
|
{
|
|
3758
3733
|
"name": "type",
|
|
3759
3734
|
"description": "Defines the type of the item.",
|
|
@@ -3811,11 +3786,6 @@
|
|
|
3811
3786
|
"type": "\"SingleSelect\" | \"MultiSelect\" | \"SingleContent\" | \"RadioGroup\""
|
|
3812
3787
|
}
|
|
3813
3788
|
},
|
|
3814
|
-
{
|
|
3815
|
-
"name": "tab-navigation-enabled",
|
|
3816
|
-
"description": "Enables tab navigation for the list.",
|
|
3817
|
-
"value": { "type": "boolean | undefined" }
|
|
3818
|
-
},
|
|
3819
3789
|
{
|
|
3820
3790
|
"name": "type",
|
|
3821
3791
|
"description": "Defines the type of the item.",
|
|
@@ -4683,6 +4653,11 @@
|
|
|
4683
4653
|
"description": "Defines title of the countries menu",
|
|
4684
4654
|
"value": { "type": "string", "default": "\"\"" }
|
|
4685
4655
|
},
|
|
4656
|
+
{
|
|
4657
|
+
"name": "hide-search",
|
|
4658
|
+
"description": "Hides the search field in the country list view.",
|
|
4659
|
+
"value": { "type": "boolean", "default": "false" }
|
|
4660
|
+
},
|
|
4686
4661
|
{
|
|
4687
4662
|
"name": "language-voice",
|
|
4688
4663
|
"description": "Defines the language voice of the search",
|
|
@@ -4740,6 +4715,11 @@
|
|
|
4740
4715
|
"description": "Defines title of the countries menu",
|
|
4741
4716
|
"value": { "type": "string" }
|
|
4742
4717
|
},
|
|
4718
|
+
{
|
|
4719
|
+
"name": "hide-search",
|
|
4720
|
+
"description": "Hides the search field in the country list view.",
|
|
4721
|
+
"value": { "type": "boolean" }
|
|
4722
|
+
},
|
|
4743
4723
|
{
|
|
4744
4724
|
"name": "language-voice",
|
|
4745
4725
|
"description": "Defines the language voice of the search",
|
|
@@ -6045,10 +6025,30 @@
|
|
|
6045
6025
|
"description": "Defines whether the MessageStrip renders close button.",
|
|
6046
6026
|
"value": { "type": "boolean" }
|
|
6047
6027
|
},
|
|
6028
|
+
{
|
|
6029
|
+
"name": "status-error-text",
|
|
6030
|
+
"description": "Defines custom status text for error type",
|
|
6031
|
+
"value": { "type": "string", "default": "\"\"" }
|
|
6032
|
+
},
|
|
6033
|
+
{
|
|
6034
|
+
"name": "status-information-text",
|
|
6035
|
+
"description": "Defines custom status text for information type",
|
|
6036
|
+
"value": { "type": "string", "default": "\"\"" }
|
|
6037
|
+
},
|
|
6038
|
+
{
|
|
6039
|
+
"name": "status-success-text",
|
|
6040
|
+
"description": "Defines custom status text for success type",
|
|
6041
|
+
"value": { "type": "string", "default": "\"\"" }
|
|
6042
|
+
},
|
|
6048
6043
|
{
|
|
6049
6044
|
"name": "status-type",
|
|
6050
6045
|
"description": "Defines the component Status Type.",
|
|
6051
6046
|
"value": { "type": "\"Text\" | \"None\" | \"Icon\"" }
|
|
6047
|
+
},
|
|
6048
|
+
{
|
|
6049
|
+
"name": "status-warning-text",
|
|
6050
|
+
"description": "Defines custom status text for warning type",
|
|
6051
|
+
"value": { "type": "string", "default": "\"\"" }
|
|
6052
6052
|
}
|
|
6053
6053
|
],
|
|
6054
6054
|
"slots": [
|
|
@@ -6082,10 +6082,30 @@
|
|
|
6082
6082
|
"description": "Defines whether the MessageStrip renders close button.",
|
|
6083
6083
|
"value": { "type": "boolean" }
|
|
6084
6084
|
},
|
|
6085
|
+
{
|
|
6086
|
+
"name": "status-error-text",
|
|
6087
|
+
"description": "Defines custom status text for error type",
|
|
6088
|
+
"value": { "type": "string" }
|
|
6089
|
+
},
|
|
6090
|
+
{
|
|
6091
|
+
"name": "status-information-text",
|
|
6092
|
+
"description": "Defines custom status text for information type",
|
|
6093
|
+
"value": { "type": "string" }
|
|
6094
|
+
},
|
|
6095
|
+
{
|
|
6096
|
+
"name": "status-success-text",
|
|
6097
|
+
"description": "Defines custom status text for success type",
|
|
6098
|
+
"value": { "type": "string" }
|
|
6099
|
+
},
|
|
6085
6100
|
{
|
|
6086
6101
|
"name": "status-type",
|
|
6087
6102
|
"description": "Defines the component Status Type.",
|
|
6088
6103
|
"value": { "type": "\"Text\" | \"None\" | \"Icon\"" }
|
|
6104
|
+
},
|
|
6105
|
+
{
|
|
6106
|
+
"name": "status-warning-text",
|
|
6107
|
+
"description": "Defines custom status text for warning type",
|
|
6108
|
+
"value": { "type": "string" }
|
|
6089
6109
|
}
|
|
6090
6110
|
],
|
|
6091
6111
|
"events": []
|
|
@@ -6216,6 +6236,11 @@
|
|
|
6216
6236
|
"description": "Defines the inner stored displayonly state.",
|
|
6217
6237
|
"value": { "type": "boolean", "default": "false" }
|
|
6218
6238
|
},
|
|
6239
|
+
{
|
|
6240
|
+
"name": "hide-button-tooltip",
|
|
6241
|
+
"description": "Defines the tooltip for the hide password button.",
|
|
6242
|
+
"value": { "type": "string", "default": "\"\"" }
|
|
6243
|
+
},
|
|
6219
6244
|
{
|
|
6220
6245
|
"name": "label",
|
|
6221
6246
|
"description": "Defines label text for the input field.",
|
|
@@ -6315,6 +6340,11 @@
|
|
|
6315
6340
|
"description": "Defines the inner stored displayonly state.",
|
|
6316
6341
|
"value": { "type": "boolean" }
|
|
6317
6342
|
},
|
|
6343
|
+
{
|
|
6344
|
+
"name": "hide-button-tooltip",
|
|
6345
|
+
"description": "Defines the tooltip for the hide password button.",
|
|
6346
|
+
"value": { "type": "string" }
|
|
6347
|
+
},
|
|
6318
6348
|
{
|
|
6319
6349
|
"name": "label",
|
|
6320
6350
|
"description": "Defines label text for the input field.",
|
|
@@ -7767,11 +7797,6 @@
|
|
|
7767
7797
|
"description": "Defines if the search input is visible.",
|
|
7768
7798
|
"value": { "type": "boolean", "default": "false" }
|
|
7769
7799
|
},
|
|
7770
|
-
{
|
|
7771
|
-
"name": "tab-navigation-enabled",
|
|
7772
|
-
"description": "Enables tab navigation for the list.",
|
|
7773
|
-
"value": { "type": "boolean | undefined", "default": "\"\"" }
|
|
7774
|
-
},
|
|
7775
7800
|
{
|
|
7776
7801
|
"name": "tooltip-placement",
|
|
7777
7802
|
"description": "Determines on which side of the component the Tooltip is displayed.",
|
|
@@ -7887,11 +7912,6 @@
|
|
|
7887
7912
|
"description": "Defines if the search input is visible.",
|
|
7888
7913
|
"value": { "type": "boolean" }
|
|
7889
7914
|
},
|
|
7890
|
-
{
|
|
7891
|
-
"name": "tab-navigation-enabled",
|
|
7892
|
-
"description": "Enables tab navigation for the list.",
|
|
7893
|
-
"value": { "type": "boolean | undefined" }
|
|
7894
|
-
},
|
|
7895
7915
|
{
|
|
7896
7916
|
"name": "tooltip-placement",
|
|
7897
7917
|
"description": "Determines on which side of the component the Tooltip is displayed.",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@sapudex/web-components",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.42.0",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
7
7
|
},
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@cypress/code-coverage": "^3.14.5",
|
|
51
51
|
"@ui5/cypress-ct-ui5-webc": "^0.0.4",
|
|
52
52
|
"@ui5/webcomponents-tools": "2.22.0",
|
|
53
|
-
"chromedriver": "
|
|
53
|
+
"chromedriver": "149.0.2",
|
|
54
54
|
"cross-env": "^7.0.3",
|
|
55
55
|
"cypress": "^14.3.3",
|
|
56
56
|
"cypress-real-events": "^1.14.0",
|
package/src/Dropdown.ts
CHANGED
|
@@ -7,6 +7,8 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
|
7
7
|
import DropdownCss from "./generated/themes/Dropdown.css.js";
|
|
8
8
|
import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
|
|
9
9
|
|
|
10
|
+
type HTMLElementWithDisabled = HTMLElement & { disabled?: boolean };
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
13
|
* @class
|
|
12
14
|
*
|
|
@@ -59,6 +61,66 @@ class UDExDropdown extends Popover {
|
|
|
59
61
|
content.style.maxHeight = this.height;
|
|
60
62
|
}
|
|
61
63
|
}
|
|
64
|
+
|
|
65
|
+
// Shift+Tab from first focusable element: close and return focus to opener
|
|
66
|
+
forwardToLast(): Promise<void> {
|
|
67
|
+
this.closePopup(false, false, true);
|
|
68
|
+
const openerEl = this.getOpenerHTMLElement(this.opener);
|
|
69
|
+
if (openerEl) {
|
|
70
|
+
openerEl.focus();
|
|
71
|
+
}
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Tab from last focusable element: close and move focus to next element after opener
|
|
76
|
+
forwardToFirst(): Promise<void> {
|
|
77
|
+
const openerHost = this._getOpenerHost();
|
|
78
|
+
this.closePopup(false, false, true);
|
|
79
|
+
if (openerHost) {
|
|
80
|
+
this._moveFocusAfter(openerHost);
|
|
81
|
+
}
|
|
82
|
+
return Promise.resolve();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private _getOpenerHost(): HTMLElement | null {
|
|
86
|
+
const opener = this.opener;
|
|
87
|
+
if (!opener) { return null; }
|
|
88
|
+
if (opener instanceof HTMLElement) { return opener; }
|
|
89
|
+
const root = this.getRootNode() as Document | ShadowRoot;
|
|
90
|
+
return (root as Document).getElementById?.(opener) ?? document.getElementById(opener);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private _moveFocusAfter(from: Element): void {
|
|
94
|
+
let node: Element | null = from;
|
|
95
|
+
while (node && node !== document.documentElement) {
|
|
96
|
+
let sibling = node.nextElementSibling;
|
|
97
|
+
while (sibling) {
|
|
98
|
+
const focusable = this._firstFocusableIn(sibling as HTMLElement);
|
|
99
|
+
if (focusable) {
|
|
100
|
+
focusable.focus();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
sibling = sibling.nextElementSibling;
|
|
104
|
+
}
|
|
105
|
+
node = node.parentElement;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private _firstFocusableIn(el: HTMLElement): HTMLElement | null {
|
|
110
|
+
if (!el) { return null; }
|
|
111
|
+
if (
|
|
112
|
+
el.tabIndex >= 0
|
|
113
|
+
&& !el.hidden
|
|
114
|
+
&& !(el as HTMLElementWithDisabled).disabled
|
|
115
|
+
&& (!!el.offsetParent || el.matches("body"))
|
|
116
|
+
) {
|
|
117
|
+
return el;
|
|
118
|
+
}
|
|
119
|
+
return Array.from(el.children).reduce<HTMLElement | null>(
|
|
120
|
+
(found, child) => found ?? this._firstFocusableIn(child as HTMLElement),
|
|
121
|
+
null,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
62
124
|
}
|
|
63
125
|
|
|
64
126
|
UDExDropdown.define();
|
package/src/List.ts
CHANGED
|
@@ -146,12 +146,7 @@ class UDExList extends UI5Element {
|
|
|
146
146
|
@property({ type: String })
|
|
147
147
|
itemIcon: string = "";
|
|
148
148
|
|
|
149
|
-
/**
|
|
150
|
-
* Enables tab navigation for the list.
|
|
151
|
-
*
|
|
152
|
-
* @default ""
|
|
153
|
-
* @public
|
|
154
|
-
*/
|
|
149
|
+
/** @deprecated Tab keyboard navigation is no longer allowed. */
|
|
155
150
|
@property({ type: Boolean })
|
|
156
151
|
tabNavigationEnabled?: boolean;
|
|
157
152
|
|
|
@@ -190,10 +185,6 @@ class UDExList extends UI5Element {
|
|
|
190
185
|
}
|
|
191
186
|
|
|
192
187
|
handleKeyDown(e: KeyboardEvent): void {
|
|
193
|
-
if (this.tabNavigationEnabled) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
188
|
if (isRight(e)) {
|
|
198
189
|
this.handleArrowRight(e);
|
|
199
190
|
}
|
|
@@ -398,10 +389,8 @@ class UDExList extends UI5Element {
|
|
|
398
389
|
clickedItem.selected = true;
|
|
399
390
|
}
|
|
400
391
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
clickedItem._tabIndex = "0";
|
|
404
|
-
}
|
|
392
|
+
this.resetTabIndexes();
|
|
393
|
+
clickedItem._tabIndex = "0";
|
|
405
394
|
|
|
406
395
|
this.fireDecoratorEvent("selection-change", {
|
|
407
396
|
listItems: this.getItemsFromList(),
|
|
@@ -487,10 +476,6 @@ class UDExList extends UI5Element {
|
|
|
487
476
|
}
|
|
488
477
|
|
|
489
478
|
getTabIndex(index: number, item: UDExListItemBase): string {
|
|
490
|
-
if (this.tabNavigationEnabled) {
|
|
491
|
-
return "0";
|
|
492
|
-
}
|
|
493
|
-
|
|
494
479
|
const isFirstItem = this.modeSelected && index === 0;
|
|
495
480
|
const isFirstItemInGroupList = this.isGroupList && index === 1;
|
|
496
481
|
const listGroupHeader = item.closest("[udex-list-group-header]") as UDExListGroupHeader;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
icon-start>
|
|
15
15
|
</udex-masthead-menu-item>
|
|
16
16
|
{{/unless}}
|
|
17
|
+
{{#unless hideSearch}}
|
|
17
18
|
<udex-search
|
|
18
19
|
class="udex-masthead-country-selector__search"
|
|
19
20
|
@ui5-handle-value-search="{{handleSearch}}"
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
show-submit-button>
|
|
28
29
|
</udex-search>
|
|
29
30
|
<span aria-live="polite" aria-atomic="true" class="hidden">{{_accSearchResultInfo}}</span>
|
|
31
|
+
{{/unless}}
|
|
30
32
|
<div class="udex-masthead-country-selector__list-container">
|
|
31
33
|
<div class="udex-masthead-country-selector__list-wrap" @scroll={{this.handleCountryListShadowVisible}}>
|
|
32
34
|
<ul class="udex-masthead-country-selector__list udex-masthead-country-selector__list_countries" role="menu">
|
|
@@ -192,6 +192,15 @@ class UDExMastheadCountrySelector extends UI5Element {
|
|
|
192
192
|
@property({ type: Boolean })
|
|
193
193
|
showSearchVoiceButton!: boolean;
|
|
194
194
|
|
|
195
|
+
/**
|
|
196
|
+
* Hides the search field in the country list view.
|
|
197
|
+
*
|
|
198
|
+
* @default false
|
|
199
|
+
* @public
|
|
200
|
+
*/
|
|
201
|
+
@property({ type: Boolean })
|
|
202
|
+
hideSearch!: boolean;
|
|
203
|
+
|
|
195
204
|
/**
|
|
196
205
|
* Defines the language voice of the search
|
|
197
206
|
*
|
package/src/MessageStrip.ts
CHANGED
|
@@ -64,6 +64,39 @@ class UDExMessageStrip extends MessageStrip {
|
|
|
64
64
|
@property({ type: Boolean })
|
|
65
65
|
hideCloseButton!: boolean;
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Defines custom status text for information type
|
|
69
|
+
*
|
|
70
|
+
* @default ""
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
@property()
|
|
74
|
+
statusInformationText!: string;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Defines custom status text for success type
|
|
78
|
+
* @default ""
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
81
|
+
@property()
|
|
82
|
+
statusSuccessText!: string;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Defines custom status text for error type
|
|
86
|
+
* @default ""
|
|
87
|
+
* @public
|
|
88
|
+
*/
|
|
89
|
+
@property()
|
|
90
|
+
statusErrorText!: string;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Defines custom status text for warning type
|
|
94
|
+
* @default ""
|
|
95
|
+
* @public
|
|
96
|
+
*/
|
|
97
|
+
@property()
|
|
98
|
+
statusWarningText!: string;
|
|
99
|
+
|
|
67
100
|
/**
|
|
68
101
|
* Defines accessible name for close icon
|
|
69
102
|
*
|
|
@@ -105,10 +138,10 @@ class UDExMessageStrip extends MessageStrip {
|
|
|
105
138
|
|
|
106
139
|
textStatusTypeMapping(): Record<string, string> {
|
|
107
140
|
return {
|
|
108
|
-
[UDExMessageStripDesign.Information]: this.getTranslation(MESSAGE_STRIP_INFORMATION),
|
|
109
|
-
[UDExMessageStripDesign.Positive]: this.getTranslation(MESSAGE_STRIP_SUCCESS),
|
|
110
|
-
[UDExMessageStripDesign.Negative]: this.getTranslation(MESSAGE_STRIP_ERROR),
|
|
111
|
-
[UDExMessageStripDesign.Warning]: this.getTranslation(MESSAGE_STRIP_WARNING),
|
|
141
|
+
[UDExMessageStripDesign.Information]: this.statusInformationText || this.getTranslation(MESSAGE_STRIP_INFORMATION),
|
|
142
|
+
[UDExMessageStripDesign.Positive]: this.statusSuccessText || this.getTranslation(MESSAGE_STRIP_SUCCESS),
|
|
143
|
+
[UDExMessageStripDesign.Negative]: this.statusErrorText || this.getTranslation(MESSAGE_STRIP_ERROR),
|
|
144
|
+
[UDExMessageStripDesign.Warning]: this.statusWarningText || this.getTranslation(MESSAGE_STRIP_WARNING),
|
|
112
145
|
[UDExMessageStripDesign.Action]: this.getTranslation(MESSAGE_STRIP_ACTION),
|
|
113
146
|
};
|
|
114
147
|
}
|
package/src/PasswordField.ts
CHANGED
|
@@ -8,6 +8,8 @@ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
|
8
8
|
import UDExTextField from "./TextField.js";
|
|
9
9
|
import UDExValueState from "./types/common.js";
|
|
10
10
|
import PasswordFieldTemplate from "./PasswordFieldTemplate.js";
|
|
11
|
+
import { SHOW_PASSWORD, HIDE_PASSWORD } from "./generated/i18n/i18n-defaults.js";
|
|
12
|
+
import translate from "./utils/translate.js";
|
|
11
13
|
|
|
12
14
|
export enum UDExInputType {
|
|
13
15
|
Password = "Password",
|
|
@@ -233,6 +235,16 @@ class UDExPasswordField extends UI5Element {
|
|
|
233
235
|
@property({ type: String })
|
|
234
236
|
showButtonTooltip!: string;
|
|
235
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Defines the tooltip for the hide password button.
|
|
240
|
+
*
|
|
241
|
+
* @default ""
|
|
242
|
+
* @public
|
|
243
|
+
*/
|
|
244
|
+
|
|
245
|
+
@property({ type: String })
|
|
246
|
+
hideButtonTooltip!: string;
|
|
247
|
+
|
|
236
248
|
/**
|
|
237
249
|
* Defines the inner stored readonly state.
|
|
238
250
|
*
|
|
@@ -309,6 +321,18 @@ class UDExPasswordField extends UI5Element {
|
|
|
309
321
|
get iconButton(): string | undefined {
|
|
310
322
|
return this.renderShowButton ? this.icon : undefined;
|
|
311
323
|
}
|
|
324
|
+
|
|
325
|
+
get activeButtonTooltip(): string {
|
|
326
|
+
return this.passwordVisible ? this.hideButtonTooltipText : this.showButtonTooltipText;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
get hideButtonTooltipText(): string {
|
|
330
|
+
return this.hideButtonTooltip || translate(UDExPasswordField, HIDE_PASSWORD);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
get showButtonTooltipText(): string {
|
|
334
|
+
return this.showButtonTooltip || translate(UDExPasswordField, SHOW_PASSWORD);
|
|
335
|
+
}
|
|
312
336
|
}
|
|
313
337
|
|
|
314
338
|
UDExPasswordField.define();
|
|
@@ -19,8 +19,8 @@ export default function PasswordFieldTemplate(this: UDExPasswordField) {
|
|
|
19
19
|
supporting-text={this.supportingText}
|
|
20
20
|
accessible-name={this.accessibleName}
|
|
21
21
|
accessible-name-ref={this.accessibleNameRef}
|
|
22
|
-
accessible-icon-name={this.
|
|
23
|
-
|
|
22
|
+
accessible-icon-name={this.activeButtonTooltip}
|
|
23
|
+
button-tooltip={this.activeButtonTooltip}
|
|
24
24
|
onui5-input={this.handleInput}
|
|
25
25
|
onui5-change={this.handleChange}
|
|
26
26
|
onui5-blur={this.handleBlur}
|
package/src/Search.ts
CHANGED
|
@@ -1005,7 +1005,7 @@ class UDExSearch extends UI5Element {
|
|
|
1005
1005
|
e.stopPropagation();
|
|
1006
1006
|
this.handleEnterKey(e);
|
|
1007
1007
|
this.handleTabKey(e);
|
|
1008
|
-
this.
|
|
1008
|
+
this.handleDownKey(e);
|
|
1009
1009
|
this.handleEscapeKey(e);
|
|
1010
1010
|
this.fireDecoratorEvent("search-keydown", { e });
|
|
1011
1011
|
};
|
|
@@ -1022,14 +1022,21 @@ class UDExSearch extends UI5Element {
|
|
|
1022
1022
|
}
|
|
1023
1023
|
|
|
1024
1024
|
handleTabKey(e: KeyboardEvent) {
|
|
1025
|
-
if (
|
|
1026
|
-
|
|
1025
|
+
if (!this.open || this.openSuggestionPopup) {
|
|
1026
|
+
return;
|
|
1027
|
+
}
|
|
1028
|
+
if (isTabNext(e) || isTabPrevious(e)) {
|
|
1029
|
+
this.onClosePopover();
|
|
1027
1030
|
}
|
|
1028
1031
|
}
|
|
1029
1032
|
|
|
1030
|
-
|
|
1031
|
-
if (
|
|
1032
|
-
|
|
1033
|
+
handleDownKey(e: KeyboardEvent) {
|
|
1034
|
+
if (isDown(e) && this.showSuggestedPopover) {
|
|
1035
|
+
e.preventDefault();
|
|
1036
|
+
if (!this.open) {
|
|
1037
|
+
this.onOpenPopover();
|
|
1038
|
+
}
|
|
1039
|
+
this.Suggestion?.onKeyDown(e);
|
|
1033
1040
|
}
|
|
1034
1041
|
}
|
|
1035
1042
|
|
|
@@ -1104,9 +1111,6 @@ class UDExSearch extends UI5Element {
|
|
|
1104
1111
|
}
|
|
1105
1112
|
|
|
1106
1113
|
handleKeyDownReset(e: KeyboardEvent) {
|
|
1107
|
-
if (isTabPrevious(e) && this.open) {
|
|
1108
|
-
this.Suggestion?.handlePrevTabReset(e);
|
|
1109
|
-
}
|
|
1110
1114
|
if (isEnter(e) || isSpace(e)) {
|
|
1111
1115
|
e.preventDefault();
|
|
1112
1116
|
e.stopPropagation();
|
package/src/SearchTemplate.tsx
CHANGED
|
@@ -232,7 +232,6 @@ function renderSearchSuggestionPopover(this: UDExSearch) {
|
|
|
232
232
|
style={this.popoverStyles}
|
|
233
233
|
id={this.getSuggestionsPopoverId}
|
|
234
234
|
aria-orientation="vertical"
|
|
235
|
-
accessible-role="Dialog"
|
|
236
235
|
onKeyDown={this.handleKeyPressSuggestionList}
|
|
237
236
|
accessible-name={this.suggestionsAccessibleName}
|
|
238
237
|
>
|
|
@@ -277,7 +276,6 @@ function renderSearchSuggestionPopoverResultsSuggestedList(this: UDExSearch) {
|
|
|
277
276
|
<div class="udex-search-suggestions__list"
|
|
278
277
|
role="listbox"
|
|
279
278
|
aria-labelledby="suggested-heading"
|
|
280
|
-
tabindex={0}
|
|
281
279
|
onKeyDown={this.handleKeyDownPopover}
|
|
282
280
|
>
|
|
283
281
|
{
|
|
@@ -317,7 +315,6 @@ function renderSearchSuggestionPopoverResultsRecommendedList(this: UDExSearch) {
|
|
|
317
315
|
<div class="udex-search-suggestions__list"
|
|
318
316
|
role="listbox"
|
|
319
317
|
aria-labelledby="recommended-heading"
|
|
320
|
-
tabindex={0}
|
|
321
318
|
onKeyDown={this.handleKeyDownPopover}
|
|
322
319
|
>
|
|
323
320
|
{
|
|
@@ -125,12 +125,7 @@ export type UDExSearchableListBaseEvents = {
|
|
|
125
125
|
|
|
126
126
|
class UDExSearchableListBase extends UI5Element {
|
|
127
127
|
eventDetails!: UDExSearchableListBaseEvents;
|
|
128
|
-
/**
|
|
129
|
-
* Enables tab navigation for the list.
|
|
130
|
-
*
|
|
131
|
-
* @default ""
|
|
132
|
-
* @public
|
|
133
|
-
*/
|
|
128
|
+
/** @deprecated Tab keyboard navigation is no longer allowed. */
|
|
134
129
|
@property({ type: Boolean })
|
|
135
130
|
tabNavigationEnabled?: boolean;
|
|
136
131
|
|
|
@@ -50,7 +50,6 @@ export default function SearchableListBaseTemplate(this: UDExSearchableListBase)
|
|
|
50
50
|
role={this.roleForGroupList as AriaRole}
|
|
51
51
|
accessible-role={this.accessibleRoleForList}
|
|
52
52
|
class="udex-filter-menu__list"
|
|
53
|
-
tab-navigation-enabled={this.tabNavigationEnabled}
|
|
54
53
|
controlled={this.isControlled}
|
|
55
54
|
mode={this.mode}>
|
|
56
55
|
{this._filteredItems.map((processedItem, index) => (
|