@lion/ui 0.6.1 → 0.7.1

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 (166) hide show
  1. package/components/core/src/browserDetection.js +27 -17
  2. package/components/form-core/test-suites/form-group/FormGroupMixin.suite.js +1 -1
  3. package/components/helpers/src/SbActionLogger.js +1 -0
  4. package/components/input-amount/src/parsers.js +11 -3
  5. package/components/input-amount/test/formatters.test.js +11 -0
  6. package/components/input-amount/test/parsers.test.js +32 -4
  7. package/components/input-date/src/LionInputDate.js +1 -1
  8. package/components/input-tel-dropdown/src/LionInputTelDropdown.js +1 -13
  9. package/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.js +2 -0
  10. package/components/input-tel-dropdown/types/index.ts +1 -0
  11. package/components/localize/src/date/getDateFormatBasedOnLocale.js +4 -3
  12. package/components/localize/src/date/parseDate.js +7 -2
  13. package/components/localize/src/date/utils/sanitizedDateTimeFormat.js +3 -2
  14. package/components/localize/src/number/formatNumber.js +1 -1
  15. package/components/localize/test/date/getDateFormatBasedOnLocale.test.js +6 -2
  16. package/components/localize/test/date/parseDate.test.js +8 -1
  17. package/components/localize/test/number/formatNumber.test.js +9 -0
  18. package/components/overlays/test/local-positioning.test.js +13 -21
  19. package/components/overlays/test/utils-tests/contain-focus.test.js +2 -2
  20. package/components/overlays/test/utils-tests/deep-contains.test.js +3 -3
  21. package/components/overlays/test/utils-tests/get-focusable-elements.test.js +1 -1
  22. package/components/select-rich/src/LionSelectRich.js +8 -1
  23. package/components/select-rich/test/lion-select-rich-interaction.test.js +27 -41
  24. package/components/select-rich/test/lion-select-rich.test.js +16 -14
  25. package/components/select-rich/test-helpers/getSelectRichMembers.js +18 -0
  26. package/custom-elements.json +531 -463
  27. package/dist-types/components/core/src/browserDetection.d.ts +3 -3
  28. package/dist-types/components/core/src/types.d.ts +1 -1
  29. package/dist-types/components/core/src/types.d.ts.map +1 -1
  30. package/dist-types/components/core/types/DisabledMixinTypes.d.ts +1 -1
  31. package/dist-types/components/core/types/DisabledMixinTypes.d.ts.map +1 -1
  32. package/dist-types/components/core/types/DisabledWithTabIndexMixinTypes.d.ts +1 -1
  33. package/dist-types/components/core/types/DisabledWithTabIndexMixinTypes.d.ts.map +1 -1
  34. package/dist-types/components/core/types/SlotMixinTypes.d.ts +4 -4
  35. package/dist-types/components/core/types/SlotMixinTypes.d.ts.map +1 -1
  36. package/dist-types/components/form-core/src/registration/FormControlsCollection.d.ts.map +1 -1
  37. package/dist-types/components/form-core/types/FocusMixinTypes.d.ts +1 -1
  38. package/dist-types/components/form-core/types/FocusMixinTypes.d.ts.map +1 -1
  39. package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts +2 -2
  40. package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts.map +1 -1
  41. package/dist-types/components/form-core/types/FormatMixinTypes.d.ts +2 -2
  42. package/dist-types/components/form-core/types/FormatMixinTypes.d.ts.map +1 -1
  43. package/dist-types/components/form-core/types/InteractionStateMixinTypes.d.ts +2 -2
  44. package/dist-types/components/form-core/types/InteractionStateMixinTypes.d.ts.map +1 -1
  45. package/dist-types/components/form-core/types/NativeTextFieldMixinTypes.d.ts +1 -1
  46. package/dist-types/components/form-core/types/NativeTextFieldMixinTypes.d.ts.map +1 -1
  47. package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +1 -1
  48. package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts.map +1 -1
  49. package/dist-types/components/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts +1 -1
  50. package/dist-types/components/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts.map +1 -1
  51. package/dist-types/components/form-core/types/choice-group/CustomChoiceGroupMixinTypes.d.ts +1 -1
  52. package/dist-types/components/form-core/types/choice-group/CustomChoiceGroupMixinTypes.d.ts.map +1 -1
  53. package/dist-types/components/form-core/types/form-group/FormGroupMixinTypes.d.ts +1 -1
  54. package/dist-types/components/form-core/types/form-group/FormGroupMixinTypes.d.ts.map +1 -1
  55. package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts +1 -1
  56. package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts.map +1 -1
  57. package/dist-types/components/form-core/types/registration/FormRegistrarMixinTypes.d.ts +1 -1
  58. package/dist-types/components/form-core/types/registration/FormRegistrarMixinTypes.d.ts.map +1 -1
  59. package/dist-types/components/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts +1 -1
  60. package/dist-types/components/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts.map +1 -1
  61. package/dist-types/components/form-core/types/utils/SyncUpdatableMixinTypes.d.ts +2 -2
  62. package/dist-types/components/form-core/types/utils/SyncUpdatableMixinTypes.d.ts.map +1 -1
  63. package/dist-types/components/form-core/types/validate/ValidateMixinTypes.d.ts +5 -5
  64. package/dist-types/components/form-core/types/validate/ValidateMixinTypes.d.ts.map +1 -1
  65. package/dist-types/components/form-core/types/validate/validate.d.ts +5 -5
  66. package/dist-types/components/form-core/types/validate/validate.d.ts.map +1 -1
  67. package/dist-types/components/helpers/src/SbActionLogger.d.ts.map +1 -1
  68. package/dist-types/components/input-amount/src/parsers.d.ts.map +1 -1
  69. package/dist-types/components/input-date/src/LionInputDate.d.ts.map +1 -1
  70. package/dist-types/components/input-file/types/input-file.d.ts +4 -4
  71. package/dist-types/components/input-file/types/input-file.d.ts.map +1 -1
  72. package/dist-types/components/input-stepper/src/LionInputStepper.d.ts +0 -1
  73. package/dist-types/components/input-stepper/src/LionInputStepper.d.ts.map +1 -1
  74. package/dist-types/components/input-tel/types/index.d.ts +1 -1
  75. package/dist-types/components/input-tel/types/index.d.ts.map +1 -1
  76. package/dist-types/components/input-tel-dropdown/src/LionInputTelDropdown.d.ts.map +1 -1
  77. package/dist-types/components/input-tel-dropdown/test-suites/LionInputTelDropdown.suite.d.ts.map +1 -1
  78. package/dist-types/components/input-tel-dropdown/types/index.d.ts +6 -5
  79. package/dist-types/components/input-tel-dropdown/types/index.d.ts.map +1 -1
  80. package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts +1 -1
  81. package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts.map +1 -1
  82. package/dist-types/components/localize/src/date/getDateFormatBasedOnLocale.d.ts +2 -1
  83. package/dist-types/components/localize/src/date/getDateFormatBasedOnLocale.d.ts.map +1 -1
  84. package/dist-types/components/localize/src/date/parseDate.d.ts +3 -1
  85. package/dist-types/components/localize/src/date/parseDate.d.ts.map +1 -1
  86. package/dist-types/components/localize/src/date/utils/sanitizedDateTimeFormat.d.ts +2 -1
  87. package/dist-types/components/localize/src/date/utils/sanitizedDateTimeFormat.d.ts.map +1 -1
  88. package/dist-types/components/localize/types/LocalizeMixinTypes.d.ts +4 -4
  89. package/dist-types/components/localize/types/LocalizeMixinTypes.d.ts.map +1 -1
  90. package/dist-types/components/overlays/src/utils/adopt-styles.d.ts +6 -8
  91. package/dist-types/components/overlays/src/utils/adopt-styles.d.ts.map +1 -1
  92. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts +1 -1
  93. package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
  94. package/dist-types/components/overlays/types/OverlayConfig.d.ts +1 -1
  95. package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
  96. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -1
  97. package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
  98. package/dist-types/components/select-rich/src/LionSelectRich.d.ts +1 -0
  99. package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
  100. package/dist-types/components/select-rich/test/lion-select-rich-interaction.test.d.ts.map +1 -1
  101. package/dist-types/components/select-rich/test/lion-select-rich.test.d.ts.map +1 -1
  102. package/dist-types/components/select-rich/test-helpers/getSelectRichMembers.d.ts +19 -0
  103. package/dist-types/components/select-rich/test-helpers/getSelectRichMembers.d.ts.map +1 -0
  104. package/dist-types/exports/select-rich-test-helpers.d.ts +2 -0
  105. package/dist-types/exports/select-rich-test-helpers.d.ts.map +1 -0
  106. package/dist-types/tsconfig.tsbuildinfo +1 -1
  107. package/docs/components/checkbox-group/overview.md +2 -2
  108. package/docs/components/collapsible/overview.md +1 -1
  109. package/docs/components/combobox/overview.md +1 -1
  110. package/docs/components/combobox/src/gh-combobox/gh-combobox.js +1 -1
  111. package/docs/components/combobox/src/google-combobox/google-combobox.js +1 -1
  112. package/docs/components/combobox/use-cases.md +1 -1
  113. package/docs/components/dialog/overview.md +1 -1
  114. package/docs/components/fieldset/overview.md +5 -5
  115. package/docs/components/form/overview.md +3 -3
  116. package/docs/components/icon/use-cases.md +1 -1
  117. package/docs/components/input/overview.md +1 -1
  118. package/docs/components/input-amount/overview.md +4 -4
  119. package/docs/components/input-date/overview.md +5 -5
  120. package/docs/components/input-datepicker/overview.md +5 -5
  121. package/docs/components/input-email/overview.md +2 -2
  122. package/docs/components/input-file/overview.md +1 -1
  123. package/docs/components/input-iban/overview.md +2 -2
  124. package/docs/components/input-range/overview.md +2 -2
  125. package/docs/components/input-stepper/overview.md +1 -1
  126. package/docs/components/input-tel/overview.md +1 -1
  127. package/docs/components/input-tel/use-cases.md +6 -6
  128. package/docs/components/input-tel-dropdown/overview.md +1 -1
  129. package/docs/components/input-tel-dropdown/src/intl-input-tel-dropdown.js +1 -0
  130. package/docs/components/listbox/use-cases.md +1 -1
  131. package/docs/components/radio-group/overview.md +3 -3
  132. package/docs/components/select/use-cases.md +1 -1
  133. package/docs/components/select-rich/use-cases.md +1 -1
  134. package/docs/components/tabs/examples.md +1 -1
  135. package/docs/fundamentals/index.md +4 -4
  136. package/docs/fundamentals/node-tools/providence-analytics/LocalConfiguration.md +1 -1
  137. package/docs/fundamentals/node-tools/providence-analytics/QueryResult.md +1 -1
  138. package/docs/fundamentals/node-tools/providence-analytics/analyzer.md +1 -1
  139. package/docs/fundamentals/node-tools/providence-analytics/dashboard.md +1 -1
  140. package/docs/fundamentals/node-tools/providence-analytics/overview.md +3 -3
  141. package/docs/fundamentals/node-tools/publish-docs/overview.md +3 -3
  142. package/docs/fundamentals/node-tools/rocket-preset-extend-lion-docs/overview.md +2 -2
  143. package/docs/fundamentals/rationales/accessibility.md +1 -1
  144. package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
  145. package/docs/fundamentals/systems/core/overview.md +1 -1
  146. package/docs/fundamentals/systems/form/assets/h-output.js +1 -0
  147. package/docs/fundamentals/systems/form/formatting-and-parsing.md +4 -4
  148. package/docs/fundamentals/systems/form/interaction-states.md +6 -0
  149. package/docs/fundamentals/systems/form/model-value.md +10 -1
  150. package/docs/fundamentals/systems/form/overview.md +28 -28
  151. package/docs/fundamentals/systems/form/validate.md +2 -2
  152. package/docs/fundamentals/systems/localize/overview.md +4 -4
  153. package/docs/fundamentals/systems/overlays/configuration.md +2 -2
  154. package/docs/fundamentals/systems/overlays/overview.md +5 -5
  155. package/docs/fundamentals/systems/overlays/use-cases.md +2 -2
  156. package/docs/fundamentals/tools/helpers/overview.md +1 -1
  157. package/docs/fundamentals/tools/singleton-manager/overview.md +4 -4
  158. package/docs/guides/how-to/create-a-custom-field.md +5 -5
  159. package/docs/guides/how-to/create-a-form.md +4 -4
  160. package/docs/guides/how-to/extend-a-native-input.md +2 -2
  161. package/docs/guides/index.md +8 -8
  162. package/docs/guides/principles/index.md +5 -5
  163. package/docs/guides/principles/styling.md +1 -1
  164. package/exports/select-rich-test-helpers.js +1 -0
  165. package/package.json +1 -1
  166. package/select-rich-test-helpers.js +1 -0
@@ -7,6 +7,7 @@ import '@lion/ui/define/lion-option.js';
7
7
 
8
8
  import '@lion/ui/define/lion-listbox.js';
9
9
  import '@lion/ui/define/lion-select-rich.js';
10
+ import { getSelectRichMembers } from '@lion/ui/select-rich-test-helpers.js';
10
11
 
11
12
  /**
12
13
  * @typedef {import('../src/LionSelectRich.js').LionSelectRich} LionSelectRich
@@ -23,32 +24,6 @@ function mimicKeyPress(el, key, code = '') {
23
24
  el.dispatchEvent(new KeyboardEvent('keyup', { key, code }));
24
25
  }
25
26
 
26
- /**
27
- * @param {LionSelectRich} lionSelectEl
28
- */
29
- function getNodes(lionSelectEl) {
30
- const {
31
- // @ts-ignore protected members allowed in test
32
- _invokerNode: invoker,
33
- // @ts-ignore protected members allowed in test
34
- _feedbackNode: feedback,
35
- // @ts-ignore protected members allowed in test
36
- _labelNode: label,
37
- // @ts-ignore protected members allowed in test
38
- _helpTextNode: helpText,
39
- // @ts-ignore protected members allowed in test
40
- _listboxNode: listbox,
41
- // @ts-ignore protected members allowed in test
42
- } = lionSelectEl;
43
- return {
44
- invoker,
45
- feedback,
46
- label,
47
- helpText,
48
- listbox,
49
- };
50
- }
51
-
52
27
  describe('lion-select-rich interactions', () => {
53
28
  describe('Interaction mode', () => {
54
29
  it('autodetects interactionMode if not defined', async () => {
@@ -131,9 +106,15 @@ describe('lion-select-rich interactions', () => {
131
106
  });
132
107
  }
133
108
 
109
+ let isTriggeredByUser;
134
110
  const el = /** @type {LionSelectRich} */ (
135
111
  await fixture(html`
136
- <lion-select-rich interaction-mode="windows/linux">
112
+ <lion-select-rich
113
+ interaction-mode="windows/linux"
114
+ @model-value-changed="${(/** @type {CustomEvent} */ event) => {
115
+ isTriggeredByUser = event.detail.isTriggeredByUser;
116
+ }}"
117
+ >
137
118
  <lion-options slot="input">
138
119
  <lion-option .choiceValue=${10}>Item 1</lion-option>
139
120
  <lion-option .choiceValue=${20}>Item 2</lion-option>
@@ -150,10 +131,14 @@ describe('lion-select-rich interactions', () => {
150
131
  el.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
151
132
  expect(el.checkedIndex).to.equal(1);
152
133
  expectOnlyGivenOneOptionToBeChecked(options, 1);
134
+ expect(isTriggeredByUser).to.be.true;
135
+
136
+ isTriggeredByUser = false;
153
137
 
154
138
  el.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowUp' }));
155
139
  expect(el.checkedIndex).to.equal(0);
156
140
  expectOnlyGivenOneOptionToBeChecked(options, 0);
141
+ expect(isTriggeredByUser).to.be.true;
157
142
  });
158
143
 
159
144
  it('checkes a value with [character] keys while listbox unopened', async () => {
@@ -187,8 +172,8 @@ describe('lion-select-rich interactions', () => {
187
172
  </lion-select-rich>
188
173
  `)
189
174
  );
190
- const { invoker } = getNodes(el);
191
- expect(invoker.tabIndex).to.equal(-1);
175
+ const { _invokerNode } = getSelectRichMembers(el);
176
+ expect(_invokerNode.tabIndex).to.equal(-1);
192
177
  });
193
178
 
194
179
  it('cannot be opened via click if disabled', async () => {
@@ -199,8 +184,9 @@ describe('lion-select-rich interactions', () => {
199
184
  </lion-select-rich>
200
185
  `)
201
186
  );
202
- const { invoker } = getNodes(el);
203
- invoker.click();
187
+ const { _invokerNode, _overlayCtrl } = getSelectRichMembers(el);
188
+ _invokerNode.click();
189
+ await _overlayCtrl._showComplete;
204
190
  expect(el.opened).to.be.false;
205
191
  });
206
192
 
@@ -212,11 +198,11 @@ describe('lion-select-rich interactions', () => {
212
198
  </lion-select-rich>
213
199
  `)
214
200
  );
215
- const { invoker } = getNodes(el);
216
- expect(invoker.hasAttribute('disabled')).to.be.true;
201
+ const { _invokerNode } = getSelectRichMembers(el);
202
+ expect(_invokerNode.hasAttribute('disabled')).to.be.true;
217
203
  el.removeAttribute('disabled');
218
204
  await el.updateComplete;
219
- expect(invoker.hasAttribute('disabled')).to.be.false;
205
+ expect(_invokerNode.hasAttribute('disabled')).to.be.false;
220
206
  });
221
207
  });
222
208
 
@@ -232,10 +218,10 @@ describe('lion-select-rich interactions', () => {
232
218
  </lion-select-rich>
233
219
  `)
234
220
  );
235
- const { invoker } = getNodes(el);
221
+ const { _invokerNode } = getSelectRichMembers(el);
236
222
  expect(el.touched).to.be.false;
237
- await triggerFocusFor(invoker);
238
- await triggerBlurFor(invoker);
223
+ await triggerFocusFor(_invokerNode);
224
+ await triggerBlurFor(_invokerNode);
239
225
  expect(el.touched).to.be.true;
240
226
  });
241
227
  });
@@ -252,21 +238,21 @@ describe('lion-select-rich interactions', () => {
252
238
  </lion-select-rich>
253
239
  `)
254
240
  );
255
- const { invoker } = getNodes(el);
241
+ const { _invokerNode } = getSelectRichMembers(el);
256
242
  const options = el.formElements;
257
243
  await el.feedbackComplete;
258
244
  await el.updateComplete;
259
- expect(invoker.getAttribute('aria-invalid')).to.equal('false');
245
+ expect(_invokerNode.getAttribute('aria-invalid')).to.equal('false');
260
246
 
261
247
  options[0].checked = true;
262
248
  await el.feedbackComplete;
263
249
  await el.updateComplete;
264
- expect(invoker.getAttribute('aria-invalid')).to.equal('true');
250
+ expect(_invokerNode.getAttribute('aria-invalid')).to.equal('true');
265
251
 
266
252
  options[1].checked = true;
267
253
  await el.feedbackComplete;
268
254
  await el.updateComplete;
269
- expect(invoker.getAttribute('aria-invalid')).to.equal('false');
255
+ expect(_invokerNode.getAttribute('aria-invalid')).to.equal('false');
270
256
  });
271
257
  });
272
258
  });
@@ -1,6 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  import { LionOption } from '@lion/ui/listbox.js';
3
- import { getListboxMembers } from '@lion/ui/listbox-test-helpers.js';
4
3
  import { OverlayController } from '@lion/ui/overlays.js';
5
4
  import { mimicClick } from '@lion/ui/overlays-test-helpers.js';
6
5
  import { LionSelectInvoker, LionSelectRich } from '@lion/ui/select-rich.js';
@@ -17,6 +16,7 @@ import {
17
16
  nextFrame,
18
17
  unsafeStatic,
19
18
  } from '@open-wc/testing';
19
+ import { getSelectRichMembers } from '@lion/ui/select-rich-test-helpers.js';
20
20
 
21
21
  /**
22
22
  * @typedef {import('../../listbox/src/LionOptions.js').LionOptions} LionOptions
@@ -24,19 +24,6 @@ import {
24
24
  * @typedef {import('../../form-core/types/FormControlMixinTypes.js').FormControlHost} FormControlHost
25
25
  */
26
26
 
27
- /**
28
- * @param { LionSelectRich } el
29
- */
30
- function getSelectRichMembers(el) {
31
- const obj = getListboxMembers(el);
32
- // eslint-disable-next-line no-return-assign
33
- return {
34
- ...obj,
35
- // @ts-ignore [allow-protected] in test
36
- ...{ _invokerNode: el._invokerNode, _overlayCtrl: el._overlayCtrl },
37
- };
38
- }
39
-
40
27
  /**
41
28
  * @typedef {import('lit').TemplateResult} TemplateResult
42
29
  */
@@ -329,6 +316,21 @@ describe('lion-select-rich', () => {
329
316
  expect(elSingleoption.opened).to.be.false;
330
317
  });
331
318
 
319
+ it('stays closed with [ArrowUp] or [ArrowDown] key in readonly mode', async () => {
320
+ const elReadOnly = await fixture(html`
321
+ <lion-select-rich readonly>
322
+ <lion-option .choiceValue=${10}>Item 1</lion-option>
323
+ <lion-option .choiceValue=${20} checked>Item 2</lion-option>
324
+ </lion-select-rich>
325
+ `);
326
+
327
+ elReadOnly.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
328
+ expect(elReadOnly.opened).to.be.false;
329
+
330
+ elReadOnly.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowUp' }));
331
+ expect(elReadOnly.opened).to.be.false;
332
+ });
333
+
332
334
  it('sets inheritsReferenceWidth to min by default', async () => {
333
335
  const el = await fixture(html`
334
336
  <lion-select-rich name="favoriteColor" label="Favorite color">
@@ -0,0 +1,18 @@
1
+ import { getListboxMembers } from '@lion/ui/listbox-test-helpers.js';
2
+
3
+ /**
4
+ * @typedef {import('../src/LionSelectRich.js').LionSelectRich} LionSelectRich
5
+ */
6
+
7
+ /**
8
+ * @param { LionSelectRich } el
9
+ */
10
+ export function getSelectRichMembers(el) {
11
+ const obj = getListboxMembers(el);
12
+ // eslint-disable-next-line no-return-assign
13
+ return {
14
+ ...obj,
15
+ // @ts-ignore [allow-protected] in test
16
+ ...{ _invokerNode: el._invokerNode, _overlayCtrl: el._overlayCtrl },
17
+ };
18
+ }