@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.
Files changed (147) hide show
  1. package/components/core/src/SlotMixin.js +2 -1
  2. package/components/dialog/test/lion-dialog.test.js +3 -7
  3. package/components/form-integrations/test/form-group-methods.test.js +6 -4
  4. package/components/form-integrations/test/form-integrations.test.js +10 -5
  5. package/components/form-integrations/test/helpers/umbrella-form.js +10 -0
  6. package/components/form-integrations/test/model-value-consistency.test.js +29 -20
  7. package/components/input-datepicker/src/LionInputDatepicker.js +64 -100
  8. package/components/input-datepicker/src/localizeNamespaceLoader.js +188 -0
  9. package/components/input-datepicker/test/lion-input-datepicker.test.js +15 -20
  10. package/components/input-datepicker/test-helpers/DatepickerInputObject.js +3 -3
  11. package/components/input-tel/src/parsers.js +1 -1
  12. package/components/listbox/test-suites/ListboxMixin.suite.js +3 -3
  13. package/components/localize/test/number/formatNumber.test.js +2 -6
  14. package/components/overlays/src/OverlayController.js +236 -289
  15. package/components/overlays/src/OverlayMixin.js +17 -18
  16. package/components/overlays/src/OverlaysManager.js +28 -53
  17. package/components/overlays/src/overlayDocumentStyle.js +24 -0
  18. package/components/overlays/src/overlayShadowDomStyle.js +138 -0
  19. package/components/overlays/src/singleton.js +3 -1
  20. package/components/overlays/test/ArrowMixin.test.js +0 -1
  21. package/components/overlays/test/OverlayController.test.js +306 -273
  22. package/components/overlays/test/OverlaysManager.test.js +23 -32
  23. package/components/overlays/test/global-positioning.test.js +4 -15
  24. package/components/overlays/test/local-positioning.test.js +65 -38
  25. package/components/overlays/test-suites/OverlayMixin.suite.js +18 -26
  26. package/components/overlays/types/OverlayConfig.ts +32 -11
  27. package/components/overlays/types/OverlayMixinTypes.ts +2 -2
  28. package/components/select-rich/src/LionSelectInvoker.js +2 -3
  29. package/components/select-rich/src/LionSelectRich.js +22 -20
  30. package/components/select-rich/test/lion-select-rich.test.js +5 -7
  31. package/components/validate-messages/src/loadDefaultFeedbackMessages.js +2 -181
  32. package/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.js +194 -0
  33. package/components/validate-messages/test/loadDefaultFeedbackMessages.test.js +1 -18
  34. package/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.js +49 -0
  35. package/custom-elements.json +370 -362
  36. package/dist-types/components/core/src/SlotMixin.d.ts.map +1 -1
  37. package/dist-types/components/form-integrations/test/helpers/umbrella-form.d.ts +4 -0
  38. package/dist-types/components/form-integrations/test/helpers/umbrella-form.d.ts.map +1 -1
  39. package/dist-types/components/form-integrations/test/model-value-consistency.test.d.ts.map +1 -1
  40. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts +3 -3
  41. package/dist-types/components/input-datepicker/src/LionInputDatepicker.d.ts.map +1 -1
  42. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts +4 -0
  43. package/dist-types/components/input-datepicker/src/localizeNamespaceLoader.d.ts.map +1 -0
  44. package/dist-types/components/overlays/src/OverlayController.d.ts +46 -101
  45. package/dist-types/components/overlays/src/OverlayController.d.ts.map +1 -1
  46. package/dist-types/components/overlays/src/OverlayMixin.d.ts.map +1 -1
  47. package/dist-types/components/overlays/src/OverlaysManager.d.ts +0 -7
  48. package/dist-types/components/overlays/src/OverlaysManager.d.ts.map +1 -1
  49. package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts +2 -0
  50. package/dist-types/components/overlays/src/overlayDocumentStyle.d.ts.map +1 -0
  51. package/dist-types/components/overlays/src/overlayShadowDomStyle.d.ts +2 -0
  52. package/dist-types/components/overlays/src/overlayShadowDomStyle.d.ts.map +1 -0
  53. package/dist-types/components/overlays/src/singleton.d.ts +2 -1
  54. package/dist-types/components/overlays/src/singleton.d.ts.map +1 -1
  55. package/dist-types/components/overlays/test-suites/OverlayMixin.suite.d.ts.map +1 -1
  56. package/dist-types/components/overlays/types/OverlayConfig.d.ts +14 -10
  57. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  58. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +2 -2
  59. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  60. package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts +3 -27
  61. package/dist-types/components/select-rich/src/LionSelectInvoker.d.ts.map +1 -1
  62. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  63. package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts.map +1 -1
  64. package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessages.d.ts +3 -0
  65. package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessages.d.ts.map +1 -1
  66. package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.d.ts +10 -0
  67. package/dist-types/components/validate-messages/src/loadDefaultFeedbackMessagesNoSideEffects.d.ts.map +1 -0
  68. package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessages.test.d.ts.map +1 -1
  69. package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.d.ts +2 -0
  70. package/dist-types/components/validate-messages/test/loadDefaultFeedbackMessagesNoSideEffects.d.ts.map +1 -0
  71. package/dist-types/exports/input-datepicker.d.ts +0 -1
  72. package/dist-types/exports/overlays.d.ts +0 -1
  73. package/dist-types/exports/types/overlays.d.ts +1 -0
  74. package/dist-types/exports/types/overlays.d.ts.map +1 -1
  75. package/dist-types/exports/validate-messages-no-side-effects.d.ts +2 -0
  76. package/dist-types/exports/validate-messages-no-side-effects.d.ts.map +1 -0
  77. package/dist-types/tsconfig.tsbuildinfo +1 -1
  78. package/docs/components/checkbox-group/overview.md +2 -2
  79. package/docs/components/collapsible/overview.md +1 -1
  80. package/docs/components/combobox/overview.md +1 -1
  81. package/docs/components/combobox/use-cases.md +1 -1
  82. package/docs/components/dialog/overview.md +5 -9
  83. package/docs/components/dialog/use-cases.md +43 -87
  84. package/docs/components/fieldset/overview.md +5 -5
  85. package/docs/components/form/overview.md +3 -3
  86. package/docs/components/icon/use-cases.md +1 -1
  87. package/docs/components/input/overview.md +1 -1
  88. package/docs/components/input-amount/overview.md +3 -3
  89. package/docs/components/input-date/overview.md +3 -3
  90. package/docs/components/input-datepicker/overview.md +5 -5
  91. package/docs/components/input-email/overview.md +2 -2
  92. package/docs/components/input-iban/overview.md +2 -2
  93. package/docs/components/input-range/overview.md +2 -2
  94. package/docs/components/input-stepper/overview.md +1 -1
  95. package/docs/components/input-tel/overview.md +1 -1
  96. package/docs/components/input-tel/use-cases.md +6 -6
  97. package/docs/components/input-tel-dropdown/overview.md +1 -1
  98. package/docs/components/radio-group/overview.md +3 -3
  99. package/docs/components/select-rich/use-cases.md +1 -1
  100. package/docs/components/tabs/examples.md +1 -1
  101. package/docs/fundamentals/index.md +4 -4
  102. package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +1 -1
  103. package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +1 -1
  104. package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +1 -1
  105. package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +1 -1
  106. package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
  107. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  108. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  109. package/docs/fundamentals/systems/core/overview.md +1 -1
  110. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  111. package/docs/fundamentals/systems/form/model-value.md +1 -1
  112. package/docs/fundamentals/systems/form/overview.md +28 -28
  113. package/docs/fundamentals/systems/form/use-cases.md +4 -0
  114. package/docs/fundamentals/systems/form/validate.md +1 -1
  115. package/docs/fundamentals/systems/localize/overview.md +4 -4
  116. package/docs/fundamentals/systems/overlays/assets/{applyDemoOverlayStyles.js → applyDemoOverlayStyles.mjs} +2 -1
  117. package/docs/fundamentals/systems/overlays/assets/demo-el-using-overlaymixin.mjs +119 -0
  118. package/docs/fundamentals/systems/overlays/assets/{demo-overlay-backdrop.js → demo-overlay-backdrop.mjs} +3 -4
  119. package/docs/fundamentals/systems/overlays/assets/demo-overlay-positioning.mjs +537 -0
  120. package/docs/fundamentals/systems/overlays/assets/umbrella-form.js +9 -2
  121. package/docs/fundamentals/systems/overlays/configuration.md +56 -54
  122. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  123. package/docs/fundamentals/systems/overlays/use-cases.md +83 -77
  124. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  125. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  126. package/docs/guides/how-to/create-a-custom-field.md +6 -6
  127. package/docs/guides/how-to/extend-a-native-input.md +3 -3
  128. package/docs/guides/index.md +8 -8
  129. package/docs/guides/principles/index.md +5 -5
  130. package/docs/guides/principles/styling.md +1 -1
  131. package/exports/input-datepicker.js +0 -1
  132. package/exports/overlays.js +0 -1
  133. package/exports/types/overlays.ts +1 -0
  134. package/exports/validate-messages-no-side-effects.js +1 -0
  135. package/package.json +2 -1
  136. package/components/input-datepicker/src/LionCalendarOverlayFrame.js +0 -125
  137. package/components/overlays/src/globalOverlaysStyle.js +0 -139
  138. package/dist-types/components/input-datepicker/src/LionCalendarOverlayFrame.d.ts +0 -10
  139. package/dist-types/components/input-datepicker/src/LionCalendarOverlayFrame.d.ts.map +0 -1
  140. package/dist-types/components/overlays/src/globalOverlaysStyle.d.ts +0 -2
  141. package/dist-types/components/overlays/src/globalOverlaysStyle.d.ts.map +0 -1
  142. package/dist-types/exports/define/lion-calendar-overlay-frame.d.ts +0 -2
  143. package/dist-types/exports/define/lion-calendar-overlay-frame.d.ts.map +0 -1
  144. package/docs/fundamentals/systems/overlays/assets/demo-overlay-system.js +0 -42
  145. package/docs/fundamentals/systems/overlays/form-integration.md +0 -65
  146. package/docs/fundamentals/systems/overlays/scope.md +0 -176
  147. 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 tag = defineCE(
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 tagString = unsafeStatic(tag);
167
-
165
+ const tag = unsafeStatic(tagString);
168
166
  const firstOption = /** @type {LionOption} */ (
169
- renderLitAsNode(html`<${tagString} checked .choiceValue=${10}></${tagString}>`)
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
- <${tagString} .choiceValue=${20}></${tagString}>
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
- if (loaded === true) {
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 set default feedback message for Required', async () => {
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
+ });