@descope-ui/descope-user-passkeys 3.11.8 → 3.12.0
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/package.json +15 -11
- package/CHANGELOG.md +0 -33
- package/e2e/descope-user-passkeys.spec.ts +0 -191
- package/project.json +0 -8
- package/testDriver/userPasskeysTestDriver.ts +0 -10
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descope-ui/descope-user-passkeys",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.12.0",
|
|
4
|
+
"files": [
|
|
5
|
+
"src",
|
|
6
|
+
"stories"
|
|
7
|
+
],
|
|
4
8
|
"exports": {
|
|
5
9
|
".": {
|
|
6
10
|
"import": "./src/component/index.js"
|
|
@@ -14,18 +18,18 @@
|
|
|
14
18
|
},
|
|
15
19
|
"devDependencies": {
|
|
16
20
|
"@playwright/test": "1.58.2",
|
|
17
|
-
"e2e-utils": "3.
|
|
18
|
-
"test-drivers": "3.
|
|
21
|
+
"e2e-utils": "3.12.0",
|
|
22
|
+
"test-drivers": "3.12.0"
|
|
19
23
|
},
|
|
20
24
|
"dependencies": {
|
|
21
|
-
"@descope-ui/common": "3.
|
|
22
|
-
"@descope-ui/theme-globals": "3.
|
|
23
|
-
"@descope-ui/descope-list": "3.
|
|
24
|
-
"@descope-ui/descope-list-item": "3.
|
|
25
|
-
"@descope-ui/descope-
|
|
26
|
-
"@descope-ui/descope-
|
|
27
|
-
"@descope-ui/descope-button": "3.
|
|
28
|
-
"@descope-ui/descope-icon": "3.
|
|
25
|
+
"@descope-ui/common": "3.12.0",
|
|
26
|
+
"@descope-ui/theme-globals": "3.12.0",
|
|
27
|
+
"@descope-ui/descope-list": "3.12.0",
|
|
28
|
+
"@descope-ui/descope-list-item": "3.12.0",
|
|
29
|
+
"@descope-ui/descope-link": "3.12.0",
|
|
30
|
+
"@descope-ui/descope-text": "3.12.0",
|
|
31
|
+
"@descope-ui/descope-button": "3.12.0",
|
|
32
|
+
"@descope-ui/descope-icon": "3.12.0"
|
|
29
33
|
},
|
|
30
34
|
"publishConfig": {
|
|
31
35
|
"link-workspace-packages": false
|
package/CHANGELOG.md
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
|
-
|
|
5
|
-
## [3.11.8](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.7...web-components-ui-3.11.8) (2026-05-25)
|
|
6
|
-
|
|
7
|
-
## [3.11.7](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.6...web-components-ui-3.11.7) (2026-05-25)
|
|
8
|
-
|
|
9
|
-
## [3.11.6](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.5...web-components-ui-3.11.6) (2026-05-24)
|
|
10
|
-
|
|
11
|
-
## [3.11.5](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.4...web-components-ui-3.11.5) (2026-05-21)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
### Bug Fixes
|
|
15
|
-
|
|
16
|
-
* **user-passkeys:** icon color and size fixes ([#1037](https://github.com/descope/web-components-ui/issues/1037)) ([ef98108](https://github.com/descope/web-components-ui/commit/ef981082884d9ee6f17b987900f13a3b1e454652))
|
|
17
|
-
|
|
18
|
-
## [3.11.4](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.3...web-components-ui-3.11.4) (2026-05-20)
|
|
19
|
-
|
|
20
|
-
## [3.11.3](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.2...web-components-ui-3.11.3) (2026-05-19)
|
|
21
|
-
|
|
22
|
-
## [3.11.2](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.1...web-components-ui-3.11.2) (2026-05-19)
|
|
23
|
-
|
|
24
|
-
## [3.11.1](https://github.com/descope/web-components-ui/compare/web-components-ui-3.11.0...web-components-ui-3.11.1) (2026-05-19)
|
|
25
|
-
|
|
26
|
-
## [3.11.0](https://github.com/descope/web-components-ui/compare/web-components-ui-3.10.2...web-components-ui-3.11.0) (2026-05-19)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
### Features
|
|
30
|
-
|
|
31
|
-
* **component:** descope-user-passkeys ([#995](https://github.com/descope/web-components-ui/issues/995)) ([457bb17](https://github.com/descope/web-components-ui/commit/457bb1739f2af0a3ff68a0776b4f1a0186cbc8fa))
|
|
32
|
-
|
|
33
|
-
# Changelog
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { getStoryUrl, loopConfig, loopPresets } from 'e2e-utils';
|
|
3
|
-
import createUserPasskeysTestDriver from '../testDriver/userPasskeysTestDriver';
|
|
4
|
-
|
|
5
|
-
const componentAttributes = {
|
|
6
|
-
direction: ['ltr', 'rtl'],
|
|
7
|
-
format: ['MM-DD-YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD'],
|
|
8
|
-
readonly: ['false', 'true'],
|
|
9
|
-
useLongNames: ['false', 'true'],
|
|
10
|
-
'allow-remove': ['false', 'true'],
|
|
11
|
-
'full-width': ['false', 'true'],
|
|
12
|
-
numberOfItems: ['0', '1', '2', '5', '10'],
|
|
13
|
-
showMethodIcon: ['false', 'true'],
|
|
14
|
-
showButtonIcon: ['false', 'true'],
|
|
15
|
-
|
|
16
|
-
'st-list-items-gap': ['0', '4px', '16px', '50px'],
|
|
17
|
-
'st-item-horizontal-padding': ['0', '4px', '16px', '50px'],
|
|
18
|
-
'st-item-vertical-padding': ['0', '4px', '16px', '50px'],
|
|
19
|
-
'add-passkey-button-label': [
|
|
20
|
-
'',
|
|
21
|
-
'Custom Add',
|
|
22
|
-
'Long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Add',
|
|
23
|
-
],
|
|
24
|
-
'created-at-label': [
|
|
25
|
-
'',
|
|
26
|
-
'Custom label',
|
|
27
|
-
'Long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long last login',
|
|
28
|
-
],
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const customLabels = {
|
|
32
|
-
'add-passkey-button-label':
|
|
33
|
-
componentAttributes['add-passkey-button-label'][2],
|
|
34
|
-
'created-at-label': componentAttributes['created-at-label'][2],
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const presets = {
|
|
38
|
-
'long content ltr': {
|
|
39
|
-
useLongNames: 'true',
|
|
40
|
-
...customLabels,
|
|
41
|
-
},
|
|
42
|
-
'long content rtl': {
|
|
43
|
-
direction: 'rtl',
|
|
44
|
-
useLongNames: 'true',
|
|
45
|
-
...customLabels,
|
|
46
|
-
},
|
|
47
|
-
'allow remove with empty label': {
|
|
48
|
-
'allow-remove': 'true',
|
|
49
|
-
removeButtonLabel: '',
|
|
50
|
-
},
|
|
51
|
-
'allow remove with custom label': {
|
|
52
|
-
'allow-remove': 'true',
|
|
53
|
-
removeButtonLabel: 'Custom',
|
|
54
|
-
},
|
|
55
|
-
'allow remove with long label': {
|
|
56
|
-
'allow-remove': 'true',
|
|
57
|
-
removeButtonLabel:
|
|
58
|
-
'Long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long Remove',
|
|
59
|
-
},
|
|
60
|
-
'show remove button icon': {
|
|
61
|
-
'allow-remove': 'true',
|
|
62
|
-
showRemoveIcon: 'true',
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const storyName = 'descope-user-passkeys';
|
|
67
|
-
const componentName = 'descope-user-passkeys';
|
|
68
|
-
|
|
69
|
-
test.describe('theme', () => {
|
|
70
|
-
loopConfig(componentAttributes, (attr, value) => {
|
|
71
|
-
test.describe(`${attr}: ${value}`, () => {
|
|
72
|
-
test.beforeEach(async ({ page }) => {
|
|
73
|
-
await page.goto(getStoryUrl(storyName, { [attr]: value }), {
|
|
74
|
-
waitUntil: 'networkidle',
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
test('style', async ({ page }) => {
|
|
79
|
-
const component = createUserPasskeysTestDriver(
|
|
80
|
-
page.locator(componentName),
|
|
81
|
-
);
|
|
82
|
-
await page.waitForTimeout(2000);
|
|
83
|
-
|
|
84
|
-
expect(await component.screenshot()).toMatchSnapshot();
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
const setupEventListener = (eventName: string) => {
|
|
91
|
-
return `
|
|
92
|
-
window.eventDetails = [];
|
|
93
|
-
document.addEventListener('${eventName}', (event) => {
|
|
94
|
-
window.eventDetails.push(event.detail);
|
|
95
|
-
});
|
|
96
|
-
`;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
test.describe('logic', () => {
|
|
100
|
-
test('dispatch add action', async ({ page }) => {
|
|
101
|
-
await page.goto(getStoryUrl(storyName), {
|
|
102
|
-
waitUntil: 'networkidle',
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
await page.addInitScript(setupEventListener('add-passkey-clicked'));
|
|
106
|
-
|
|
107
|
-
await page.reload({ waitUntil: 'networkidle' });
|
|
108
|
-
|
|
109
|
-
await page.locator('text="Add"').click();
|
|
110
|
-
await page.waitForTimeout(500);
|
|
111
|
-
|
|
112
|
-
const eventDetail = await page.evaluate(
|
|
113
|
-
// eslint-disable-next-line no-undef
|
|
114
|
-
() => (window as any).eventDetails[0],
|
|
115
|
-
);
|
|
116
|
-
|
|
117
|
-
expect(eventDetail).toBeDefined();
|
|
118
|
-
expect(eventDetail).toHaveProperty('action', 'add-passkey');
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
test('dispatch remove action with passkey ID', async ({ page }) => {
|
|
122
|
-
await page.goto(getStoryUrl(storyName, { 'allow-remove': 'true' }), {
|
|
123
|
-
waitUntil: 'networkidle',
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
await page.addInitScript(setupEventListener('remove-passkey-clicked'));
|
|
127
|
-
|
|
128
|
-
await page.reload({ waitUntil: 'networkidle' });
|
|
129
|
-
|
|
130
|
-
await page
|
|
131
|
-
.getByText('Vendor 5 Remove')
|
|
132
|
-
.getByText('Remove', { exact: true })
|
|
133
|
-
.first()
|
|
134
|
-
.click();
|
|
135
|
-
await page.waitForTimeout(500);
|
|
136
|
-
|
|
137
|
-
const eventDetail = await page.evaluate(
|
|
138
|
-
// eslint-disable-next-line no-undef
|
|
139
|
-
() => (window as any).eventDetails[0],
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
expect(eventDetail).toBeDefined();
|
|
143
|
-
expect(eventDetail).toHaveProperty('action', 'remove-passkey');
|
|
144
|
-
expect(eventDetail).toHaveProperty('id', 'vendor-id-5');
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test('prevent dispatch when readonly', async ({ page }) => {
|
|
148
|
-
await page.goto(
|
|
149
|
-
getStoryUrl(storyName, { readonly: 'true', 'allow-remove': 'true' }),
|
|
150
|
-
{
|
|
151
|
-
waitUntil: 'networkidle',
|
|
152
|
-
},
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
await page.addInitScript(setupEventListener('remove-passkey-clicked'));
|
|
156
|
-
|
|
157
|
-
await page.reload({ waitUntil: 'networkidle' });
|
|
158
|
-
|
|
159
|
-
await page
|
|
160
|
-
.getByText('Vendor 5 Remove')
|
|
161
|
-
.getByText('Remove', { exact: true })
|
|
162
|
-
.first()
|
|
163
|
-
.click();
|
|
164
|
-
await page.waitForTimeout(500);
|
|
165
|
-
|
|
166
|
-
const eventDetail = await page.evaluate(
|
|
167
|
-
// eslint-disable-next-line no-undef
|
|
168
|
-
() => (window as any).eventDetails[0],
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
expect(eventDetail).not.toBeDefined();
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
test.describe('presets', () => {
|
|
176
|
-
loopPresets(presets, (preset, name) => {
|
|
177
|
-
test(name, async ({ page }) => {
|
|
178
|
-
await page.goto(getStoryUrl(storyName, preset));
|
|
179
|
-
await page.waitForSelector(componentName);
|
|
180
|
-
|
|
181
|
-
const component = page.locator(componentName);
|
|
182
|
-
|
|
183
|
-
expect(
|
|
184
|
-
await component.screenshot({
|
|
185
|
-
animations: 'disabled',
|
|
186
|
-
timeout: 3000,
|
|
187
|
-
}),
|
|
188
|
-
).toMatchSnapshot();
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
});
|
package/project.json
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Locator } from '@playwright/test';
|
|
2
|
-
import { createComponentTestDriver } from 'test-drivers';
|
|
3
|
-
|
|
4
|
-
const createUserPasskeysTestDriver = (locator: Locator) => {
|
|
5
|
-
return {
|
|
6
|
-
...createComponentTestDriver(locator),
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export default createUserPasskeysTestDriver;
|