@crowdstrike/glide-core 0.9.1 → 0.9.3
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/dist/accordion.stories.d.ts +2 -4
- package/dist/accordion.styles.js +2 -4
- package/dist/button-group.button.styles.js +3 -8
- package/dist/button-group.stories.d.ts +2 -6
- package/dist/button-group.styles.js +2 -2
- package/dist/button.d.ts +12 -1
- package/dist/button.js +1 -1
- package/dist/button.stories.d.ts +2 -12
- package/dist/button.styles.js +2 -4
- package/dist/button.test.basics.js +47 -165
- package/dist/button.test.events.js +86 -10
- package/dist/checkbox-group.stories.d.ts +2 -3
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.stories.d.ts +2 -6
- package/dist/checkbox.styles.js +43 -6
- package/dist/checkbox.test.form.js +16 -0
- package/dist/checkbox.test.interactions.js +8 -0
- package/dist/drawer.js +1 -1
- package/dist/drawer.stories.d.ts +1 -1
- package/dist/dropdown.d.ts +4 -2
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +2 -0
- package/dist/dropdown.stories.d.ts +4 -10
- package/dist/dropdown.styles.js +47 -29
- package/dist/dropdown.test.focus.filterable.js +20 -0
- package/dist/dropdown.test.focus.js +1 -0
- package/dist/dropdown.test.form.js +23 -112
- package/dist/dropdown.test.interactions.filterable.js +121 -17
- package/dist/dropdown.test.interactions.multiple.js +15 -22
- package/dist/dropdown.test.interactions.single.js +44 -22
- package/dist/form-controls-layout.stories.d.ts +1 -1
- package/dist/icon-button.d.ts +1 -1
- package/dist/icon-button.stories.d.ts +1 -3
- package/dist/icon-button.styles.js +2 -4
- package/dist/icons/checked.d.ts +5 -0
- package/dist/icons/checked.js +1 -1
- package/dist/input.d.ts +1 -1
- package/dist/input.js +1 -1
- package/dist/input.stories.d.ts +2 -13
- package/dist/input.styles.d.ts +1 -1
- package/dist/input.styles.js +93 -93
- package/dist/input.test.basics.js +45 -45
- package/dist/input.test.form.js +17 -0
- package/dist/label.styles.js +6 -11
- package/dist/library/localize.test.js +45 -0
- package/dist/menu.button.styles.js +1 -0
- package/dist/menu.js +1 -1
- package/dist/menu.link.styles.js +1 -0
- package/dist/menu.stories.d.ts +1 -1
- package/dist/menu.styles.js +3 -1
- package/dist/menu.test.events.js +1 -97
- package/dist/menu.test.focus.js +26 -3
- package/dist/menu.test.interactions.js +3 -0
- package/dist/modal.d.ts +0 -7
- package/dist/modal.icon-button.test.basics.js +9 -9
- package/dist/modal.stories.d.ts +3 -5
- package/dist/modal.styles.js +2 -4
- package/dist/modal.tertiary-icon.test.basics.js +14 -14
- package/dist/modal.test.accessibility.js +16 -27
- package/dist/modal.test.basics.js +64 -68
- package/dist/modal.test.close.js +12 -16
- package/dist/modal.test.events.js +32 -44
- package/dist/modal.test.lock-scroll.js +15 -25
- package/dist/modal.test.methods.js +8 -12
- package/dist/modal.test.scrollbars.js +2 -4
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.stories.d.ts +2 -3
- package/dist/radio-group.test.basics.js +3 -3
- package/dist/radio-group.test.events.js +6 -6
- package/dist/radio-group.test.form.js +19 -0
- package/dist/radio.styles.js +2 -6
- package/dist/split-button.stories.d.ts +3 -8
- package/dist/split-button.styles.js +2 -4
- package/dist/split-container.styles.js +2 -4
- package/dist/status-indicator.stories.d.ts +1 -13
- package/dist/styles/focus-outline.d.ts +1 -1
- package/dist/styles/focus-outline.js +7 -1
- package/dist/styles/opacity-and-scale-animation.d.ts +2 -0
- package/dist/styles/opacity-and-scale-animation.js +24 -0
- package/dist/styles/variables.css +1 -1
- package/dist/styles/visually-hidden.d.ts +1 -1
- package/dist/styles/visually-hidden.js +14 -1
- package/dist/tab.group.d.ts +6 -6
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.styles.js +46 -5
- package/dist/tab.group.test.basics.js +9 -2
- package/dist/tab.group.test.interactions.js +70 -93
- package/dist/tab.js +1 -1
- package/dist/tab.panel.styles.js +3 -9
- package/dist/tab.styles.js +6 -13
- package/dist/tab.test.basics.js +15 -17
- package/dist/tabs.stories.d.ts +2 -2
- package/dist/tag.js +1 -1
- package/dist/tag.stories.d.ts +2 -4
- package/dist/tag.styles.js +2 -4
- package/dist/tag.test.basics.js +28 -27
- package/dist/tag.test.events.js +3 -3
- package/dist/tag.test.focus.js +4 -4
- package/dist/textarea.d.ts +1 -1
- package/dist/textarea.stories.d.ts +1 -8
- package/dist/textarea.styles.d.ts +1 -1
- package/dist/textarea.styles.js +63 -67
- package/dist/textarea.test.basics.js +52 -52
- package/dist/toasts.d.ts +5 -0
- package/dist/toasts.stories.d.ts +1 -1
- package/dist/toasts.styles.js +1 -1
- package/dist/toggle.stories.d.ts +1 -4
- package/dist/toggle.styles.js +2 -1
- package/dist/toggle.test.interactions.js +11 -0
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +16 -30
- package/dist/tooltip.test.interactions.js +6 -6
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.d.ts +3 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.d.ts +3 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.item.styles.js +11 -3
- package/dist/tree.item.test.basics.js +0 -30
- package/dist/tree.stories.d.ts +0 -9
- package/package.json +1 -3
- package/dist/button.test.form.d.ts +0 -1
- package/dist/button.test.form.js +0 -50
- package/dist/input.test.translations.js +0 -38
- package/dist/tag.test.translations.d.ts +0 -1
- package/dist/tag.test.translations.js +0 -25
- package/dist/textarea.test.translations.d.ts +0 -1
- package/dist/textarea.test.translations.js +0 -34
- /package/dist/{input.test.translations.d.ts → library/localize.test.d.ts} +0 -0
package/dist/tree.item.styles.js
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export default[css`
|
2
|
+
${focusOutline(".label-container:focus-visible")}
|
3
|
+
`,css`
|
2
4
|
:host {
|
3
5
|
cursor: pointer;
|
4
6
|
display: flex;
|
@@ -50,6 +52,7 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
|
|
50
52
|
font-size: var(--glide-core-body-sm-font-size);
|
51
53
|
padding-block: var(--glide-core-spacing-xxs);
|
52
54
|
padding-inline: var(--glide-core-spacing-xs);
|
55
|
+
transition: background-color 150ms ease-in-out;
|
53
56
|
|
54
57
|
&:hover {
|
55
58
|
background-color: var(--glide-core-surface-hover);
|
@@ -64,13 +67,18 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";export
|
|
64
67
|
}
|
65
68
|
|
66
69
|
&:focus-visible {
|
67
|
-
${focusOutline};
|
68
|
-
|
69
70
|
/* The outline is inside the component since children have overflow hidden */
|
70
71
|
outline-offset: -2px;
|
71
72
|
|
72
73
|
.component.selected & {
|
73
|
-
|
74
|
+
/*
|
75
|
+
We need !important here as we must override the focusVisible mixin
|
76
|
+
that also includes !important.
|
77
|
+
This component is a bit of a unique case as we want to override the
|
78
|
+
default outline styles when a tree item is also focus-visible, but
|
79
|
+
also selected.
|
80
|
+
*/
|
81
|
+
outline: 1px solid var(--glide-core-icon-selected) !important;
|
74
82
|
outline-offset: -3px;
|
75
83
|
}
|
76
84
|
}
|
@@ -52,36 +52,6 @@ it('adds label to menu target', async () => {
|
|
52
52
|
?.querySelector('glide-core-icon-button');
|
53
53
|
expect(menuTarget?.label).to.equal('Actions for Item');
|
54
54
|
});
|
55
|
-
it('adds Japanese label to menu', async () => {
|
56
|
-
document.documentElement.setAttribute('lang', 'ja');
|
57
|
-
const treeItem = await fixture(html `
|
58
|
-
<glide-core-tree-item label="Item">
|
59
|
-
<glide-core-tree-item-menu slot="menu" data-menu>
|
60
|
-
<glide-core-menu-link label="Move" url="/move"> </glide-core-menu-link>
|
61
|
-
</glide-core-tree-item-menu>
|
62
|
-
</glide-core-tree-item>
|
63
|
-
`);
|
64
|
-
const menuTarget = treeItem
|
65
|
-
.querySelector('glide-core-tree-item-menu')
|
66
|
-
?.shadowRoot?.querySelector('glide-core-menu')
|
67
|
-
?.querySelector('glide-core-icon-button');
|
68
|
-
expect(menuTarget?.label).to.equal('Actions for Item');
|
69
|
-
});
|
70
|
-
it('adds French label to menu', async () => {
|
71
|
-
document.documentElement.setAttribute('lang', 'fr');
|
72
|
-
const treeItem = await fixture(html `
|
73
|
-
<glide-core-tree-item label="Item">
|
74
|
-
<glide-core-tree-item-menu slot="menu" data-menu>
|
75
|
-
<glide-core-menu-link label="Move" url="/move"> </glide-core-menu-link>
|
76
|
-
</glide-core-tree-item-menu>
|
77
|
-
</glide-core-tree-item>
|
78
|
-
`);
|
79
|
-
const menuTarget = treeItem
|
80
|
-
.querySelector('glide-core-tree-item-menu')
|
81
|
-
?.shadowRoot?.querySelector('glide-core-menu')
|
82
|
-
?.querySelector('glide-core-icon-button');
|
83
|
-
expect(menuTarget?.label).to.equal('Actions for Item');
|
84
|
-
});
|
85
55
|
it('renders with a suffix slot', async () => {
|
86
56
|
await fixture(html `
|
87
57
|
<glide-core-tree-item label="Item">
|
package/dist/tree.stories.d.ts
CHANGED
@@ -8,12 +8,3 @@ import type { Meta, StoryObj } from '@storybook/web-components';
|
|
8
8
|
declare const meta: Meta;
|
9
9
|
export default meta;
|
10
10
|
export declare const Tree: StoryObj;
|
11
|
-
export declare const TreeItemDefault: StoryObj;
|
12
|
-
export declare const TreeItemSelected: StoryObj;
|
13
|
-
export declare const TreeItemWithChildItemsCollapsed: StoryObj;
|
14
|
-
export declare const TreeItemWithChildItemsExpanded: StoryObj;
|
15
|
-
export declare const TreeItemWithChildItemsNonCollapsible: StoryObj;
|
16
|
-
export declare const TreeItemWithPrefixIcon: StoryObj;
|
17
|
-
export declare const TreeItemWithSuffixIconButton: StoryObj;
|
18
|
-
export declare const TreeItemWithMenu: StoryObj;
|
19
|
-
export declare const TreeItemWithPrefixSuffixAndMenu: StoryObj;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@crowdstrike/glide-core",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.3",
|
4
4
|
"description": "CrowdStrike's Glide Design System components package for providing web components",
|
5
5
|
"author": "CrowdStrike UX Team",
|
6
6
|
"license": "Apache-2.0",
|
@@ -76,8 +76,6 @@
|
|
76
76
|
"eslint-config-prettier": "^9.1.0",
|
77
77
|
"eslint-plugin-lit": "^1.11.0",
|
78
78
|
"eslint-plugin-lit-a11y": "^4.1.2",
|
79
|
-
"eslint-plugin-no-only-tests": "^3.1.0",
|
80
|
-
"eslint-plugin-no-skip-tests": "^1.1.0",
|
81
79
|
"eslint-plugin-sort-class-members": "^1.20.0",
|
82
80
|
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
|
83
81
|
"eslint-plugin-unicorn": "^50.0.1",
|
@@ -1 +0,0 @@
|
|
1
|
-
import './button.js';
|
package/dist/button.test.form.js
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './button.js';
|
3
|
-
import { expect, fixture, html, oneEvent } from '@open-wc/testing';
|
4
|
-
import { sendKeys } from '@web/test-runner-commands';
|
5
|
-
import GlideCoreButton from './button.js';
|
6
|
-
GlideCoreButton.shadowRootOptions.mode = 'open';
|
7
|
-
it('participates in a form when type="reset"', async () => {
|
8
|
-
const form = document.createElement('form');
|
9
|
-
const component = await fixture(html ` <glide-core-button type="reset">Button</glide-core-button> `, {
|
10
|
-
parentNode: form,
|
11
|
-
});
|
12
|
-
const formResetEvent = oneEvent(form, 'reset');
|
13
|
-
component.shadowRoot?.querySelector('button')?.click();
|
14
|
-
const event = await formResetEvent;
|
15
|
-
expect(event instanceof Event).to.be.true;
|
16
|
-
});
|
17
|
-
it('participates in a form when hitting "enter" and type="reset"', async () => {
|
18
|
-
const form = document.createElement('form');
|
19
|
-
const component = await fixture(html ` <glide-core-button type="reset">Button</glide-core-button> `, {
|
20
|
-
parentNode: form,
|
21
|
-
});
|
22
|
-
const formResetEvent = oneEvent(form, 'reset');
|
23
|
-
component.focus();
|
24
|
-
await sendKeys({ press: 'Enter' });
|
25
|
-
const event = await formResetEvent;
|
26
|
-
expect(event instanceof Event).to.be.true;
|
27
|
-
});
|
28
|
-
it('participates in a form when type="submit"', async () => {
|
29
|
-
const form = document.createElement('form');
|
30
|
-
const component = await fixture(html ` <glide-core-button type="submit">Button</glide-core-button> `, {
|
31
|
-
parentNode: form,
|
32
|
-
});
|
33
|
-
form.addEventListener('submit', (event) => event.preventDefault());
|
34
|
-
const formSubmitEvent = oneEvent(form, 'submit');
|
35
|
-
component.shadowRoot?.querySelector('button')?.click();
|
36
|
-
const event = await formSubmitEvent;
|
37
|
-
expect(event instanceof Event).to.be.true;
|
38
|
-
});
|
39
|
-
it('participates in a form when hitting "enter" and type="submit"', async () => {
|
40
|
-
const form = document.createElement('form');
|
41
|
-
const component = await fixture(html ` <glide-core-button type="submit">Button</glide-core-button> `, {
|
42
|
-
parentNode: form,
|
43
|
-
});
|
44
|
-
form.addEventListener('submit', (event) => event.preventDefault());
|
45
|
-
const formSubmitEvent = oneEvent(form, 'submit');
|
46
|
-
component.focus();
|
47
|
-
await sendKeys({ press: 'Enter' });
|
48
|
-
const event = await formSubmitEvent;
|
49
|
-
expect(event instanceof Event).to.be.true;
|
50
|
-
});
|
@@ -1,38 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
3
|
-
import GlideCoreInput from './input.js';
|
4
|
-
GlideCoreInput.shadowRootOptions.mode = 'open';
|
5
|
-
it('renders dynamic strings in Japanese', async () => {
|
6
|
-
const element = await fixture(html `
|
7
|
-
<glide-core-input
|
8
|
-
label="Test"
|
9
|
-
value="lorem"
|
10
|
-
maxlength="40"
|
11
|
-
clearable
|
12
|
-
></glide-core-input>
|
13
|
-
`);
|
14
|
-
document.documentElement.setAttribute('lang', 'ja');
|
15
|
-
await elementUpdated(element);
|
16
|
-
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
17
|
-
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
18
|
-
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
19
|
-
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
20
|
-
expect(element.shadowRoot?.querySelector('[data-test="clear-button"]')?.label).to.equal('Clear Test entry');
|
21
|
-
});
|
22
|
-
it('renders dynamic strings in French', async () => {
|
23
|
-
const element = await fixture(html `
|
24
|
-
<glide-core-input
|
25
|
-
label="Test"
|
26
|
-
value="lorem"
|
27
|
-
maxlength="40"
|
28
|
-
clearable
|
29
|
-
></glide-core-input>
|
30
|
-
`);
|
31
|
-
document.documentElement.setAttribute('lang', 'fr');
|
32
|
-
await elementUpdated(element);
|
33
|
-
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
34
|
-
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
35
|
-
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
36
|
-
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
37
|
-
expect(element.shadowRoot?.querySelector('[data-test="clear-button"]')?.label).to.equal('Clear Test entry');
|
38
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,25 +0,0 @@
|
|
1
|
-
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
2
|
-
import GlideCoreTag from './tag.js';
|
3
|
-
GlideCoreTag.shadowRootOptions.mode = 'open';
|
4
|
-
it('renders dynamic string in Japanese', async () => {
|
5
|
-
const element = await fixture(html `<glide-core-tag removable-label="test-aria-label"
|
6
|
-
><span slot="prefix">Prefix</span
|
7
|
-
><span data-content>Tag</span></glide-core-tag
|
8
|
-
>`);
|
9
|
-
document.documentElement.setAttribute('lang', 'ja');
|
10
|
-
await elementUpdated(element);
|
11
|
-
const iconButton = element.shadowRoot?.querySelector('button');
|
12
|
-
expect(iconButton).to.have.attribute('aria-label', `タグを削除: test-aria-label`);
|
13
|
-
expect(iconButton).to.have.attribute('type', 'button');
|
14
|
-
});
|
15
|
-
it('renders dynamic string in French', async () => {
|
16
|
-
const element = await fixture(html `<glide-core-tag removable-label="test-aria-label"
|
17
|
-
><span slot="prefix">Prefix</span
|
18
|
-
><span data-content>Tag</span></glide-core-tag
|
19
|
-
>`);
|
20
|
-
document.documentElement.setAttribute('lang', 'fr');
|
21
|
-
await elementUpdated(element);
|
22
|
-
const iconButton = element.shadowRoot?.querySelector('button');
|
23
|
-
expect(iconButton).to.have.attribute('aria-label', `Supprimer la balise : test-aria-label`);
|
24
|
-
expect(iconButton).to.have.attribute('type', 'button');
|
25
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,34 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
3
|
-
import GlideCoreTextarea from './textarea.js';
|
4
|
-
GlideCoreTextarea.shadowRootOptions.mode = 'open';
|
5
|
-
it('renders dynamic strings in Japanese', async () => {
|
6
|
-
const element = await fixture(html `
|
7
|
-
<glide-core-textarea
|
8
|
-
label="Test"
|
9
|
-
value="lorem"
|
10
|
-
maxlength="40"
|
11
|
-
></glide-core-textarea>
|
12
|
-
`);
|
13
|
-
document.documentElement.setAttribute('lang', 'ja');
|
14
|
-
await elementUpdated(element);
|
15
|
-
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
16
|
-
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
17
|
-
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
18
|
-
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
19
|
-
});
|
20
|
-
it('renders dynamic strings in French', async () => {
|
21
|
-
const element = await fixture(html `
|
22
|
-
<glide-core-textarea
|
23
|
-
label="Test"
|
24
|
-
value="lorem"
|
25
|
-
maxlength="40"
|
26
|
-
></glide-core-textarea>
|
27
|
-
`);
|
28
|
-
document.documentElement.setAttribute('lang', 'fr');
|
29
|
-
await elementUpdated(element);
|
30
|
-
const maxCharacterCountText = element.shadowRoot?.querySelector('[data-test="character-count-text"]');
|
31
|
-
expect(maxCharacterCountText?.textContent?.trim()).to.equal('5/40');
|
32
|
-
const maxCharacterCountAnnouncement = element.shadowRoot?.querySelector('[data-test="character-count-announcement"]');
|
33
|
-
expect(maxCharacterCountAnnouncement?.textContent?.trim()).to.equal('Character count 5 of 40');
|
34
|
-
});
|
File without changes
|