@lion/ui 0.7.3 → 0.7.4
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/components/combobox/src/LionCombobox.js +35 -22
- package/components/combobox/test/lion-combobox.test.js +109 -66
- package/components/form-core/src/FormControlMixin.js +0 -9
- package/components/form-core/src/localizeNamespaceLoader.js +75 -0
- package/components/form-core/src/registration/FormRegisteringMixin.js +28 -0
- package/components/form-core/src/validate/LionValidationFeedback.js +36 -2
- package/components/form-core/test/validate/lion-validation-feedback.test.js +30 -2
- package/components/form-core/test-suites/FormRegistrationMixins.suite.js +17 -0
- package/components/form-core/test-suites/ValidateMixin.suite.js +1 -1
- package/components/form-core/translations/bg-BG.js +5 -0
- package/components/form-core/translations/bg.js +6 -0
- package/components/form-core/translations/cs-CZ.js +5 -0
- package/components/form-core/translations/cs.js +6 -0
- package/components/form-core/translations/de-DE.js +5 -0
- package/components/form-core/translations/de.js +6 -0
- package/components/form-core/translations/en-AU.js +5 -0
- package/components/form-core/translations/en-GB.js +5 -0
- package/components/form-core/translations/en-US.js +5 -0
- package/components/form-core/translations/en.js +6 -0
- package/components/form-core/translations/es-ES.js +5 -0
- package/components/form-core/translations/es.js +6 -0
- package/components/form-core/translations/fr-BE.js +5 -0
- package/components/form-core/translations/fr-FR.js +5 -0
- package/components/form-core/translations/fr.js +6 -0
- package/components/form-core/translations/hu-HU.js +5 -0
- package/components/form-core/translations/hu.js +6 -0
- package/components/form-core/translations/it-IT.js +5 -0
- package/components/form-core/translations/it.js +6 -0
- package/components/form-core/translations/nl-BE.js +5 -0
- package/components/form-core/translations/nl-NL.js +5 -0
- package/components/form-core/translations/nl.js +6 -0
- package/components/form-core/translations/pl-PL.js +5 -0
- package/components/form-core/translations/pl.js +6 -0
- package/components/form-core/translations/ro-RO.js +5 -0
- package/components/form-core/translations/ro.js +6 -0
- package/components/form-core/translations/ru-RU.js +5 -0
- package/components/form-core/translations/ru.js +6 -0
- package/components/form-core/translations/sk-SK.js +5 -0
- package/components/form-core/translations/sk.js +6 -0
- package/components/form-core/translations/uk-UA.js +5 -0
- package/components/form-core/translations/uk.js +6 -0
- package/components/form-core/translations/zh.js +6 -0
- package/components/form-core/types/FormControlMixinTypes.ts +0 -4
- package/components/form-core/types/registration/FormRegisteringMixinTypes.ts +17 -4
- package/components/input-amount/test/lion-input-amount.test.js +3 -0
- package/components/input-file/src/LionInputFile.js +88 -30
- package/components/input-file/test/lion-input-file.test.js +102 -6
- package/components/input-file/test/lion-selected-file-list.test.js +2 -1
- package/components/input-file/translations/bg.js +3 -0
- package/components/input-file/translations/cs.js +3 -0
- package/components/input-file/translations/de.js +3 -0
- package/components/input-file/translations/en.js +3 -0
- package/components/input-file/translations/es.js +3 -0
- package/components/input-file/translations/fr.js +3 -0
- package/components/input-file/translations/hu.js +3 -0
- package/components/input-file/translations/it.js +3 -0
- package/components/input-file/translations/nl.js +3 -0
- package/components/input-file/translations/pl.js +3 -0
- package/components/input-file/translations/ro.js +3 -0
- package/components/input-file/translations/ru.js +3 -0
- package/components/input-file/translations/sk.js +3 -0
- package/components/input-file/translations/uk.js +3 -0
- package/components/input-file/translations/zh.js +3 -0
- package/components/overlays/src/OverlayMixin.js +8 -1
- package/components/switch/src/LionSwitch.js +10 -0
- package/components/tabs/src/LionTabs.js +10 -0
- package/components/tabs/test/lion-tabs.test.js +49 -38
- package/custom-elements.json +85400 -74702
- package/dist-types/components/combobox/src/LionCombobox.d.ts +12 -8
- package/dist-types/components/combobox/src/LionCombobox.d.ts.map +1 -1
- package/dist-types/components/form-core/src/FormControlMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/src/LionField.d.ts +1 -1
- package/dist-types/components/form-core/src/localizeNamespaceLoader.d.ts +2 -0
- package/dist-types/components/form-core/src/localizeNamespaceLoader.d.ts.map +1 -0
- package/dist-types/components/form-core/src/registration/FormRegisteringMixin.d.ts.map +1 -1
- package/dist-types/components/form-core/src/validate/LionValidationFeedback.d.ts +5 -6
- package/dist-types/components/form-core/src/validate/LionValidationFeedback.d.ts.map +1 -1
- package/dist-types/components/form-core/test-suites/FormRegistrationMixins.suite.d.ts.map +1 -1
- package/dist-types/components/form-core/translations/bg-BG.d.ts +8 -0
- package/dist-types/components/form-core/translations/bg-BG.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/bg.d.ts +8 -0
- package/dist-types/components/form-core/translations/bg.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/cs-CZ.d.ts +8 -0
- package/dist-types/components/form-core/translations/cs-CZ.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/cs.d.ts +8 -0
- package/dist-types/components/form-core/translations/cs.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/de-DE.d.ts +8 -0
- package/dist-types/components/form-core/translations/de-DE.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/de.d.ts +8 -0
- package/dist-types/components/form-core/translations/de.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/en-AU.d.ts +8 -0
- package/dist-types/components/form-core/translations/en-AU.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/en-GB.d.ts +8 -0
- package/dist-types/components/form-core/translations/en-GB.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/en-US.d.ts +8 -0
- package/dist-types/components/form-core/translations/en-US.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/en.d.ts +8 -0
- package/dist-types/components/form-core/translations/en.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/es-ES.d.ts +8 -0
- package/dist-types/components/form-core/translations/es-ES.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/es.d.ts +8 -0
- package/dist-types/components/form-core/translations/es.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/fr-BE.d.ts +8 -0
- package/dist-types/components/form-core/translations/fr-BE.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/fr-FR.d.ts +8 -0
- package/dist-types/components/form-core/translations/fr-FR.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/fr.d.ts +8 -0
- package/dist-types/components/form-core/translations/fr.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/hu-HU.d.ts +8 -0
- package/dist-types/components/form-core/translations/hu-HU.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/hu.d.ts +8 -0
- package/dist-types/components/form-core/translations/hu.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/it-IT.d.ts +8 -0
- package/dist-types/components/form-core/translations/it-IT.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/it.d.ts +8 -0
- package/dist-types/components/form-core/translations/it.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/nl-BE.d.ts +8 -0
- package/dist-types/components/form-core/translations/nl-BE.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/nl-NL.d.ts +8 -0
- package/dist-types/components/form-core/translations/nl-NL.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/nl.d.ts +8 -0
- package/dist-types/components/form-core/translations/nl.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/pl-PL.d.ts +8 -0
- package/dist-types/components/form-core/translations/pl-PL.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/pl.d.ts +8 -0
- package/dist-types/components/form-core/translations/pl.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/ro-RO.d.ts +8 -0
- package/dist-types/components/form-core/translations/ro-RO.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/ro.d.ts +8 -0
- package/dist-types/components/form-core/translations/ro.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/ru-RU.d.ts +8 -0
- package/dist-types/components/form-core/translations/ru-RU.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/ru.d.ts +8 -0
- package/dist-types/components/form-core/translations/ru.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/sk-SK.d.ts +8 -0
- package/dist-types/components/form-core/translations/sk-SK.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/sk.d.ts +8 -0
- package/dist-types/components/form-core/translations/sk.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/uk-UA.d.ts +8 -0
- package/dist-types/components/form-core/translations/uk-UA.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/uk.d.ts +8 -0
- package/dist-types/components/form-core/translations/uk.d.ts.map +1 -0
- package/dist-types/components/form-core/translations/zh.d.ts +8 -0
- package/dist-types/components/form-core/translations/zh.d.ts.map +1 -0
- package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts +0 -4
- package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts +14 -4
- package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts.map +1 -1
- package/dist-types/components/input-file/src/LionInputFile.d.ts +12 -6
- package/dist-types/components/input-file/src/LionInputFile.d.ts.map +1 -1
- package/dist-types/components/input-file/translations/bg-BG.d.ts +3 -0
- package/dist-types/components/input-file/translations/bg.d.ts +3 -0
- package/dist-types/components/input-file/translations/cs-CZ.d.ts +3 -0
- package/dist-types/components/input-file/translations/cs.d.ts +3 -0
- package/dist-types/components/input-file/translations/de-DE.d.ts +3 -0
- package/dist-types/components/input-file/translations/de.d.ts +3 -0
- package/dist-types/components/input-file/translations/en-AU.d.ts +3 -0
- package/dist-types/components/input-file/translations/en-GB.d.ts +3 -0
- package/dist-types/components/input-file/translations/en-PH.d.ts +3 -0
- package/dist-types/components/input-file/translations/en-US.d.ts +3 -0
- package/dist-types/components/input-file/translations/en.d.ts +3 -0
- package/dist-types/components/input-file/translations/es-ES.d.ts +3 -0
- package/dist-types/components/input-file/translations/es.d.ts +3 -0
- package/dist-types/components/input-file/translations/fr-BE.d.ts +3 -0
- package/dist-types/components/input-file/translations/fr-FR.d.ts +3 -0
- package/dist-types/components/input-file/translations/fr.d.ts +3 -0
- package/dist-types/components/input-file/translations/hu-HU.d.ts +3 -0
- package/dist-types/components/input-file/translations/hu.d.ts +3 -0
- package/dist-types/components/input-file/translations/it-IT.d.ts +3 -0
- package/dist-types/components/input-file/translations/it.d.ts +3 -0
- package/dist-types/components/input-file/translations/nl-BE.d.ts +3 -0
- package/dist-types/components/input-file/translations/nl-NL.d.ts +3 -0
- package/dist-types/components/input-file/translations/nl.d.ts +3 -0
- package/dist-types/components/input-file/translations/pl-PL.d.ts +3 -0
- package/dist-types/components/input-file/translations/pl.d.ts +3 -0
- package/dist-types/components/input-file/translations/ro-RO.d.ts +3 -0
- package/dist-types/components/input-file/translations/ro.d.ts +3 -0
- package/dist-types/components/input-file/translations/ru-RU.d.ts +3 -0
- package/dist-types/components/input-file/translations/ru.d.ts +3 -0
- package/dist-types/components/input-file/translations/sk-SK.d.ts +3 -0
- package/dist-types/components/input-file/translations/sk.d.ts +3 -0
- package/dist-types/components/input-file/translations/uk-UA.d.ts +3 -0
- package/dist-types/components/input-file/translations/uk.d.ts +3 -0
- package/dist-types/components/input-file/translations/zh-CN.d.ts +3 -0
- package/dist-types/components/input-file/translations/zh.d.ts +3 -0
- package/dist-types/components/listbox/src/LionOption.d.ts +1 -1
- package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
- package/dist-types/components/switch/src/LionSwitch.d.ts.map +1 -1
- package/dist-types/components/tabs/src/LionTabs.d.ts.map +1 -1
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/accordion/api-table.md +31 -0
- package/docs/components/button/api-table.md +104 -0
- package/docs/components/calendar/api-table.md +44 -0
- package/docs/components/checkbox-group/api-table.md +564 -0
- package/docs/components/checkbox-group/overview.md +2 -2
- package/docs/components/collapsible/api-table.md +36 -0
- package/docs/components/collapsible/overview.md +1 -1
- package/docs/components/combobox/api-table.md +256 -0
- package/docs/components/combobox/overview.md +1 -1
- package/docs/components/combobox/use-cases.md +1 -1
- package/docs/components/dialog/api-table.md +45 -0
- package/docs/components/dialog/overview.md +1 -1
- package/docs/components/drawer/api-table.md +45 -0
- package/docs/components/fieldset/api-table.md +163 -0
- package/docs/components/fieldset/overview.md +5 -5
- package/docs/components/form/api-table.md +1 -0
- package/docs/components/form/overview.md +3 -3
- package/docs/components/icon/api-table.md +29 -0
- package/docs/components/icon/use-cases.md +1 -1
- package/docs/components/input/api-table.md +187 -0
- package/docs/components/input/overview.md +1 -1
- package/docs/components/input-amount/api-table.md +196 -0
- package/docs/components/input-amount/overview.md +3 -3
- package/docs/components/input-date/api-table.md +188 -0
- package/docs/components/input-date/overview.md +3 -3
- package/docs/components/input-datepicker/api-table.md +234 -0
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-email/api-table.md +187 -0
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-file/api-table.md +272 -0
- package/docs/components/input-file/overview.md +1 -1
- package/docs/components/input-iban/api-table.md +187 -0
- package/docs/components/input-iban/overview.md +2 -2
- package/docs/components/input-range/api-table.md +198 -0
- package/docs/components/input-range/overview.md +2 -2
- package/docs/components/input-stepper/api-table.md +205 -0
- package/docs/components/input-stepper/overview.md +1 -1
- package/docs/components/input-tel/api-table.md +202 -0
- package/docs/components/input-tel/overview.md +1 -1
- package/docs/components/input-tel/use-cases.md +6 -6
- package/docs/components/input-tel-dropdown/api-table.md +213 -0
- package/docs/components/input-tel-dropdown/overview.md +1 -1
- package/docs/components/listbox/api-table.md +293 -0
- package/docs/components/listbox/use-cases.md +1 -1
- package/docs/components/pagination/api-table.md +33 -0
- package/docs/components/progress-indicator/api-table.md +36 -0
- package/docs/components/radio-group/api-table.md +378 -0
- package/docs/components/radio-group/overview.md +3 -3
- package/docs/components/select/api-table.md +181 -0
- package/docs/components/select/use-cases.md +1 -1
- package/docs/components/select-rich/api-table.md +288 -0
- package/docs/components/select-rich/use-cases.md +1 -1
- package/docs/components/steps/api-table.md +80 -0
- package/docs/components/switch/api-table.md +229 -0
- package/docs/components/tabs/api-table.md +32 -0
- package/docs/components/tabs/examples.md +1 -1
- package/docs/components/textarea/api-table.md +192 -0
- package/docs/components/tooltip/api-table.md +53 -0
- package/docs/fundamentals/index.md +4 -4
- package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +1 -1
- package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
- package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
- package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
- package/docs/fundamentals/rationales/accessibility.md +1 -1
- package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
- package/docs/fundamentals/systems/core/api-table.md +34 -0
- package/docs/fundamentals/systems/core/overview.md +1 -1
- package/docs/fundamentals/systems/form/api-table.md +166 -0
- package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
- package/docs/fundamentals/systems/form/model-value.md +1 -1
- package/docs/fundamentals/systems/form/overview.md +28 -28
- package/docs/fundamentals/systems/form/validate.md +2 -2
- package/docs/fundamentals/systems/localize/api-table.md +65 -0
- package/docs/fundamentals/systems/localize/overview.md +4 -4
- package/docs/fundamentals/systems/overlays/api-table.md +168 -0
- package/docs/fundamentals/systems/overlays/configuration.md +2 -2
- package/docs/fundamentals/systems/overlays/overview.md +5 -5
- package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
- package/docs/fundamentals/tools/helpers/overview.md +1 -1
- package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
- package/docs/guides/how-to/create-a-custom-field.md +5 -5
- package/docs/guides/how-to/create-a-form.md +4 -4
- package/docs/guides/how-to/extend-a-native-input.md +2 -2
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/styling.md +1 -1
- package/package.json +5 -4
|
@@ -456,10 +456,14 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
456
456
|
*/
|
|
457
457
|
this.__listboxContentChanged = false;
|
|
458
458
|
|
|
459
|
+
/** @type {EventListener}
|
|
460
|
+
* @protected
|
|
461
|
+
*/
|
|
462
|
+
this._onKeyUp = this._onKeyUp.bind(this);
|
|
459
463
|
/** @type {EventListener}
|
|
460
464
|
* @private
|
|
461
465
|
*/
|
|
462
|
-
this.
|
|
466
|
+
this._textboxOnClick = this._textboxOnClick.bind(this);
|
|
463
467
|
/** @type {EventListener}
|
|
464
468
|
* @protected
|
|
465
469
|
*/
|
|
@@ -500,9 +504,6 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
500
504
|
}
|
|
501
505
|
}
|
|
502
506
|
}
|
|
503
|
-
if (name === 'focused' && this.focused) {
|
|
504
|
-
this.__requestShowOverlay();
|
|
505
|
-
}
|
|
506
507
|
}
|
|
507
508
|
|
|
508
509
|
/**
|
|
@@ -614,11 +615,6 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
614
615
|
* that wraps the listbox with options
|
|
615
616
|
*
|
|
616
617
|
* @example
|
|
617
|
-
* _showOverlayCondition(options) {
|
|
618
|
-
* return this.focused || super._showOverlayCondition(options);
|
|
619
|
-
* }
|
|
620
|
-
*
|
|
621
|
-
* @example
|
|
622
618
|
* _showOverlayCondition({ lastKey }) {
|
|
623
619
|
* return lastKey === 'ArrowDown';
|
|
624
620
|
* }
|
|
@@ -635,19 +631,20 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
635
631
|
// TODO: batch all pending condition triggers in __pendingShowTriggers, reducing race conditions
|
|
636
632
|
// eslint-disable-next-line class-methods-use-this
|
|
637
633
|
_showOverlayCondition({ lastKey }) {
|
|
638
|
-
const
|
|
639
|
-
|
|
634
|
+
const alwaysHideOn = ['Tab', 'Escape'];
|
|
635
|
+
const notMultipleChoiceHideOn = ['Enter'];
|
|
636
|
+
if (
|
|
637
|
+
lastKey &&
|
|
638
|
+
(alwaysHideOn.includes(lastKey) ||
|
|
639
|
+
(!this.multipleChoice && notMultipleChoiceHideOn.includes(lastKey)))
|
|
640
|
+
) {
|
|
640
641
|
return false;
|
|
641
642
|
}
|
|
642
|
-
|
|
643
|
-
if (this.showAllOnEmpty && this.focused) {
|
|
643
|
+
if (this.filled || this.showAllOnEmpty) {
|
|
644
644
|
return true;
|
|
645
645
|
}
|
|
646
646
|
// when no keyboard action involved (on focused change), return current opened state
|
|
647
|
-
|
|
648
|
-
return /** @type {boolean} */ (this.opened);
|
|
649
|
-
}
|
|
650
|
-
return true;
|
|
647
|
+
return /** @type {boolean} */ (this.opened);
|
|
651
648
|
}
|
|
652
649
|
|
|
653
650
|
/**
|
|
@@ -678,9 +675,14 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
678
675
|
this.__listboxContentChanged = true;
|
|
679
676
|
}
|
|
680
677
|
|
|
678
|
+
/**
|
|
679
|
+
* @param {Event} ev
|
|
680
|
+
* @protected
|
|
681
|
+
*/
|
|
681
682
|
// eslint-disable-next-line no-unused-vars
|
|
682
|
-
_textboxOnInput() {
|
|
683
|
+
_textboxOnInput(ev) {
|
|
683
684
|
this.__shouldAutocompleteNextUpdate = true;
|
|
685
|
+
this.opened = true;
|
|
684
686
|
}
|
|
685
687
|
|
|
686
688
|
/**
|
|
@@ -1068,7 +1070,8 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
1068
1070
|
*/
|
|
1069
1071
|
_setupOpenCloseListeners() {
|
|
1070
1072
|
super._setupOpenCloseListeners();
|
|
1071
|
-
this._inputNode.addEventListener('keyup', this.
|
|
1073
|
+
this._inputNode.addEventListener('keyup', this._onKeyUp);
|
|
1074
|
+
this._inputNode.addEventListener('click', this._textboxOnClick);
|
|
1072
1075
|
}
|
|
1073
1076
|
|
|
1074
1077
|
/**
|
|
@@ -1077,7 +1080,8 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
1077
1080
|
*/
|
|
1078
1081
|
_teardownOpenCloseListeners() {
|
|
1079
1082
|
super._teardownOpenCloseListeners();
|
|
1080
|
-
this._inputNode.removeEventListener('keyup', this.
|
|
1083
|
+
this._inputNode.removeEventListener('keyup', this._onKeyUp);
|
|
1084
|
+
this._inputNode.removeEventListener('click', this._textboxOnClick);
|
|
1081
1085
|
}
|
|
1082
1086
|
|
|
1083
1087
|
/**
|
|
@@ -1225,9 +1229,9 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
1225
1229
|
|
|
1226
1230
|
/**
|
|
1227
1231
|
* @param {KeyboardEvent} [ev]
|
|
1228
|
-
* @
|
|
1232
|
+
* @protected
|
|
1229
1233
|
*/
|
|
1230
|
-
|
|
1234
|
+
_onKeyUp(ev) {
|
|
1231
1235
|
const lastKey = ev && ev.key;
|
|
1232
1236
|
this.opened = this._showOverlayCondition({
|
|
1233
1237
|
lastKey,
|
|
@@ -1235,6 +1239,15 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(CustomChoiceGroupMi
|
|
|
1235
1239
|
});
|
|
1236
1240
|
}
|
|
1237
1241
|
|
|
1242
|
+
/**
|
|
1243
|
+
* @param {FocusEvent} [ev]
|
|
1244
|
+
* @protected
|
|
1245
|
+
*/
|
|
1246
|
+
// eslint-disable-next-line no-unused-vars
|
|
1247
|
+
_textboxOnClick(ev) {
|
|
1248
|
+
this.opened = this._showOverlayCondition({});
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1238
1251
|
clear() {
|
|
1239
1252
|
this.value = '';
|
|
1240
1253
|
super.clear();
|
|
@@ -93,11 +93,9 @@ describe('lion-combobox', () => {
|
|
|
93
93
|
`)
|
|
94
94
|
);
|
|
95
95
|
|
|
96
|
-
const {
|
|
96
|
+
const { _listboxNode } = getComboboxMembers(el);
|
|
97
97
|
|
|
98
98
|
async function open() {
|
|
99
|
-
// activate opened listbox
|
|
100
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
101
99
|
mimicUserTyping(el, 'ch');
|
|
102
100
|
return el.updateComplete;
|
|
103
101
|
}
|
|
@@ -150,7 +148,7 @@ describe('lion-combobox', () => {
|
|
|
150
148
|
await performChecks();
|
|
151
149
|
});
|
|
152
150
|
|
|
153
|
-
it('shows overlay on
|
|
151
|
+
it('shows overlay on click', async () => {
|
|
154
152
|
const el = /** @type {LionCombobox} */ (
|
|
155
153
|
await fixture(html`
|
|
156
154
|
<lion-combobox name="foo" .showAllOnEmpty="${true}">
|
|
@@ -161,15 +159,15 @@ describe('lion-combobox', () => {
|
|
|
161
159
|
</lion-combobox>
|
|
162
160
|
`)
|
|
163
161
|
);
|
|
164
|
-
const {
|
|
162
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
165
163
|
|
|
166
164
|
expect(el.opened).to.be.false;
|
|
167
|
-
|
|
165
|
+
_inputNode.dispatchEvent(new Event('click', { bubbles: true, composed: true }));
|
|
168
166
|
await el.updateComplete;
|
|
169
167
|
expect(el.opened).to.be.true;
|
|
170
168
|
});
|
|
171
169
|
|
|
172
|
-
it('hides overlay on
|
|
170
|
+
it('hides overlay on [Escape] after being opened', async () => {
|
|
173
171
|
const el = /** @type {LionCombobox} */ (
|
|
174
172
|
await fixture(html`
|
|
175
173
|
<lion-combobox name="foo" .showAllOnEmpty="${true}">
|
|
@@ -183,7 +181,7 @@ describe('lion-combobox', () => {
|
|
|
183
181
|
const { _comboboxNode, _inputNode } = getComboboxMembers(el);
|
|
184
182
|
|
|
185
183
|
expect(el.opened).to.be.false;
|
|
186
|
-
_comboboxNode.dispatchEvent(new Event('
|
|
184
|
+
_comboboxNode.dispatchEvent(new Event('click', { bubbles: true, composed: true }));
|
|
187
185
|
await el.updateComplete;
|
|
188
186
|
expect(el.opened).to.be.true;
|
|
189
187
|
_inputNode.dispatchEvent(new KeyboardEvent('keyup', { key: 'Escape' }));
|
|
@@ -203,11 +201,9 @@ describe('lion-combobox', () => {
|
|
|
203
201
|
`)
|
|
204
202
|
);
|
|
205
203
|
|
|
206
|
-
const {
|
|
204
|
+
const { _listboxNode, _inputNode } = getComboboxMembers(el);
|
|
207
205
|
|
|
208
206
|
async function open() {
|
|
209
|
-
// activate opened listbox
|
|
210
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
211
207
|
mimicUserTyping(el, 'ch');
|
|
212
208
|
return el.updateComplete;
|
|
213
209
|
}
|
|
@@ -870,10 +866,10 @@ describe('lion-combobox', () => {
|
|
|
870
866
|
});
|
|
871
867
|
|
|
872
868
|
describe('Overlay visibility', () => {
|
|
873
|
-
it('does not show overlay on
|
|
869
|
+
it('does not show overlay on click', async () => {
|
|
874
870
|
const el = /** @type {LionCombobox} */ (
|
|
875
871
|
await fixture(html`
|
|
876
|
-
<lion-combobox name="foo"
|
|
872
|
+
<lion-combobox name="foo">
|
|
877
873
|
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
878
874
|
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
879
875
|
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
@@ -884,7 +880,26 @@ describe('lion-combobox', () => {
|
|
|
884
880
|
const { _comboboxNode } = getComboboxMembers(el);
|
|
885
881
|
|
|
886
882
|
expect(el.opened).to.equal(false);
|
|
887
|
-
_comboboxNode.dispatchEvent(new Event('
|
|
883
|
+
_comboboxNode.dispatchEvent(new Event('click', { bubbles: true, composed: true }));
|
|
884
|
+
await el.updateComplete;
|
|
885
|
+
expect(el.opened).to.equal(false);
|
|
886
|
+
});
|
|
887
|
+
|
|
888
|
+
it('shows overlay on click when filled', async () => {
|
|
889
|
+
const el = /** @type {LionCombobox} */ (
|
|
890
|
+
await fixture(html`
|
|
891
|
+
<lion-combobox name="foo">
|
|
892
|
+
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
893
|
+
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
894
|
+
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
895
|
+
<lion-option .choiceValue="${'Victoria Plum'}">Victoria Plum</lion-option>
|
|
896
|
+
</lion-combobox>
|
|
897
|
+
`)
|
|
898
|
+
);
|
|
899
|
+
const { _comboboxNode } = getComboboxMembers(el);
|
|
900
|
+
el.modelValue = 'Art';
|
|
901
|
+
expect(el.opened).to.equal(false);
|
|
902
|
+
_comboboxNode.dispatchEvent(new Event('click', { bubbles: true, composed: true }));
|
|
888
903
|
await el.updateComplete;
|
|
889
904
|
expect(el.opened).to.equal(false);
|
|
890
905
|
});
|
|
@@ -914,7 +929,7 @@ describe('lion-combobox', () => {
|
|
|
914
929
|
expect(el.opened).to.equal(false);
|
|
915
930
|
|
|
916
931
|
// step [1]
|
|
917
|
-
_inputNode.dispatchEvent(new Event('
|
|
932
|
+
_inputNode.dispatchEvent(new Event('click', { bubbles: true, composed: true }));
|
|
918
933
|
await el.updateComplete;
|
|
919
934
|
expect(el.opened).to.equal(false);
|
|
920
935
|
|
|
@@ -948,10 +963,7 @@ describe('lion-combobox', () => {
|
|
|
948
963
|
`)
|
|
949
964
|
);
|
|
950
965
|
|
|
951
|
-
const {
|
|
952
|
-
|
|
953
|
-
// open
|
|
954
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
966
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
955
967
|
|
|
956
968
|
mimicUserTyping(el, 'art');
|
|
957
969
|
await el.updateComplete;
|
|
@@ -963,7 +975,7 @@ describe('lion-combobox', () => {
|
|
|
963
975
|
expect(_inputNode.value).to.equal('');
|
|
964
976
|
});
|
|
965
977
|
|
|
966
|
-
it('hides overlay on [
|
|
978
|
+
it('hides overlay on [Enter]', async () => {
|
|
967
979
|
const el = /** @type {LionCombobox} */ (
|
|
968
980
|
await fixture(html`
|
|
969
981
|
<lion-combobox name="foo">
|
|
@@ -975,10 +987,33 @@ describe('lion-combobox', () => {
|
|
|
975
987
|
`)
|
|
976
988
|
);
|
|
977
989
|
|
|
978
|
-
const {
|
|
990
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
979
991
|
|
|
980
|
-
|
|
981
|
-
|
|
992
|
+
mimicUserTyping(el, 'art');
|
|
993
|
+
await el.updateComplete;
|
|
994
|
+
expect(el.opened).to.equal(true);
|
|
995
|
+
expect(_inputNode.value).to.equal('Artichoke');
|
|
996
|
+
|
|
997
|
+
// N.B. we do only trigger keydown here (and not mimicKeypress (both keyup and down)),
|
|
998
|
+
// because this closely mimics what happens in the browser
|
|
999
|
+
_inputNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));
|
|
1000
|
+
expect(el.opened).to.equal(false);
|
|
1001
|
+
expect(_inputNode.value).to.equal('Artichoke');
|
|
1002
|
+
});
|
|
1003
|
+
|
|
1004
|
+
it('hides overlay on [Tab]', async () => {
|
|
1005
|
+
const el = /** @type {LionCombobox} */ (
|
|
1006
|
+
await fixture(html`
|
|
1007
|
+
<lion-combobox name="foo">
|
|
1008
|
+
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
1009
|
+
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
1010
|
+
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
1011
|
+
<lion-option .choiceValue="${'Victoria Plum'}">Victoria Plum</lion-option>
|
|
1012
|
+
</lion-combobox>
|
|
1013
|
+
`)
|
|
1014
|
+
);
|
|
1015
|
+
|
|
1016
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
982
1017
|
|
|
983
1018
|
mimicUserTyping(el, 'art');
|
|
984
1019
|
await el.updateComplete;
|
|
@@ -992,7 +1027,7 @@ describe('lion-combobox', () => {
|
|
|
992
1027
|
expect(_inputNode.value).to.equal('Artichoke');
|
|
993
1028
|
});
|
|
994
1029
|
|
|
995
|
-
it('
|
|
1030
|
+
it('keeps overlay open on [Shift]', async () => {
|
|
996
1031
|
const el = /** @type {LionCombobox} */ (
|
|
997
1032
|
await fixture(html`
|
|
998
1033
|
<lion-combobox name="foo">
|
|
@@ -1004,10 +1039,33 @@ describe('lion-combobox', () => {
|
|
|
1004
1039
|
`)
|
|
1005
1040
|
);
|
|
1006
1041
|
|
|
1007
|
-
const {
|
|
1042
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
1043
|
+
|
|
1044
|
+
mimicUserTyping(el, 'art');
|
|
1045
|
+
await el.updateComplete;
|
|
1046
|
+
expect(el.opened).to.equal(true);
|
|
1047
|
+
expect(_inputNode.value).to.equal('Artichoke');
|
|
1048
|
+
|
|
1049
|
+
// N.B. we do only trigger keydown here (and not mimicKeypress (both keyup and down)),
|
|
1050
|
+
// because this closely mimics what happens in the browser
|
|
1051
|
+
_inputNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'Shift' }));
|
|
1052
|
+
expect(el.opened).to.equal(true);
|
|
1053
|
+
expect(_inputNode.value).to.equal('Artichoke');
|
|
1054
|
+
});
|
|
1055
|
+
|
|
1056
|
+
it('clears checkedIndex on empty text', async () => {
|
|
1057
|
+
const el = /** @type {LionCombobox} */ (
|
|
1058
|
+
await fixture(html`
|
|
1059
|
+
<lion-combobox name="foo">
|
|
1060
|
+
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
1061
|
+
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
1062
|
+
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
1063
|
+
<lion-option .choiceValue="${'Victoria Plum'}">Victoria Plum</lion-option>
|
|
1064
|
+
</lion-combobox>
|
|
1065
|
+
`)
|
|
1066
|
+
);
|
|
1008
1067
|
|
|
1009
|
-
|
|
1010
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
1068
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
1011
1069
|
|
|
1012
1070
|
mimicUserTyping(el, 'art');
|
|
1013
1071
|
await el.updateComplete;
|
|
@@ -1043,34 +1101,6 @@ describe('lion-combobox', () => {
|
|
|
1043
1101
|
|
|
1044
1102
|
// NB: If this becomes a suite, move to separate file
|
|
1045
1103
|
describe('Subclassers', () => {
|
|
1046
|
-
it('allows to control overlay visibility via "_showOverlayCondition"', async () => {
|
|
1047
|
-
class ShowOverlayConditionCombobox extends LionCombobox {
|
|
1048
|
-
/** @param {{ currentValue: string, lastKey:string }} options */
|
|
1049
|
-
_showOverlayCondition(options) {
|
|
1050
|
-
return this.focused || super._showOverlayCondition(options);
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
const tagName = defineCE(ShowOverlayConditionCombobox);
|
|
1054
|
-
const tag = unsafeStatic(tagName);
|
|
1055
|
-
|
|
1056
|
-
const el = /** @type {LionCombobox} */ (
|
|
1057
|
-
await fixture(html`
|
|
1058
|
-
<${tag} name="foo" multiple-choice>
|
|
1059
|
-
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
1060
|
-
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
1061
|
-
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
1062
|
-
<lion-option .choiceValue="${'Victoria Plum'}">Victoria Plum</lion-option>
|
|
1063
|
-
</${tag}>
|
|
1064
|
-
`)
|
|
1065
|
-
);
|
|
1066
|
-
const { _comboboxNode } = getComboboxMembers(el);
|
|
1067
|
-
|
|
1068
|
-
expect(el.opened).to.equal(false);
|
|
1069
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
1070
|
-
await el.updateComplete;
|
|
1071
|
-
expect(el.opened).to.equal(true);
|
|
1072
|
-
});
|
|
1073
|
-
|
|
1074
1104
|
it('allows to control overlay visibility via "_showOverlayCondition": should not display overlay if currentValue length condition is not fulfilled', async () => {
|
|
1075
1105
|
class ShowOverlayConditionCombobox extends LionCombobox {
|
|
1076
1106
|
/** @param {{ currentValue: string, lastKey:string }} options */
|
|
@@ -1164,11 +1194,8 @@ describe('lion-combobox', () => {
|
|
|
1164
1194
|
`)
|
|
1165
1195
|
);
|
|
1166
1196
|
const options = el.formElements;
|
|
1167
|
-
const { _comboboxNode } = getComboboxMembers(el);
|
|
1168
1197
|
expect(el.opened).to.equal(false);
|
|
1169
1198
|
|
|
1170
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
1171
|
-
|
|
1172
1199
|
mimicUserTyping(el, 'art');
|
|
1173
1200
|
await el.updateComplete;
|
|
1174
1201
|
expect(el.opened).to.equal(true);
|
|
@@ -1208,11 +1235,8 @@ describe('lion-combobox', () => {
|
|
|
1208
1235
|
`)
|
|
1209
1236
|
);
|
|
1210
1237
|
const options = el.formElements;
|
|
1211
|
-
const { _comboboxNode } = getComboboxMembers(el);
|
|
1212
1238
|
expect(el.opened).to.equal(false);
|
|
1213
1239
|
|
|
1214
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
1215
|
-
|
|
1216
1240
|
mimicUserTyping(el, 'art');
|
|
1217
1241
|
expect(el.opened).to.equal(true);
|
|
1218
1242
|
await el.updateComplete;
|
|
@@ -2948,7 +2972,7 @@ describe('lion-combobox', () => {
|
|
|
2948
2972
|
|
|
2949
2973
|
describe('Multiple Choice', () => {
|
|
2950
2974
|
// TODO: possibly later share test with select-rich if it officially supports multipleChoice
|
|
2951
|
-
it('does not close listbox on click
|
|
2975
|
+
it('does not close listbox on click', async () => {
|
|
2952
2976
|
const el = /** @type {LionCombobox} */ (
|
|
2953
2977
|
await fixture(html`
|
|
2954
2978
|
<lion-combobox name="foo" multiple-choice>
|
|
@@ -2960,10 +2984,7 @@ describe('lion-combobox', () => {
|
|
|
2960
2984
|
`)
|
|
2961
2985
|
);
|
|
2962
2986
|
|
|
2963
|
-
const { _comboboxNode } = getComboboxMembers(el);
|
|
2964
|
-
|
|
2965
2987
|
// activate opened listbox
|
|
2966
|
-
_comboboxNode.dispatchEvent(new Event('focusin', { bubbles: true, composed: true }));
|
|
2967
2988
|
mimicUserTyping(el, 'ch');
|
|
2968
2989
|
await el.updateComplete;
|
|
2969
2990
|
|
|
@@ -2971,7 +2992,29 @@ describe('lion-combobox', () => {
|
|
|
2971
2992
|
const visibleOptions = el.formElements.filter(o => o.style.display !== 'none');
|
|
2972
2993
|
visibleOptions[0].click();
|
|
2973
2994
|
expect(el.opened).to.equal(true);
|
|
2974
|
-
|
|
2995
|
+
});
|
|
2996
|
+
|
|
2997
|
+
it('does not close listbox on [Enter]', async () => {
|
|
2998
|
+
const el = /** @type {LionCombobox} */ (
|
|
2999
|
+
await fixture(html`
|
|
3000
|
+
<lion-combobox name="foo" multiple-choice>
|
|
3001
|
+
<lion-option .choiceValue="${'Artichoke'}">Artichoke</lion-option>
|
|
3002
|
+
<lion-option .choiceValue="${'Chard'}">Chard</lion-option>
|
|
3003
|
+
<lion-option .choiceValue="${'Chicory'}">Chicory</lion-option>
|
|
3004
|
+
<lion-option .choiceValue="${'Victoria Plum'}">Victoria Plum</lion-option>
|
|
3005
|
+
</lion-combobox>
|
|
3006
|
+
`)
|
|
3007
|
+
);
|
|
3008
|
+
|
|
3009
|
+
const { _inputNode } = getComboboxMembers(el);
|
|
3010
|
+
|
|
3011
|
+
mimicUserTyping(el, 'art');
|
|
3012
|
+
await el.updateComplete;
|
|
3013
|
+
expect(el.opened).to.equal(true);
|
|
3014
|
+
|
|
3015
|
+
// N.B. we do only trigger keydown here (and not mimicKeypress (both keyup and down)),
|
|
3016
|
+
// because this closely mimics what happens in the browser
|
|
3017
|
+
_inputNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));
|
|
2975
3018
|
expect(el.opened).to.equal(true);
|
|
2976
3019
|
});
|
|
2977
3020
|
|
|
@@ -34,7 +34,6 @@ const FormControlMixinImplementation = superclass =>
|
|
|
34
34
|
/** @type {any} */
|
|
35
35
|
static get properties() {
|
|
36
36
|
return {
|
|
37
|
-
name: { type: String, reflect: true },
|
|
38
37
|
readOnly: { type: Boolean, attribute: 'readonly', reflect: true },
|
|
39
38
|
label: String, // FIXME: { attribute: false } breaks a bunch of tests, but shouldn't...
|
|
40
39
|
labelSrOnly: { type: Boolean, attribute: 'label-sr-only', reflect: true },
|
|
@@ -156,14 +155,6 @@ const FormControlMixinImplementation = superclass =>
|
|
|
156
155
|
constructor() {
|
|
157
156
|
super();
|
|
158
157
|
|
|
159
|
-
/**
|
|
160
|
-
* The name the element will be registered with to the .formElements collection
|
|
161
|
-
* of the parent. Also, it serves as the key of key/value pairs in
|
|
162
|
-
* modelValue/serializedValue objects
|
|
163
|
-
* @type {string}
|
|
164
|
-
*/
|
|
165
|
-
this.name = '';
|
|
166
|
-
|
|
167
158
|
/**
|
|
168
159
|
* A Boolean attribute which, if present, indicates that the user should not be able to edit
|
|
169
160
|
* the value of the input. The difference between disabled and readonly is that read-only
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
export const localizeNamespaceLoader = /** @param {string} locale */ locale => {
|
|
3
|
+
switch (locale) {
|
|
4
|
+
case 'bg-BG':
|
|
5
|
+
return import('@lion/ui/form-core-translations/bg-BG.js');
|
|
6
|
+
case 'bg':
|
|
7
|
+
return import('@lion/ui/form-core-translations/bg.js');
|
|
8
|
+
case 'cs-CZ':
|
|
9
|
+
return import('@lion/ui/form-core-translations/cs-CZ.js');
|
|
10
|
+
case 'cs':
|
|
11
|
+
return import('@lion/ui/form-core-translations/cs.js');
|
|
12
|
+
case 'de-DE':
|
|
13
|
+
return import('@lion/ui/form-core-translations/de-DE.js');
|
|
14
|
+
case 'de':
|
|
15
|
+
return import('@lion/ui/form-core-translations/de.js');
|
|
16
|
+
case 'en-AU':
|
|
17
|
+
return import('@lion/ui/form-core-translations/en-AU.js');
|
|
18
|
+
case 'en-GB':
|
|
19
|
+
return import('@lion/ui/form-core-translations/en-GB.js');
|
|
20
|
+
case 'en-US':
|
|
21
|
+
return import('@lion/ui/form-core-translations/en-US.js');
|
|
22
|
+
case 'en-PH':
|
|
23
|
+
case 'en':
|
|
24
|
+
return import('@lion/ui/form-core-translations/en.js');
|
|
25
|
+
case 'es-ES':
|
|
26
|
+
return import('@lion/ui/form-core-translations/es-ES.js');
|
|
27
|
+
case 'es':
|
|
28
|
+
return import('@lion/ui/form-core-translations/es.js');
|
|
29
|
+
case 'fr-FR':
|
|
30
|
+
return import('@lion/ui/form-core-translations/fr-FR.js');
|
|
31
|
+
case 'fr-BE':
|
|
32
|
+
return import('@lion/ui/form-core-translations/fr-BE.js');
|
|
33
|
+
case 'fr':
|
|
34
|
+
return import('@lion/ui/form-core-translations/fr.js');
|
|
35
|
+
case 'hu-HU':
|
|
36
|
+
return import('@lion/ui/form-core-translations/hu-HU.js');
|
|
37
|
+
case 'hu':
|
|
38
|
+
return import('@lion/ui/form-core-translations/hu.js');
|
|
39
|
+
case 'it-IT':
|
|
40
|
+
return import('@lion/ui/form-core-translations/it-IT.js');
|
|
41
|
+
case 'it':
|
|
42
|
+
return import('@lion/ui/form-core-translations/it.js');
|
|
43
|
+
case 'nl-BE':
|
|
44
|
+
return import('@lion/ui/form-core-translations/nl-BE.js');
|
|
45
|
+
case 'nl-NL':
|
|
46
|
+
return import('@lion/ui/form-core-translations/nl-NL.js');
|
|
47
|
+
case 'nl':
|
|
48
|
+
return import('@lion/ui/form-core-translations/nl.js');
|
|
49
|
+
case 'pl-PL':
|
|
50
|
+
return import('@lion/ui/form-core-translations/pl-PL.js');
|
|
51
|
+
case 'pl':
|
|
52
|
+
return import('@lion/ui/form-core-translations/pl.js');
|
|
53
|
+
case 'ro-RO':
|
|
54
|
+
return import('@lion/ui/form-core-translations/ro-RO.js');
|
|
55
|
+
case 'ro':
|
|
56
|
+
return import('@lion/ui/form-core-translations/ro.js');
|
|
57
|
+
case 'ru-RU':
|
|
58
|
+
return import('@lion/ui/form-core-translations/ru-RU.js');
|
|
59
|
+
case 'ru':
|
|
60
|
+
return import('@lion/ui/form-core-translations/ru.js');
|
|
61
|
+
case 'sk-SK':
|
|
62
|
+
return import('@lion/ui/form-core-translations/sk-SK.js');
|
|
63
|
+
case 'sk':
|
|
64
|
+
return import('@lion/ui/form-core-translations/sk.js');
|
|
65
|
+
case 'uk-UA':
|
|
66
|
+
return import('@lion/ui/form-core-translations/uk-UA.js');
|
|
67
|
+
case 'uk':
|
|
68
|
+
return import('@lion/ui/form-core-translations/uk.js');
|
|
69
|
+
case 'zh-CN':
|
|
70
|
+
case 'zh':
|
|
71
|
+
return import('@lion/ui/form-core-translations/zh.js');
|
|
72
|
+
default:
|
|
73
|
+
return import('@lion/ui/form-core-translations/en.js');
|
|
74
|
+
}
|
|
75
|
+
};
|
|
@@ -22,6 +22,14 @@ const FormRegisteringMixinImplementation = superclass =>
|
|
|
22
22
|
class extends superclass {
|
|
23
23
|
constructor() {
|
|
24
24
|
super();
|
|
25
|
+
/**
|
|
26
|
+
* The name the element will be registered with to the .formElements collection
|
|
27
|
+
* of the parent. Also, it serves as the key of key/value pairs in
|
|
28
|
+
* modelValue/serializedValue objects
|
|
29
|
+
* @type {string}
|
|
30
|
+
*/
|
|
31
|
+
this.name = '';
|
|
32
|
+
|
|
25
33
|
/**
|
|
26
34
|
* The registrar this FormControl registers to, Usually a descendant of FormGroup or
|
|
27
35
|
* ChoiceGroup
|
|
@@ -37,8 +45,28 @@ const FormRegisteringMixinImplementation = superclass =>
|
|
|
37
45
|
this.allowCrossRootRegistration = false;
|
|
38
46
|
}
|
|
39
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Name attribute for the control.
|
|
50
|
+
* @type {string}
|
|
51
|
+
*/
|
|
52
|
+
get name() {
|
|
53
|
+
return this.__name || '';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Converts values provided for the `name` attribute to string type.
|
|
58
|
+
* Mimics the native `input` behavior.
|
|
59
|
+
* @param {string} newName
|
|
60
|
+
*/
|
|
61
|
+
set name(newName) {
|
|
62
|
+
const oldName = this.name;
|
|
63
|
+
this.__name = newName.toString();
|
|
64
|
+
this.requestUpdate('name', oldName);
|
|
65
|
+
}
|
|
66
|
+
|
|
40
67
|
static get properties() {
|
|
41
68
|
return {
|
|
69
|
+
name: { type: String, reflect: true },
|
|
42
70
|
allowCrossRootRegistration: { type: Boolean, attribute: 'allow-cross-root-registration' },
|
|
43
71
|
};
|
|
44
72
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { html, LitElement } from 'lit';
|
|
1
|
+
import { css, html, LitElement } from 'lit';
|
|
2
|
+
import { LocalizeMixin } from '@lion/ui/localize-no-side-effects.js';
|
|
3
|
+
import { localizeNamespaceLoader } from '../localizeNamespaceLoader.js';
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* @typedef {import('./Validator.js').Validator} Validator
|
|
@@ -6,17 +8,46 @@ import { html, LitElement } from 'lit';
|
|
|
6
8
|
* @typedef {import('../../types/validate/ValidateMixinTypes.js').FeedbackMessage} FeedbackMessage
|
|
7
9
|
*/
|
|
8
10
|
|
|
11
|
+
/**
|
|
12
|
+
* @param {string} string
|
|
13
|
+
*/
|
|
14
|
+
const capitalize = string => `${string[0].toUpperCase()}${string.slice(1)}`;
|
|
15
|
+
|
|
9
16
|
/**
|
|
10
17
|
* @desc Takes care of accessible rendering of error messages
|
|
11
18
|
* Should be used in conjunction with FormControl having ValidateMixin applied
|
|
12
19
|
*/
|
|
13
|
-
export class LionValidationFeedback extends LitElement {
|
|
20
|
+
export class LionValidationFeedback extends LocalizeMixin(LitElement) {
|
|
14
21
|
static get properties() {
|
|
15
22
|
return {
|
|
16
23
|
feedbackData: { attribute: false },
|
|
17
24
|
};
|
|
18
25
|
}
|
|
19
26
|
|
|
27
|
+
static localizeNamespaces = [
|
|
28
|
+
{ 'lion-form-core': localizeNamespaceLoader },
|
|
29
|
+
...super.localizeNamespaces,
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
static get styles() {
|
|
33
|
+
return [
|
|
34
|
+
css`
|
|
35
|
+
.validation-feedback__type {
|
|
36
|
+
position: absolute;
|
|
37
|
+
width: 1px;
|
|
38
|
+
height: 1px;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
clip-path: inset(100%);
|
|
41
|
+
clip: rect(1px, 1px, 1px, 1px);
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
border: 0;
|
|
44
|
+
margin: 0;
|
|
45
|
+
padding: 0;
|
|
46
|
+
}
|
|
47
|
+
`,
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
|
|
20
51
|
/**
|
|
21
52
|
* @overridable
|
|
22
53
|
* @param {Object} opts
|
|
@@ -58,6 +89,9 @@ export class LionValidationFeedback extends LitElement {
|
|
|
58
89
|
${this.feedbackData &&
|
|
59
90
|
this.feedbackData.map(
|
|
60
91
|
({ message, type, validator }) => html`
|
|
92
|
+
<div class="validation-feedback__type">
|
|
93
|
+
${this._localizeManager.msg(`lion-form-core:validation${capitalize(type)}`)}
|
|
94
|
+
</div>
|
|
61
95
|
${this._messageTemplate({ message, type, validator })}
|
|
62
96
|
`,
|
|
63
97
|
)}
|