@lion/ui 0.0.8 → 0.0.10
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/core/src/SlotMixin.js +2 -1
- package/components/dialog/test/lion-dialog.test.js +3 -7
- package/components/form-integrations/test/form-group-methods.test.js +6 -4
- package/components/form-integrations/test/form-integrations.test.js +10 -5
- package/components/form-integrations/test/helpers/umbrella-form.js +10 -0
- package/components/form-integrations/test/model-value-consistency.test.js +29 -20
- package/components/input-datepicker/src/LionInputDatepicker.js +64 -100
- package/components/input-datepicker/src/localizeNamespaceLoader.js +188 -0
- package/components/input-datepicker/test/lion-input-datepicker.test.js +15 -20
- package/components/input-datepicker/test-helpers/DatepickerInputObject.js +3 -3
- package/components/input-tel/src/parsers.js +1 -1
- package/components/listbox/test-suites/ListboxMixin.suite.js +3 -3
- package/components/localize/test/number/formatNumber.test.js +2 -6
- package/components/overlays/src/OverlayController.js +236 -289
- package/components/overlays/src/OverlayMixin.js +17 -18
- package/components/overlays/src/OverlaysManager.js +28 -53
- package/components/overlays/src/overlayDocumentStyle.js +24 -0
- package/components/overlays/src/overlayShadowDomStyle.js +138 -0
- package/components/overlays/src/singleton.js +3 -1
- package/components/overlays/test/ArrowMixin.test.js +0 -1
- package/components/overlays/test/OverlayController.test.js +306 -273
- package/components/overlays/test/OverlaysManager.test.js +23 -32
- package/components/overlays/test/global-positioning.test.js +4 -15
- package/components/overlays/test/local-positioning.test.js +65 -38
- package/components/overlays/test-suites/OverlayMixin.suite.js +18 -26
- package/components/overlays/types/OverlayConfig.ts +32 -11
- package/components/overlays/types/OverlayMixinTypes.ts +2 -2
- package/components/select-rich/src/LionSelectInvoker.js +2 -3
- package/components/select-rich/src/LionSelectRich.js +22 -20
- package/components/select-rich/test/lion-select-rich.test.js +5 -7
- package/components/validate-messages/src/loadDefaultFeedbackMessages.js +2 -181
- package/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.js +194 -0
- package/components/validate-messages/test/loadDefaultFeedbackMessages.test.js +1 -18
- package/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.js +49 -0
- package/custom-elements.json +370 -362
- package/dist-types/components/core/src/SlotMixin.d.ts.map +1 -1
- package/dist-types/components/form-integrations/test/helpers/umbrella-form.d.ts +4 -0
- package/dist-types/components/form-integrations/test/helpers/umbrella-form.d.ts.map +1 -1
- package/dist-types/components/form-integrations/test/model-value-consistency.test.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +3 -3
- package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts.map +1 -1
- package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts +4 -0
- package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -0
- package/dist-types/components/overlays/src/OverlayController.d.ts +46 -101
- package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
- package/dist-types/components/overlays/src/OverlaysManager.d.ts +0 -7
- package/dist-types/components/overlays/src/OverlaysManager.d.ts.map +1 -1
- package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts +2 -0
- package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts.map +1 -0
- package/dist-types/components/overlays/src/overlayShadowDomStyle.d.ts +2 -0
- package/dist-types/components/overlays/src/overlayShadowDomStyle.d.ts.map +1 -0
- package/dist-types/components/overlays/src/singleton.d.ts +2 -1
- package/dist-types/components/overlays/src/singleton.d.ts.map +1 -1
- package/dist-types/components/overlays/test-suites/OverlayMixin.suite.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts +14 -10
- package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +2 -2
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts +3 -27
- package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts.map +1 -1
- package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessages.d.ts +3 -0
- package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessages.d.ts.map +1 -1
- package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.d.ts +10 -0
- package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.d.ts.map +1 -0
- package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessages.test.d.ts.map +1 -1
- package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.d.ts +2 -0
- package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.d.ts.map +1 -0
- package/dist-types/exports/input-datepicker.d.ts +0 -1
- package/dist-types/exports/overlays.d.ts +0 -1
- package/dist-types/exports/types/overlays.d.ts +1 -0
- package/dist-types/exports/types/overlays.d.ts.map +1 -1
- package/dist-types/exports/validate-messages-no-side-effects.d.ts +2 -0
- package/dist-types/exports/validate-messages-no-side-effects.d.ts.map +1 -0
- package/dist-types/tsconfig.tsbuildinfo +1 -1
- package/docs/components/checkbox-group/overview.md +2 -2
- package/docs/components/collapsible/overview.md +1 -1
- package/docs/components/combobox/overview.md +1 -1
- package/docs/components/combobox/use-cases.md +1 -1
- package/docs/components/dialog/overview.md +5 -9
- package/docs/components/dialog/use-cases.md +43 -87
- package/docs/components/fieldset/overview.md +5 -5
- package/docs/components/form/overview.md +3 -3
- package/docs/components/icon/use-cases.md +1 -1
- package/docs/components/input/overview.md +1 -1
- package/docs/components/input-amount/overview.md +3 -3
- package/docs/components/input-date/overview.md +3 -3
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-iban/overview.md +2 -2
- package/docs/components/input-range/overview.md +2 -2
- package/docs/components/input-stepper/overview.md +1 -1
- 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/overview.md +1 -1
- package/docs/components/radio-group/overview.md +3 -3
- package/docs/components/select-rich/use-cases.md +1 -1
- package/docs/components/tabs/examples.md +1 -1
- 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/systems/core/overview.md +1 -1
- 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/use-cases.md +4 -0
- package/docs/fundamentals/systems/form/validate.md +1 -1
- package/docs/fundamentals/systems/localize/overview.md +4 -4
- package/docs/fundamentals/systems/overlays/assets/{applyDemoOverlayStyles.js → applyDemoOverlayStyles.mjs} +2 -1
- package/docs/fundamentals/systems/overlays/assets/demo-el-using-overlaymixin.mjs +119 -0
- package/docs/fundamentals/systems/overlays/assets/{demo-overlay-backdrop.js → demo-overlay-backdrop.mjs} +3 -4
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-positioning.mjs +537 -0
- package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +9 -2
- package/docs/fundamentals/systems/overlays/configuration.md +56 -54
- package/docs/fundamentals/systems/overlays/overview.md +5 -5
- package/docs/fundamentals/systems/overlays/use-cases.md +83 -77
- 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 +6 -6
- package/docs/guides/how-to/extend-a-native-input.md +3 -3
- package/docs/guides/index.md +8 -8
- package/docs/guides/principles/index.md +5 -5
- package/docs/guides/principles/styling.md +1 -1
- package/exports/input-datepicker.js +0 -1
- package/exports/overlays.js +0 -1
- package/exports/types/overlays.ts +1 -0
- package/exports/validate-messages-no-side-effects.js +1 -0
- package/package.json +2 -1
- package/components/input-datepicker/src/LionCalendarOverlayFrame.js +0 -125
- package/components/overlays/src/globalOverlaysStyle.js +0 -139
- package/dist-types/components/input-datepicker/src/LionCalendarOverlayFrame.d.ts +0 -10
- package/dist-types/components/input-datepicker/src/LionCalendarOverlayFrame.d.ts.map +0 -1
- package/dist-types/components/overlays/src/globalOverlaysStyle.d.ts +0 -2
- package/dist-types/components/overlays/src/globalOverlaysStyle.d.ts.map +0 -1
- package/dist-types/exports/define/lion-calendar-overlay-frame.d.ts +0 -2
- package/dist-types/exports/define/lion-calendar-overlay-frame.d.ts.map +0 -1
- package/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js +0 -42
- package/docs/fundamentals/systems/overlays/form-integration.md +0 -65
- package/docs/fundamentals/systems/overlays/scope.md +0 -176
- package/exports/define/lion-calendar-overlay-frame.js +0 -3
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
|
-
import { renderLitAsNode } from '@lion/ui/helpers.js';
|
|
3
2
|
import { LionOption } from '@lion/ui/listbox.js';
|
|
4
3
|
import { getListboxMembers } from '@lion/ui/listbox-test-helpers.js';
|
|
5
4
|
import { OverlayController } from '@lion/ui/overlays.js';
|
|
@@ -152,7 +151,7 @@ describe('lion-select-rich', () => {
|
|
|
152
151
|
});
|
|
153
152
|
|
|
154
153
|
it('updates the invoker when the selected element is the same but the modelValue was updated asynchronously', async () => {
|
|
155
|
-
const
|
|
154
|
+
const tagString = defineCE(
|
|
156
155
|
class LionCustomOption extends LionOption {
|
|
157
156
|
render() {
|
|
158
157
|
return html`${this.modelValue.value}`;
|
|
@@ -163,27 +162,26 @@ describe('lion-select-rich', () => {
|
|
|
163
162
|
}
|
|
164
163
|
},
|
|
165
164
|
);
|
|
166
|
-
const
|
|
167
|
-
|
|
165
|
+
const tag = unsafeStatic(tagString);
|
|
168
166
|
const firstOption = /** @type {LionOption} */ (
|
|
169
|
-
|
|
167
|
+
await _fixture(html`<${tag} checked .choiceValue=${10}></${tag}>`)
|
|
170
168
|
);
|
|
171
169
|
|
|
172
170
|
const el = await fixture(html`
|
|
173
171
|
<lion-select-rich>
|
|
174
172
|
${firstOption}
|
|
175
|
-
<${
|
|
173
|
+
<${tag} .choiceValue=${20}></${tag}>
|
|
176
174
|
</lion-select-rich>
|
|
177
175
|
`);
|
|
178
176
|
|
|
179
177
|
const { _invokerNode } = getSelectRichMembers(el);
|
|
178
|
+
|
|
180
179
|
const firstChild = /** @type {HTMLElement} */ (
|
|
181
180
|
/** @type {ShadowRoot} */ (_invokerNode.shadowRoot).firstElementChild
|
|
182
181
|
);
|
|
183
182
|
expect(firstChild.textContent).to.equal('10');
|
|
184
183
|
|
|
185
184
|
firstOption.modelValue = { value: 30, checked: true };
|
|
186
|
-
await firstOption.updateComplete;
|
|
187
185
|
await el.updateComplete;
|
|
188
186
|
expect(firstChild.textContent).to.equal('30');
|
|
189
187
|
});
|
|
@@ -1,190 +1,11 @@
|
|
|
1
1
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
2
|
import { localize } from '@lion/ui/localize.js';
|
|
3
|
-
import {
|
|
4
|
-
DefaultSuccess,
|
|
5
|
-
IsDate,
|
|
6
|
-
IsDateDisabled,
|
|
7
|
-
MaxDate,
|
|
8
|
-
MinDate,
|
|
9
|
-
MinMaxDate,
|
|
10
|
-
IsNumber,
|
|
11
|
-
MaxNumber,
|
|
12
|
-
MinMaxNumber,
|
|
13
|
-
MinNumber,
|
|
14
|
-
Required,
|
|
15
|
-
EqualsLength,
|
|
16
|
-
IsEmail,
|
|
17
|
-
MaxLength,
|
|
18
|
-
MinLength,
|
|
19
|
-
MinMaxLength,
|
|
20
|
-
Pattern,
|
|
21
|
-
} from '@lion/ui/form-core.js';
|
|
22
|
-
import { PhoneNumber } from '@lion/ui/input-tel.js';
|
|
3
|
+
import { loadDefaultFeedbackMessagesNoSideEffects } from './loadDefaultFeedbackMessagesNoSideEffects.js';
|
|
23
4
|
|
|
24
5
|
/**
|
|
25
6
|
* @typedef {import('../../form-core/types/validate/validate.js').FeedbackMessageData} FeedbackMessageData
|
|
26
7
|
*/
|
|
27
8
|
|
|
28
|
-
let loaded = false;
|
|
29
|
-
|
|
30
9
|
export function loadDefaultFeedbackMessages() {
|
|
31
|
-
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const forMessagesToBeReady = () =>
|
|
36
|
-
localize.loadNamespace(
|
|
37
|
-
{
|
|
38
|
-
'lion-validate': /** @param {string} locale */ locale => {
|
|
39
|
-
switch (locale) {
|
|
40
|
-
case 'bg-BG':
|
|
41
|
-
return import('@lion/ui/validate-messages-translations/bg-BG.js');
|
|
42
|
-
case 'bg':
|
|
43
|
-
return import('@lion/ui/validate-messages-translations/bg.js');
|
|
44
|
-
case 'cs-CZ':
|
|
45
|
-
return import('@lion/ui/validate-messages-translations/cs-CZ.js');
|
|
46
|
-
case 'cs':
|
|
47
|
-
return import('@lion/ui/validate-messages-translations/cs.js');
|
|
48
|
-
case 'de-DE':
|
|
49
|
-
return import('@lion/ui/validate-messages-translations/de-DE.js');
|
|
50
|
-
case 'de':
|
|
51
|
-
return import('@lion/ui/validate-messages-translations/de.js');
|
|
52
|
-
case 'en-AU':
|
|
53
|
-
return import('@lion/ui/validate-messages-translations/en-AU.js');
|
|
54
|
-
case 'en-GB':
|
|
55
|
-
return import('@lion/ui/validate-messages-translations/en-GB.js');
|
|
56
|
-
case 'en-US':
|
|
57
|
-
return import('@lion/ui/validate-messages-translations/en-US.js');
|
|
58
|
-
case 'en-PH':
|
|
59
|
-
return import('@lion/ui/validate-messages-translations/en-PH.js');
|
|
60
|
-
case 'en':
|
|
61
|
-
return import('@lion/ui/validate-messages-translations/en.js');
|
|
62
|
-
case 'es-ES':
|
|
63
|
-
return import('@lion/ui/validate-messages-translations/es-ES.js');
|
|
64
|
-
case 'es':
|
|
65
|
-
return import('@lion/ui/validate-messages-translations/es.js');
|
|
66
|
-
case 'fr-FR':
|
|
67
|
-
return import('@lion/ui/validate-messages-translations/fr-FR.js');
|
|
68
|
-
case 'fr-BE':
|
|
69
|
-
return import('@lion/ui/validate-messages-translations/fr-BE.js');
|
|
70
|
-
case 'fr':
|
|
71
|
-
return import('@lion/ui/validate-messages-translations/fr.js');
|
|
72
|
-
case 'hu-HU':
|
|
73
|
-
return import('@lion/ui/validate-messages-translations/hu-HU.js');
|
|
74
|
-
case 'hu':
|
|
75
|
-
return import('@lion/ui/validate-messages-translations/hu.js');
|
|
76
|
-
case 'it-IT':
|
|
77
|
-
return import('@lion/ui/validate-messages-translations/it-IT.js');
|
|
78
|
-
case 'it':
|
|
79
|
-
return import('@lion/ui/validate-messages-translations/it.js');
|
|
80
|
-
case 'nl-BE':
|
|
81
|
-
return import('@lion/ui/validate-messages-translations/nl-BE.js');
|
|
82
|
-
case 'nl-NL':
|
|
83
|
-
return import('@lion/ui/validate-messages-translations/nl-NL.js');
|
|
84
|
-
case 'nl':
|
|
85
|
-
return import('@lion/ui/validate-messages-translations/nl.js');
|
|
86
|
-
case 'pl-PL':
|
|
87
|
-
return import('@lion/ui/validate-messages-translations/pl-PL.js');
|
|
88
|
-
case 'pl':
|
|
89
|
-
return import('@lion/ui/validate-messages-translations/pl.js');
|
|
90
|
-
case 'ro-RO':
|
|
91
|
-
return import('@lion/ui/validate-messages-translations/ro-RO.js');
|
|
92
|
-
case 'ro':
|
|
93
|
-
return import('@lion/ui/validate-messages-translations/ro.js');
|
|
94
|
-
case 'ru-RU':
|
|
95
|
-
return import('@lion/ui/validate-messages-translations/ru-RU.js');
|
|
96
|
-
case 'ru':
|
|
97
|
-
return import('@lion/ui/validate-messages-translations/ru.js');
|
|
98
|
-
case 'sk-SK':
|
|
99
|
-
return import('@lion/ui/validate-messages-translations/sk-SK.js');
|
|
100
|
-
case 'sk':
|
|
101
|
-
return import('@lion/ui/validate-messages-translations/sk.js');
|
|
102
|
-
case 'uk-UA':
|
|
103
|
-
return import('@lion/ui/validate-messages-translations/uk-UA.js');
|
|
104
|
-
case 'uk':
|
|
105
|
-
return import('@lion/ui/validate-messages-translations/uk.js');
|
|
106
|
-
case 'zh-CN':
|
|
107
|
-
case 'zh':
|
|
108
|
-
return import('@lion/ui/validate-messages-translations/zh.js');
|
|
109
|
-
default:
|
|
110
|
-
return import('@lion/ui/validate-messages-translations/en.js');
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
{ locale: localize.locale },
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* @param {FeedbackMessageData} data
|
|
119
|
-
* @returns {Promise<string|Element>}
|
|
120
|
-
*/
|
|
121
|
-
const getLocalizedMessage = async data => {
|
|
122
|
-
await forMessagesToBeReady();
|
|
123
|
-
if (data) {
|
|
124
|
-
return localize.msg(`lion-validate:${data.type}.${data.name}`, data);
|
|
125
|
-
}
|
|
126
|
-
return '';
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
/** @param {FeedbackMessageData} data */
|
|
130
|
-
Required.getMessage = async data => getLocalizedMessage(data);
|
|
131
|
-
/** @param {FeedbackMessageData} data */
|
|
132
|
-
EqualsLength.getMessage = async data => getLocalizedMessage(data);
|
|
133
|
-
/** @param {FeedbackMessageData} data */
|
|
134
|
-
MinLength.getMessage = async data => getLocalizedMessage(data);
|
|
135
|
-
/** @param {FeedbackMessageData} data */
|
|
136
|
-
MaxLength.getMessage = async data => getLocalizedMessage(data);
|
|
137
|
-
/** @param {FeedbackMessageData} data */
|
|
138
|
-
MinMaxLength.getMessage = async data => getLocalizedMessage(data);
|
|
139
|
-
/** @param {FeedbackMessageData} data */
|
|
140
|
-
Pattern.getMessage = async data => getLocalizedMessage(data);
|
|
141
|
-
/** @param {FeedbackMessageData} data */
|
|
142
|
-
IsEmail.getMessage = async data => getLocalizedMessage(data);
|
|
143
|
-
/** @param {FeedbackMessageData} data */
|
|
144
|
-
IsNumber.getMessage = async data => getLocalizedMessage(data);
|
|
145
|
-
/** @param {FeedbackMessageData} data */
|
|
146
|
-
MinNumber.getMessage = async data => getLocalizedMessage(data);
|
|
147
|
-
/** @param {FeedbackMessageData} data */
|
|
148
|
-
MaxNumber.getMessage = async data => getLocalizedMessage(data);
|
|
149
|
-
/** @param {FeedbackMessageData} data */
|
|
150
|
-
MinMaxNumber.getMessage = async data => getLocalizedMessage(data);
|
|
151
|
-
/** @param {FeedbackMessageData} data */
|
|
152
|
-
IsDate.getMessage = async data => getLocalizedMessage(data);
|
|
153
|
-
/** @param {FeedbackMessageData} data */
|
|
154
|
-
MinDate.getMessage = async data => getLocalizedMessage(data);
|
|
155
|
-
/** @param {FeedbackMessageData} data */
|
|
156
|
-
MaxDate.getMessage = async data => getLocalizedMessage(data);
|
|
157
|
-
/** @param {FeedbackMessageData} data */
|
|
158
|
-
MinMaxDate.getMessage = async data => getLocalizedMessage(data);
|
|
159
|
-
/** @param {FeedbackMessageData} data */
|
|
160
|
-
IsDateDisabled.getMessage = async data => getLocalizedMessage(data);
|
|
161
|
-
|
|
162
|
-
DefaultSuccess.getMessage = async data => {
|
|
163
|
-
await forMessagesToBeReady();
|
|
164
|
-
const randomKeys = localize.msg('lion-validate:success.RandomOk').split(',');
|
|
165
|
-
const key = randomKeys[Math.floor(Math.random() * randomKeys.length)].trim();
|
|
166
|
-
return localize.msg(`lion-validate:${key}`, data);
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
/** @param {FeedbackMessageData} data */
|
|
170
|
-
// @ts-ignore
|
|
171
|
-
PhoneNumber.getMessage = async data => {
|
|
172
|
-
await forMessagesToBeReady();
|
|
173
|
-
const { type, outcome } = data;
|
|
174
|
-
if (outcome === 'too-long') {
|
|
175
|
-
// TODO: get max-length of country and use MaxLength validator
|
|
176
|
-
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
177
|
-
}
|
|
178
|
-
if (outcome === 'too-short') {
|
|
179
|
-
// TODO: get min-length of country and use MinLength validator
|
|
180
|
-
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
181
|
-
}
|
|
182
|
-
// TODO: add a more specific message here
|
|
183
|
-
if (outcome === 'invalid-country-code') {
|
|
184
|
-
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
185
|
-
}
|
|
186
|
-
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
loaded = true;
|
|
10
|
+
return loadDefaultFeedbackMessagesNoSideEffects({ localize });
|
|
190
11
|
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
import {
|
|
3
|
+
DefaultSuccess,
|
|
4
|
+
IsDate,
|
|
5
|
+
IsDateDisabled,
|
|
6
|
+
MaxDate,
|
|
7
|
+
MinDate,
|
|
8
|
+
MinMaxDate,
|
|
9
|
+
IsNumber,
|
|
10
|
+
MaxNumber,
|
|
11
|
+
MinMaxNumber,
|
|
12
|
+
MinNumber,
|
|
13
|
+
Required,
|
|
14
|
+
EqualsLength,
|
|
15
|
+
IsEmail,
|
|
16
|
+
MaxLength,
|
|
17
|
+
MinLength,
|
|
18
|
+
MinMaxLength,
|
|
19
|
+
Pattern,
|
|
20
|
+
} from '@lion/ui/form-core.js';
|
|
21
|
+
import { PhoneNumber } from '@lion/ui/input-tel.js';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @typedef {import('../../form-core/types/validate/validate.js').FeedbackMessageData} FeedbackMessageData
|
|
25
|
+
* @typedef {import('@lion/ui/localize.js').LocalizeManager} LocalizeManager
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
let loaded = false;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {{localize: LocalizeManager}} opts allow multiple lion/extension lib versions to provide their deduped instance of LocalizeManager
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
export function loadDefaultFeedbackMessagesNoSideEffects({ localize }) {
|
|
35
|
+
if (loaded === true) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const forMessagesToBeReady = () =>
|
|
40
|
+
localize.loadNamespace(
|
|
41
|
+
{
|
|
42
|
+
'lion-validate': /** @param {string} locale */ locale => {
|
|
43
|
+
switch (locale) {
|
|
44
|
+
case 'bg-BG':
|
|
45
|
+
return import('@lion/ui/validate-messages-translations/bg-BG.js');
|
|
46
|
+
case 'bg':
|
|
47
|
+
return import('@lion/ui/validate-messages-translations/bg.js');
|
|
48
|
+
case 'cs-CZ':
|
|
49
|
+
return import('@lion/ui/validate-messages-translations/cs-CZ.js');
|
|
50
|
+
case 'cs':
|
|
51
|
+
return import('@lion/ui/validate-messages-translations/cs.js');
|
|
52
|
+
case 'de-DE':
|
|
53
|
+
return import('@lion/ui/validate-messages-translations/de-DE.js');
|
|
54
|
+
case 'de':
|
|
55
|
+
return import('@lion/ui/validate-messages-translations/de.js');
|
|
56
|
+
case 'en-AU':
|
|
57
|
+
return import('@lion/ui/validate-messages-translations/en-AU.js');
|
|
58
|
+
case 'en-GB':
|
|
59
|
+
return import('@lion/ui/validate-messages-translations/en-GB.js');
|
|
60
|
+
case 'en-US':
|
|
61
|
+
return import('@lion/ui/validate-messages-translations/en-US.js');
|
|
62
|
+
case 'en-PH':
|
|
63
|
+
return import('@lion/ui/validate-messages-translations/en-PH.js');
|
|
64
|
+
case 'en':
|
|
65
|
+
return import('@lion/ui/validate-messages-translations/en.js');
|
|
66
|
+
case 'es-ES':
|
|
67
|
+
return import('@lion/ui/validate-messages-translations/es-ES.js');
|
|
68
|
+
case 'es':
|
|
69
|
+
return import('@lion/ui/validate-messages-translations/es.js');
|
|
70
|
+
case 'fr-FR':
|
|
71
|
+
return import('@lion/ui/validate-messages-translations/fr-FR.js');
|
|
72
|
+
case 'fr-BE':
|
|
73
|
+
return import('@lion/ui/validate-messages-translations/fr-BE.js');
|
|
74
|
+
case 'fr':
|
|
75
|
+
return import('@lion/ui/validate-messages-translations/fr.js');
|
|
76
|
+
case 'hu-HU':
|
|
77
|
+
return import('@lion/ui/validate-messages-translations/hu-HU.js');
|
|
78
|
+
case 'hu':
|
|
79
|
+
return import('@lion/ui/validate-messages-translations/hu.js');
|
|
80
|
+
case 'it-IT':
|
|
81
|
+
return import('@lion/ui/validate-messages-translations/it-IT.js');
|
|
82
|
+
case 'it':
|
|
83
|
+
return import('@lion/ui/validate-messages-translations/it.js');
|
|
84
|
+
case 'nl-BE':
|
|
85
|
+
return import('@lion/ui/validate-messages-translations/nl-BE.js');
|
|
86
|
+
case 'nl-NL':
|
|
87
|
+
return import('@lion/ui/validate-messages-translations/nl-NL.js');
|
|
88
|
+
case 'nl':
|
|
89
|
+
return import('@lion/ui/validate-messages-translations/nl.js');
|
|
90
|
+
case 'pl-PL':
|
|
91
|
+
return import('@lion/ui/validate-messages-translations/pl-PL.js');
|
|
92
|
+
case 'pl':
|
|
93
|
+
return import('@lion/ui/validate-messages-translations/pl.js');
|
|
94
|
+
case 'ro-RO':
|
|
95
|
+
return import('@lion/ui/validate-messages-translations/ro-RO.js');
|
|
96
|
+
case 'ro':
|
|
97
|
+
return import('@lion/ui/validate-messages-translations/ro.js');
|
|
98
|
+
case 'ru-RU':
|
|
99
|
+
return import('@lion/ui/validate-messages-translations/ru-RU.js');
|
|
100
|
+
case 'ru':
|
|
101
|
+
return import('@lion/ui/validate-messages-translations/ru.js');
|
|
102
|
+
case 'sk-SK':
|
|
103
|
+
return import('@lion/ui/validate-messages-translations/sk-SK.js');
|
|
104
|
+
case 'sk':
|
|
105
|
+
return import('@lion/ui/validate-messages-translations/sk.js');
|
|
106
|
+
case 'uk-UA':
|
|
107
|
+
return import('@lion/ui/validate-messages-translations/uk-UA.js');
|
|
108
|
+
case 'uk':
|
|
109
|
+
return import('@lion/ui/validate-messages-translations/uk.js');
|
|
110
|
+
case 'zh-CN':
|
|
111
|
+
case 'zh':
|
|
112
|
+
return import('@lion/ui/validate-messages-translations/zh.js');
|
|
113
|
+
default:
|
|
114
|
+
return import('@lion/ui/validate-messages-translations/en.js');
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{ locale: localize.locale },
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @param {FeedbackMessageData} data
|
|
123
|
+
* @returns {Promise<string|Element>}
|
|
124
|
+
*/
|
|
125
|
+
const getLocalizedMessage = async data => {
|
|
126
|
+
await forMessagesToBeReady();
|
|
127
|
+
if (data) {
|
|
128
|
+
return localize.msg(`lion-validate:${data.type}.${data.name}`, data);
|
|
129
|
+
}
|
|
130
|
+
return '';
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/** @param {FeedbackMessageData} data */
|
|
134
|
+
Required.getMessage = async data => getLocalizedMessage(data);
|
|
135
|
+
/** @param {FeedbackMessageData} data */
|
|
136
|
+
EqualsLength.getMessage = async data => getLocalizedMessage(data);
|
|
137
|
+
/** @param {FeedbackMessageData} data */
|
|
138
|
+
MinLength.getMessage = async data => getLocalizedMessage(data);
|
|
139
|
+
/** @param {FeedbackMessageData} data */
|
|
140
|
+
MaxLength.getMessage = async data => getLocalizedMessage(data);
|
|
141
|
+
/** @param {FeedbackMessageData} data */
|
|
142
|
+
MinMaxLength.getMessage = async data => getLocalizedMessage(data);
|
|
143
|
+
/** @param {FeedbackMessageData} data */
|
|
144
|
+
Pattern.getMessage = async data => getLocalizedMessage(data);
|
|
145
|
+
/** @param {FeedbackMessageData} data */
|
|
146
|
+
IsEmail.getMessage = async data => getLocalizedMessage(data);
|
|
147
|
+
/** @param {FeedbackMessageData} data */
|
|
148
|
+
IsNumber.getMessage = async data => getLocalizedMessage(data);
|
|
149
|
+
/** @param {FeedbackMessageData} data */
|
|
150
|
+
MinNumber.getMessage = async data => getLocalizedMessage(data);
|
|
151
|
+
/** @param {FeedbackMessageData} data */
|
|
152
|
+
MaxNumber.getMessage = async data => getLocalizedMessage(data);
|
|
153
|
+
/** @param {FeedbackMessageData} data */
|
|
154
|
+
MinMaxNumber.getMessage = async data => getLocalizedMessage(data);
|
|
155
|
+
/** @param {FeedbackMessageData} data */
|
|
156
|
+
IsDate.getMessage = async data => getLocalizedMessage(data);
|
|
157
|
+
/** @param {FeedbackMessageData} data */
|
|
158
|
+
MinDate.getMessage = async data => getLocalizedMessage(data);
|
|
159
|
+
/** @param {FeedbackMessageData} data */
|
|
160
|
+
MaxDate.getMessage = async data => getLocalizedMessage(data);
|
|
161
|
+
/** @param {FeedbackMessageData} data */
|
|
162
|
+
MinMaxDate.getMessage = async data => getLocalizedMessage(data);
|
|
163
|
+
/** @param {FeedbackMessageData} data */
|
|
164
|
+
IsDateDisabled.getMessage = async data => getLocalizedMessage(data);
|
|
165
|
+
|
|
166
|
+
DefaultSuccess.getMessage = async data => {
|
|
167
|
+
await forMessagesToBeReady();
|
|
168
|
+
const randomKeys = localize.msg('lion-validate:success.RandomOk').split(',');
|
|
169
|
+
const key = randomKeys[Math.floor(Math.random() * randomKeys.length)].trim();
|
|
170
|
+
return localize.msg(`lion-validate:${key}`, data);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/** @param {FeedbackMessageData} data */
|
|
174
|
+
// @ts-ignore
|
|
175
|
+
PhoneNumber.getMessage = async data => {
|
|
176
|
+
await forMessagesToBeReady();
|
|
177
|
+
const { type, outcome } = data;
|
|
178
|
+
if (outcome === 'too-long') {
|
|
179
|
+
// TODO: get max-length of country and use MaxLength validator
|
|
180
|
+
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
181
|
+
}
|
|
182
|
+
if (outcome === 'too-short') {
|
|
183
|
+
// TODO: get min-length of country and use MinLength validator
|
|
184
|
+
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
185
|
+
}
|
|
186
|
+
// TODO: add a more specific message here
|
|
187
|
+
if (outcome === 'invalid-country-code') {
|
|
188
|
+
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
189
|
+
}
|
|
190
|
+
return localize.msg(`lion-validate:${type}.Pattern`, data);
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
loaded = true;
|
|
194
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-unused-vars, no-param-reassign */
|
|
2
2
|
import { expect } from '@open-wc/testing';
|
|
3
|
-
import { localize } from '@lion/ui/localize.js';
|
|
4
3
|
import { Required } from '@lion/ui/form-core.js';
|
|
5
4
|
import { loadDefaultFeedbackMessages } from '@lion/ui/validate-messages.js';
|
|
6
5
|
|
|
@@ -20,7 +19,7 @@ function getProtectedMembers(validatorEl) {
|
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
describe('loadDefaultFeedbackMessages', () => {
|
|
23
|
-
it('will
|
|
22
|
+
it('will work without providing a LocalizeManager instance', async () => {
|
|
24
23
|
const el = new Required();
|
|
25
24
|
const { getMessage } = getProtectedMembers(el);
|
|
26
25
|
expect(await getMessage()).to.equals(
|
|
@@ -30,20 +29,4 @@ describe('loadDefaultFeedbackMessages', () => {
|
|
|
30
29
|
loadDefaultFeedbackMessages();
|
|
31
30
|
expect(await getMessage({ fieldName: 'password' })).to.equal('Please enter a(n) password.');
|
|
32
31
|
});
|
|
33
|
-
|
|
34
|
-
it('will await loading of translations when switching locale', async () => {
|
|
35
|
-
const el = new Required();
|
|
36
|
-
const { getMessage } = getProtectedMembers(el);
|
|
37
|
-
loadDefaultFeedbackMessages();
|
|
38
|
-
expect(await getMessage({ fieldName: 'password' })).to.equal('Please enter a(n) password.');
|
|
39
|
-
expect(await getMessage({ fieldName: 'user name' })).to.equal('Please enter a(n) user name.');
|
|
40
|
-
|
|
41
|
-
localize.locale = 'de-DE';
|
|
42
|
-
expect(await getMessage({ fieldName: 'Password' })).to.equal(
|
|
43
|
-
'Password muss ausgefüllt werden.',
|
|
44
|
-
);
|
|
45
|
-
expect(await getMessage({ fieldName: 'Benutzername' })).to.equal(
|
|
46
|
-
'Benutzername muss ausgefüllt werden.',
|
|
47
|
-
);
|
|
48
|
-
});
|
|
49
32
|
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars, no-param-reassign */
|
|
2
|
+
import { expect } from '@open-wc/testing';
|
|
3
|
+
import { localize } from '@lion/ui/localize.js';
|
|
4
|
+
import { Required } from '@lion/ui/form-core.js';
|
|
5
|
+
import { loadDefaultFeedbackMessagesNoSideEffects } from '@lion/ui/validate-messages-no-side-effects.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import('../../form-core/src/validate/Validator.js').Validator} Validator
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param {Validator} validatorEl
|
|
13
|
+
*/
|
|
14
|
+
function getProtectedMembers(validatorEl) {
|
|
15
|
+
// @ts-ignore protected members allowed in test
|
|
16
|
+
return {
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
getMessage: (...args) => validatorEl._getMessage(...args),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe('loadDefaultFeedbackMessagesNoSideEffects', () => {
|
|
23
|
+
it('will set default feedback message for Required', async () => {
|
|
24
|
+
const el = new Required();
|
|
25
|
+
const { getMessage } = getProtectedMembers(el);
|
|
26
|
+
expect(await getMessage()).to.equals(
|
|
27
|
+
'Please configure an error message for "Required" by overriding "static async getMessage()"',
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
loadDefaultFeedbackMessagesNoSideEffects({ localize });
|
|
31
|
+
expect(await getMessage({ fieldName: 'password' })).to.equal('Please enter a(n) password.');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('will await loading of translations when switching locale', async () => {
|
|
35
|
+
const el = new Required();
|
|
36
|
+
const { getMessage } = getProtectedMembers(el);
|
|
37
|
+
loadDefaultFeedbackMessagesNoSideEffects({ localize });
|
|
38
|
+
expect(await getMessage({ fieldName: 'password' })).to.equal('Please enter a(n) password.');
|
|
39
|
+
expect(await getMessage({ fieldName: 'user name' })).to.equal('Please enter a(n) user name.');
|
|
40
|
+
|
|
41
|
+
localize.locale = 'de-DE';
|
|
42
|
+
expect(await getMessage({ fieldName: 'Password' })).to.equal(
|
|
43
|
+
'Password muss ausgefüllt werden.',
|
|
44
|
+
);
|
|
45
|
+
expect(await getMessage({ fieldName: 'Benutzername' })).to.equal(
|
|
46
|
+
'Benutzername muss ausgefüllt werden.',
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
});
|