@lion/ui 0.7.0 → 0.7.2
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/helpers/src/SbActionLogger.js +1 -0
- package/components/input-date/src/LionInputDate.js +1 -1
- package/components/localize/src/date/getDateFormatBasedOnLocale.js +4 -3
- package/components/localize/src/date/parseDate.js +7 -2
- package/components/localize/src/date/utils/sanitizedDateTimeFormat.js +3 -2
- package/components/localize/test/date/getDateFormatBasedOnLocale.test.js +6 -2
- package/components/localize/test/date/parseDate.test.js +8 -1
- package/components/select-rich/src/LionSelectRich.js +10 -0
- package/components/select-rich/test/lion-select-rich-interaction.test.js +11 -1
- package/components/select-rich/test/lion-select-rich.test.js +12 -0
- package/custom-elements.json +493 -468
- package/dist-types/components/core/src/types.d.ts +1 -1
- package/dist-types/components/core/src/types.d.ts.map +1 -1
- package/dist-types/components/core/types/DisabledMixinTypes.d.ts +1 -1
- package/dist-types/components/core/types/DisabledMixinTypes.d.ts.map +1 -1
- package/dist-types/components/core/types/DisabledWithTabIndexMixinTypes.d.ts +1 -1
- package/dist-types/components/core/types/DisabledWithTabIndexMixinTypes.d.ts.map +1 -1
- package/dist-types/components/core/types/SlotMixinTypes.d.ts +4 -4
- package/dist-types/components/core/types/SlotMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/src/registration/FormControlsCollection.d.ts.map +1 -1
- package/dist-types/components/form-core/types/FocusMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/FocusMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts +2 -2
- package/dist-types/components/form-core/types/FormControlMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/FormatMixinTypes.d.ts +2 -2
- package/dist-types/components/form-core/types/FormatMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/InteractionStateMixinTypes.d.ts +2 -2
- package/dist-types/components/form-core/types/InteractionStateMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/NativeTextFieldMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/NativeTextFieldMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/choice-group/CustomChoiceGroupMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/choice-group/CustomChoiceGroupMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/form-group/FormGroupMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/form-group/FormGroupMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/registration/FormRegisteringMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/registration/FormRegistrarMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/registration/FormRegistrarMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts +1 -1
- package/dist-types/components/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/utils/SyncUpdatableMixinTypes.d.ts +2 -2
- package/dist-types/components/form-core/types/utils/SyncUpdatableMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/validate/ValidateMixinTypes.d.ts +5 -5
- package/dist-types/components/form-core/types/validate/ValidateMixinTypes.d.ts.map +1 -1
- package/dist-types/components/form-core/types/validate/validate.d.ts +5 -5
- package/dist-types/components/form-core/types/validate/validate.d.ts.map +1 -1
- package/dist-types/components/helpers/src/SbActionLogger.d.ts.map +1 -1
- package/dist-types/components/input-date/src/LionInputDate.d.ts.map +1 -1
- package/dist-types/components/input-file/types/input-file.d.ts +4 -4
- package/dist-types/components/input-file/types/input-file.d.ts.map +1 -1
- package/dist-types/components/input-stepper/src/LionInputStepper.d.ts +0 -1
- package/dist-types/components/input-stepper/src/LionInputStepper.d.ts.map +1 -1
- package/dist-types/components/input-tel/types/index.d.ts +1 -1
- package/dist-types/components/input-tel/types/index.d.ts.map +1 -1
- package/dist-types/components/input-tel-dropdown/types/index.d.ts +5 -5
- package/dist-types/components/input-tel-dropdown/types/index.d.ts.map +1 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts +1 -1
- package/dist-types/components/listbox/types/ListboxMixinTypes.d.ts.map +1 -1
- package/dist-types/components/localize/src/date/getDateFormatBasedOnLocale.d.ts +2 -1
- package/dist-types/components/localize/src/date/getDateFormatBasedOnLocale.d.ts.map +1 -1
- package/dist-types/components/localize/src/date/parseDate.d.ts +3 -1
- package/dist-types/components/localize/src/date/parseDate.d.ts.map +1 -1
- package/dist-types/components/localize/src/date/utils/sanitizedDateTimeFormat.d.ts +2 -1
- package/dist-types/components/localize/src/date/utils/sanitizedDateTimeFormat.d.ts.map +1 -1
- package/dist-types/components/localize/types/LocalizeMixinTypes.d.ts +4 -4
- package/dist-types/components/localize/types/LocalizeMixinTypes.d.ts.map +1 -1
- package/dist-types/components/overlays/src/utils/adopt-styles.d.ts +6 -8
- package/dist-types/components/overlays/src/utils/adopt-styles.d.ts.map +1 -1
- package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts +1 -1
- package/dist-types/components/overlays/types/ArrowMixinTypes.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts +1 -1
- package/dist-types/components/overlays/types/OverlayConfig.d.ts.map +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts +1 -1
- package/dist-types/components/overlays/types/OverlayMixinTypes.d.ts.map +1 -1
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts +1 -0
- package/dist-types/components/select-rich/src/LionSelectRich.d.ts.map +1 -1
- 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 +1 -1
- 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 +5 -5
- package/docs/components/input-datepicker/overview.md +5 -5
- package/docs/components/input-email/overview.md +2 -2
- package/docs/components/input-file/overview.md +1 -1
- 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/listbox/use-cases.md +1 -1
- package/docs/components/radio-group/overview.md +3 -3
- package/docs/components/select/use-cases.md +1 -1
- 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/rationales/accessibility.md +1 -1
- package/docs/fundamentals/systems/core/SlotMixin.md +1 -1
- package/docs/fundamentals/systems/core/overview.md +1 -1
- package/docs/fundamentals/systems/form/assets/h-output.js +1 -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/overview.md +4 -4
- 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/ajax/overview.md +19 -18
- 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 +1 -1
|
@@ -21,7 +21,7 @@ export class LionInputDate extends LocalizeMixin(LionInput) {
|
|
|
21
21
|
/**
|
|
22
22
|
* @param {string} value
|
|
23
23
|
*/
|
|
24
|
-
this.parser = value => (value === '' ? undefined : parseDate(value));
|
|
24
|
+
this.parser = value => (value === '' ? undefined : parseDate(value, this.formatOptions));
|
|
25
25
|
this.formatter = formatDate;
|
|
26
26
|
this.defaultValidators.push(new IsDate());
|
|
27
27
|
// Just explicitly make clear we shouldn't use type 'date'
|
|
@@ -3,9 +3,10 @@ import { splitDate } from './utils/splitDate.js';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* To compute the localized date format
|
|
6
|
+
* @param {string} [locale]
|
|
6
7
|
* @returns {string}
|
|
7
8
|
*/
|
|
8
|
-
export function getDateFormatBasedOnLocale() {
|
|
9
|
+
export function getDateFormatBasedOnLocale(locale) {
|
|
9
10
|
/**
|
|
10
11
|
*
|
|
11
12
|
* @param {ArrayLike.<string>} dateParts
|
|
@@ -35,9 +36,9 @@ export function getDateFormatBasedOnLocale() {
|
|
|
35
36
|
date.setDate(20);
|
|
36
37
|
date.setMonth(11);
|
|
37
38
|
date.setFullYear(2012);
|
|
38
|
-
|
|
39
|
+
const options = locale ? { locale } : {};
|
|
39
40
|
// Strange characters added by IE11 need to be taken into account here
|
|
40
|
-
const formattedDate = sanitizedDateTimeFormat(date);
|
|
41
|
+
const formattedDate = sanitizedDateTimeFormat(date, options);
|
|
41
42
|
|
|
42
43
|
// For Dutch locale, dateParts would match: [ 1:'20', 2:'-', 3:'12', 4:'-', 5:'2012' ]
|
|
43
44
|
const dateParts = splitDate(formattedDate);
|
|
@@ -2,6 +2,10 @@ import { getDateFormatBasedOnLocale } from './getDateFormatBasedOnLocale.js';
|
|
|
2
2
|
import { getLocalizeManager } from '../getLocalizeManager.js';
|
|
3
3
|
import { addLeadingZero } from './utils/addLeadingZero.js';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import('../../types/LocalizeMixinTypes.js').FormatDateOptions} FormatDateOptions
|
|
7
|
+
*/
|
|
8
|
+
|
|
5
9
|
/**
|
|
6
10
|
* @param {function} fn
|
|
7
11
|
*/
|
|
@@ -26,15 +30,16 @@ const memoizedGetDateFormatBasedOnLocale = memoize(getDateFormatBasedOnLocale);
|
|
|
26
30
|
* To parse a date into the right format
|
|
27
31
|
*
|
|
28
32
|
* @param {string} dateString
|
|
33
|
+
* @param {FormatDateOptions} [options] Intl options are available
|
|
29
34
|
* @returns {Date | undefined}
|
|
30
35
|
*/
|
|
31
|
-
export function parseDate(dateString) {
|
|
36
|
+
export function parseDate(dateString, options) {
|
|
32
37
|
const localizeManager = getLocalizeManager();
|
|
33
38
|
|
|
34
39
|
const stringToParse = addLeadingZero(dateString);
|
|
35
40
|
let parsedString;
|
|
36
41
|
|
|
37
|
-
switch (memoizedGetDateFormatBasedOnLocale(localizeManager.locale)) {
|
|
42
|
+
switch (memoizedGetDateFormatBasedOnLocale(options?.locale || localizeManager.locale)) {
|
|
38
43
|
case 'day-month-year':
|
|
39
44
|
parsedString = `${stringToParse.slice(6, 10)}/${stringToParse.slice(
|
|
40
45
|
3,
|
|
@@ -5,9 +5,10 @@ import { clean } from './clean.js';
|
|
|
5
5
|
* To sanitize a date from IE11 handling
|
|
6
6
|
*
|
|
7
7
|
* @param {Date} date
|
|
8
|
+
* @param {import('../../../types/LocalizeMixinTypes.js').FormatDateOptions} [options] Intl options are available
|
|
8
9
|
* @returns {string}
|
|
9
10
|
*/
|
|
10
|
-
export function sanitizedDateTimeFormat(date) {
|
|
11
|
-
const fDate = formatDate(date);
|
|
11
|
+
export function sanitizedDateTimeFormat(date, options) {
|
|
12
|
+
const fDate = formatDate(date, options);
|
|
12
13
|
return clean(fDate);
|
|
13
14
|
}
|
|
@@ -7,15 +7,19 @@ import { localizeTearDown } from '@lion/ui/localize-test-helpers.js';
|
|
|
7
7
|
|
|
8
8
|
describe('getDateFormatBasedOnLocale()', () => {
|
|
9
9
|
const localizeManager = getLocalizeManager();
|
|
10
|
-
|
|
11
10
|
beforeEach(() => {
|
|
12
11
|
localizeTearDown();
|
|
13
12
|
});
|
|
14
13
|
|
|
15
|
-
it('returns the positions of day, month and year', async () => {
|
|
14
|
+
it('returns the positions of day, month and year with locale set globally', async () => {
|
|
16
15
|
localizeManager.locale = 'en-GB';
|
|
17
16
|
expect(getDateFormatBasedOnLocale()).to.equal('day-month-year');
|
|
18
17
|
localizeManager.locale = 'en-US';
|
|
19
18
|
expect(getDateFormatBasedOnLocale()).to.equal('month-day-year');
|
|
20
19
|
});
|
|
20
|
+
|
|
21
|
+
it('returns the positions of day, month and year with given locale', async () => {
|
|
22
|
+
expect(getDateFormatBasedOnLocale('en-GB')).to.equal('day-month-year');
|
|
23
|
+
expect(getDateFormatBasedOnLocale('en-US')).to.equal('month-day-year');
|
|
24
|
+
});
|
|
21
25
|
});
|
|
@@ -51,13 +51,20 @@ describe('parseDate()', () => {
|
|
|
51
51
|
expect(equalsDate(parseDate('14.12.1976 r.'), new Date('1976/12/14'))).to.equal(true);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
it('handles different locales', () => {
|
|
54
|
+
it('handles different locales globally set', () => {
|
|
55
55
|
localizeManager.locale = 'en-GB';
|
|
56
56
|
expect(equalsDate(parseDate('31-12-1976'), new Date('1976/12/31'))).to.equal(true);
|
|
57
57
|
localizeManager.locale = 'en-US';
|
|
58
58
|
expect(equalsDate(parseDate('12-31-1976'), new Date('1976/12/31'))).to.equal(true);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
+
it('handles different locales as option', () => {
|
|
62
|
+
const optionEnGb = { locale: 'en-GB' };
|
|
63
|
+
expect(equalsDate(parseDate('31-12-1976', optionEnGb), new Date('1976/12/31'))).to.equal(true);
|
|
64
|
+
const optionEnUs = { locale: 'en-US' };
|
|
65
|
+
expect(equalsDate(parseDate('12-31-1976', optionEnUs), new Date('1976/12/31'))).to.equal(true);
|
|
66
|
+
});
|
|
67
|
+
|
|
61
68
|
it('handles timezones of the browser and parsed date correctly', () => {
|
|
62
69
|
const referenceDate = new Date('2020/01/30');
|
|
63
70
|
localizeManager.locale = 'nl-NL';
|
|
@@ -485,6 +485,13 @@ export class LionSelectRich extends SlotMixin(ScopedElementsMixin(OverlayMixin(L
|
|
|
485
485
|
return;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
+
this._isHandlingUserInput = true;
|
|
489
|
+
setTimeout(() => {
|
|
490
|
+
// Since we can't control when subclasses are done handling keyboard input, we
|
|
491
|
+
// schedule a timeout to reset _isHandlingUserInput
|
|
492
|
+
this._isHandlingUserInput = false;
|
|
493
|
+
});
|
|
494
|
+
|
|
488
495
|
const { key } = ev;
|
|
489
496
|
switch (key) {
|
|
490
497
|
case 'ArrowUp':
|
|
@@ -534,6 +541,9 @@ export class LionSelectRich extends SlotMixin(ScopedElementsMixin(OverlayMixin(L
|
|
|
534
541
|
switch (key) {
|
|
535
542
|
case 'Tab':
|
|
536
543
|
// Tab can only be caught in keydown
|
|
544
|
+
if (this._overlayCtrl.config.trapsKeyboardFocus === true) {
|
|
545
|
+
return;
|
|
546
|
+
}
|
|
537
547
|
this.opened = false;
|
|
538
548
|
break;
|
|
539
549
|
case 'Escape':
|
|
@@ -106,9 +106,15 @@ describe('lion-select-rich interactions', () => {
|
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
let isTriggeredByUser;
|
|
109
110
|
const el = /** @type {LionSelectRich} */ (
|
|
110
111
|
await fixture(html`
|
|
111
|
-
<lion-select-rich
|
|
112
|
+
<lion-select-rich
|
|
113
|
+
interaction-mode="windows/linux"
|
|
114
|
+
@model-value-changed="${(/** @type {CustomEvent} */ event) => {
|
|
115
|
+
isTriggeredByUser = event.detail.isTriggeredByUser;
|
|
116
|
+
}}"
|
|
117
|
+
>
|
|
112
118
|
<lion-options slot="input">
|
|
113
119
|
<lion-option .choiceValue=${10}>Item 1</lion-option>
|
|
114
120
|
<lion-option .choiceValue=${20}>Item 2</lion-option>
|
|
@@ -125,10 +131,14 @@ describe('lion-select-rich interactions', () => {
|
|
|
125
131
|
el.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
|
|
126
132
|
expect(el.checkedIndex).to.equal(1);
|
|
127
133
|
expectOnlyGivenOneOptionToBeChecked(options, 1);
|
|
134
|
+
expect(isTriggeredByUser).to.be.true;
|
|
135
|
+
|
|
136
|
+
isTriggeredByUser = false;
|
|
128
137
|
|
|
129
138
|
el.dispatchEvent(new KeyboardEvent('keyup', { key: 'ArrowUp' }));
|
|
130
139
|
expect(el.checkedIndex).to.equal(0);
|
|
131
140
|
expectOnlyGivenOneOptionToBeChecked(options, 0);
|
|
141
|
+
expect(isTriggeredByUser).to.be.true;
|
|
132
142
|
});
|
|
133
143
|
|
|
134
144
|
it('checkes a value with [character] keys while listbox unopened', async () => {
|
|
@@ -501,6 +501,18 @@ describe('lion-select-rich', () => {
|
|
|
501
501
|
_listboxNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'Tab' }));
|
|
502
502
|
expect(el.opened).to.be.false;
|
|
503
503
|
});
|
|
504
|
+
|
|
505
|
+
it('does not close the listbox with [Tab] key once opened when trapsKeyboardFocus is true', async () => {
|
|
506
|
+
const el = await fixture(
|
|
507
|
+
html`
|
|
508
|
+
<lion-select-rich opened .config=${{ trapsKeyboardFocus: true }}> </lion-select-rich>
|
|
509
|
+
`,
|
|
510
|
+
);
|
|
511
|
+
// tab can only be caught via keydown
|
|
512
|
+
const { _listboxNode } = getSelectRichMembers(el);
|
|
513
|
+
_listboxNode.dispatchEvent(new KeyboardEvent('keydown', { key: 'Tab' }));
|
|
514
|
+
expect(el.opened).to.be.true;
|
|
515
|
+
});
|
|
504
516
|
});
|
|
505
517
|
|
|
506
518
|
describe('Mouse navigation', () => {
|