@dile/ui 3.17.1 → 3.18.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.
- package/components/steps/index.js +2 -0
- package/components/steps/src/DileStep.js +90 -0
- package/components/steps/src/DileSteps.js +171 -0
- package/components/steps/step.js +5 -0
- package/components/steps/steps.js +5 -0
- package/components/toast/src/DileToast.js +2 -1
- package/components/toast/src/DileToastPersistent.js +1 -1
- package/package.json +4 -4
- package/components/accordion/accordion.spec.js +0 -253
- package/components/app-drawer/app-drawer.spec.js +0 -262
- package/components/avatar/avatar.spec.js +0 -25
- package/components/bottom-nav/__screenshots__/bottom-nav.spec.js/dile-bottom-nav-places-the-sheet-and-the-overlay-above-the-bar-1.png +0 -0
- package/components/bottom-nav/bottom-nav.spec.js +0 -340
- package/components/box-selector/box-selector-item.spec.js +0 -27
- package/components/box-selector/box-selector.spec.js +0 -27
- package/components/breadcrumbs/breadcrumbs-item.spec.js +0 -28
- package/components/breadcrumbs/breadcrumbs.spec.js +0 -33
- package/components/button/button.spec.js +0 -234
- package/components/card/card-slide.spec.js +0 -30
- package/components/card/card.spec.js +0 -26
- package/components/checkbox/checkbox.spec.js +0 -235
- package/components/chip/chip.spec.js +0 -31
- package/components/color-picker/color-picker.spec.js +0 -133
- package/components/confirm/confirm.spec.js +0 -57
- package/components/confirm-text/confirm-text.spec.js +0 -29
- package/components/copy-markdown-url/copy-markdown-url.spec.js +0 -27
- package/components/copy-text/copy-text.spec.js +0 -38
- package/components/data-grid/__screenshots__/data-grid.spec.js/dile-data-grid-dispatches-item-checkbox-changed-and-dile-data-grid-item-selected-when-a-checkbox-is-toggled-1.png +0 -0
- package/components/data-grid/data-grid.spec.js +0 -421
- package/components/drop-file/drop-file.spec.js +0 -214
- package/components/drop-file/file-preview.spec.js +0 -35
- package/components/floating-feedback/floating-feedback.spec.js +0 -30
- package/components/floating-menu/floating-menu-item.spec.js +0 -27
- package/components/floating-menu/floating-menu.spec.js +0 -31
- package/components/form-separator/form-separator.spec.js +0 -28
- package/components/hamburger/hamburger.spec.js +0 -28
- package/components/icon/icon.spec.js +0 -31
- package/components/icon-switch/icon-switch-group.spec.js +0 -46
- package/components/icon-switch/icon-switch.spec.js +0 -35
- package/components/info-box/info-box.spec.js +0 -38
- package/components/inline-feedback/inline-feedback.spec.js +0 -46
- package/components/input/input-contact.spec.js +0 -32
- package/components/input/input-icon.spec.js +0 -166
- package/components/input/input-integer.spec.js +0 -31
- package/components/input/input-mask.spec.js +0 -314
- package/components/input/input-message.spec.js +0 -27
- package/components/input/input-money.spec.js +0 -30
- package/components/input/input-number-mask.spec.js +0 -48
- package/components/input/input-number.spec.js +0 -109
- package/components/input/input-percentage.spec.js +0 -31
- package/components/input/input-search.spec.js +0 -91
- package/components/input/input.spec.js +0 -47
- package/components/light-mode-switch/light-mode-switch.spec.js +0 -34
- package/components/menu-hamburger/menu-hamburger.spec.js +0 -34
- package/components/menu-overlay/menu-overlay.spec.js +0 -44
- package/components/message/message.spec.js +0 -42
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-closes-only-the-topmost-modal-when-Esc-is-pressed-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-dispatches-dile-modal-closed-and-animates-when-the-opened-property-is-set-to-false-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-does-not-close-a-blocking-modal-when-Esc-is-pressed-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-does-not-close-the-modal-below-when-the-topmost-modal-is-blocking-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-ignores-transitionend-events-coming-from-inner-elements-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-keeps-the-focus-on-content-focused-by-the-user-when-opening-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-opens-and-closes-through-the-opened-attribute-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-reflects-the-opened-property-to-the-attribute-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-releases-the-background-layer-after-the-close-animation-even-without-transitionend-1.png +0 -0
- package/components/modal/__screenshots__/modal.spec.js/dile-modal-releases-the-background-layer-immediately-when-the-animation-duration-is-0s-1.png +0 -0
- package/components/modal/modal-help.spec.js +0 -32
- package/components/modal/modal.spec.js +0 -250
- package/components/nav/nav.spec.js +0 -33
- package/components/number-picker/number-picker-element.spec.js +0 -30
- package/components/number-picker/number-picker.spec.js +0 -30
- package/components/order-switch/__screenshots__/order-switch.spec.js/dile-order-switch-clicking-the-label-re-announces-the-current-value-without-toggling-when-not-selected-1.png +0 -0
- package/components/order-switch/__screenshots__/order-switch.spec.js/dile-order-switch-clicking-the-label-toggles-the-order-when-selected-1.png +0 -0
- package/components/order-switch/__screenshots__/order-switch.spec.js/dile-order-switch-defaults-to-ascending-order-1.png +0 -0
- package/components/order-switch/order-switch.spec.js +0 -57
- package/components/otp-input/otp-input.spec.js +0 -41
- package/components/pages/pages.spec.js +0 -44
- package/components/password/password.spec.js +0 -35
- package/components/progress-bar/progress-bar.spec.js +0 -28
- package/components/radio-group/__screenshots__/radio-group-dialog.spec.js/dile-radio-group-dialog-renders-dialog-items-with-labels-and-values-1.png +0 -0
- package/components/radio-group/__screenshots__/radio-group-dialog.spec.js/dile-radio-group-dialog-renders-items-with-optional-description-1.png +0 -0
- package/components/radio-group/__screenshots__/radio-group-dialog.spec.js/dile-radio-group-dialog-updates-value-when-an-option-is-selected-1.png +0 -0
- package/components/radio-group/radio-group-dialog.spec.js +0 -126
- package/components/radio-group/radio-group.spec.js +0 -128
- package/components/radio-group/radio.spec.js +0 -32
- package/components/range/range.spec.js +0 -36
- package/components/rating/rating.spec.js +0 -34
- package/components/rating/star.spec.js +0 -30
- package/components/rating-scale-question/rating-scale-option.spec.js +0 -32
- package/components/rating-scale-question/rating-scale-question.spec.js +0 -35
- package/components/select/__screenshots__/select-search.spec.js/dile-select-search-Value-API-uses-the-label-as-accessible-name-of-the-selected-field-1.png +0 -0
- package/components/select/select-ajax-overlay.spec.js +0 -469
- package/components/select/select-overlay.spec.js +0 -612
- package/components/select/select-search.spec.js +0 -318
- package/components/select/select.spec.js +0 -574
- package/components/selector/selector-item.spec.js +0 -40
- package/components/selector/selector-overlay.spec.js +0 -139
- package/components/selector/selector.spec.js +0 -45
- package/components/slide-menu/slide-menu.spec.js +0 -38
- package/components/slide-show/slide-show.spec.js +0 -34
- package/components/social-icon/social-icon.spec.js +0 -26
- package/components/spinner/spinner-bar.spec.js +0 -26
- package/components/spinner/spinner-block.spec.js +0 -21
- package/components/spinner/spinner-horizontal.spec.js +0 -25
- package/components/spinner/spinner-icon.spec.js +0 -25
- package/components/spinner/spinner-modal.spec.js +0 -26
- package/components/spinner/spinner.spec.js +0 -26
- package/components/switch/switch.spec.js +0 -33
- package/components/tabs/tabs.spec.js +0 -85
- package/components/textarea/textarea.spec.js +0 -39
- package/components/time-picker/time-picker.spec.js +0 -26
- package/components/timer/timer.spec.js +0 -31
- package/components/toast/toast.spec.js +0 -86
- package/components/tooltip/chip-tooltip.spec.js +0 -29
- package/components/tooltip/tooltip.spec.js +0 -32
- package/components/web-visor/web-visor.spec.js +0 -32
- package/mixins/form/src/DileForm.spec.js +0 -29
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import './color-picker.js';
|
|
3
|
-
|
|
4
|
-
describe('dile-color-picker', () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
async function renderColorPicker(html) {
|
|
10
|
-
document.body.innerHTML = html;
|
|
11
|
-
const el = document.body.querySelector('dile-color-picker');
|
|
12
|
-
await el.updateComplete;
|
|
13
|
-
return el;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
it('renders a trigger swatch matching the initial value', async () => {
|
|
17
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#3366ff"></dile-color-picker>');
|
|
18
|
-
|
|
19
|
-
const trigger = el.shadowRoot.getElementById('trigger');
|
|
20
|
-
expect(trigger).toBeTruthy();
|
|
21
|
-
expect(trigger.style.backgroundColor).toBe('rgb(51, 102, 255)');
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('normalizes 3-digit hex shorthand set externally', async () => {
|
|
25
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#0f0"></dile-color-picker>');
|
|
26
|
-
|
|
27
|
-
expect(el.value).toBe('#00ff00');
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('updates value and hue/saturation state when the hex input changes', async () => {
|
|
31
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#000000"></dile-color-picker>');
|
|
32
|
-
|
|
33
|
-
const hexInput = el.shadowRoot.querySelector('.hex-input');
|
|
34
|
-
hexInput.value = '#ff0000';
|
|
35
|
-
hexInput.dispatchEvent(new Event('input', { bubbles: true }));
|
|
36
|
-
await el.updateComplete;
|
|
37
|
-
|
|
38
|
-
expect(el.value).toBe('#ff0000');
|
|
39
|
-
expect(el._hue).toBe(0);
|
|
40
|
-
expect(el._saturation).toBe(100);
|
|
41
|
-
expect(el._value).toBe(100);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('dispatches element-changed with name and value when the value changes', async () => {
|
|
45
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#000000"></dile-color-picker>');
|
|
46
|
-
let detail = null;
|
|
47
|
-
el.addEventListener('element-changed', (e) => { detail = e.detail; });
|
|
48
|
-
|
|
49
|
-
const hexInput = el.shadowRoot.querySelector('.hex-input');
|
|
50
|
-
hexInput.value = '#00ff00';
|
|
51
|
-
hexInput.dispatchEvent(new Event('input', { bubbles: true }));
|
|
52
|
-
await el.updateComplete;
|
|
53
|
-
|
|
54
|
-
expect(detail).toEqual({ name: 'color', value: '#00ff00' });
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('updates value when the hue slider changes', async () => {
|
|
58
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#ff0000"></dile-color-picker>');
|
|
59
|
-
|
|
60
|
-
const hueSlider = el.shadowRoot.querySelector('.hue-slider');
|
|
61
|
-
hueSlider.value = '120';
|
|
62
|
-
hueSlider.dispatchEvent(new Event('input', { bubbles: true }));
|
|
63
|
-
await el.updateComplete;
|
|
64
|
-
|
|
65
|
-
expect(el.value).toBe('#00ff00');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('nudges saturation and brightness with arrow keys on the sv square', async () => {
|
|
69
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#ff0000"></dile-color-picker>');
|
|
70
|
-
|
|
71
|
-
const svSquare = el.shadowRoot.getElementById('sv-square');
|
|
72
|
-
svSquare.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
|
|
73
|
-
await el.updateComplete;
|
|
74
|
-
|
|
75
|
-
expect(el._saturation).toBe(99);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('does not change value when disabled', async () => {
|
|
79
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#ff0000" disabled></dile-color-picker>');
|
|
80
|
-
|
|
81
|
-
const trigger = el.shadowRoot.getElementById('trigger');
|
|
82
|
-
expect(trigger.disabled).toBe(true);
|
|
83
|
-
|
|
84
|
-
const svSquare = el.shadowRoot.getElementById('sv-square');
|
|
85
|
-
svSquare.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }));
|
|
86
|
-
await el.updateComplete;
|
|
87
|
-
|
|
88
|
-
expect(el.value).toBe('#ff0000');
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('reverts the hue slider and ignores hex edits when readonly', async () => {
|
|
92
|
-
const el = await renderColorPicker('<dile-color-picker name="color" value="#ff0000" readonly></dile-color-picker>');
|
|
93
|
-
|
|
94
|
-
const hueSlider = el.shadowRoot.querySelector('.hue-slider');
|
|
95
|
-
hueSlider.value = '200';
|
|
96
|
-
hueSlider.dispatchEvent(new Event('input', { bubbles: true }));
|
|
97
|
-
await el.updateComplete;
|
|
98
|
-
|
|
99
|
-
expect(el.value).toBe('#ff0000');
|
|
100
|
-
expect(hueSlider.value).toBe('0');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('participates in native form submission via FormData', async () => {
|
|
104
|
-
document.body.innerHTML = `
|
|
105
|
-
<form id="testForm">
|
|
106
|
-
<dile-color-picker name="color" value="#123456"></dile-color-picker>
|
|
107
|
-
</form>
|
|
108
|
-
`;
|
|
109
|
-
const el = document.body.querySelector('dile-color-picker');
|
|
110
|
-
await el.updateComplete;
|
|
111
|
-
|
|
112
|
-
const form = document.getElementById('testForm');
|
|
113
|
-
const data = new FormData(form);
|
|
114
|
-
|
|
115
|
-
expect(data.get('color')).toBe('#123456');
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('participates in FormData when name is set as a JS property', async () => {
|
|
119
|
-
document.body.innerHTML = `
|
|
120
|
-
<form id="testForm">
|
|
121
|
-
<dile-color-picker value="#123456"></dile-color-picker>
|
|
122
|
-
</form>
|
|
123
|
-
`;
|
|
124
|
-
const el = document.body.querySelector('dile-color-picker');
|
|
125
|
-
el.name = 'color';
|
|
126
|
-
await el.updateComplete;
|
|
127
|
-
|
|
128
|
-
expect(el.getAttribute('name')).toBe('color');
|
|
129
|
-
|
|
130
|
-
const data = new FormData(document.getElementById('testForm'));
|
|
131
|
-
expect(data.get('color')).toBe('#123456');
|
|
132
|
-
});
|
|
133
|
-
});
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import './confirm.js';
|
|
3
|
-
|
|
4
|
-
describe('dile-confirm', () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
async function renderConfirm(html) {
|
|
10
|
-
document.body.innerHTML = html;
|
|
11
|
-
const el = document.body.querySelector('dile-confirm');
|
|
12
|
-
await el.updateComplete;
|
|
13
|
-
return el;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
it('renders a dile-modal with the default action labels', async () => {
|
|
17
|
-
const el = await renderConfirm('<dile-confirm>Are you sure?</dile-confirm>');
|
|
18
|
-
expect(el.shadowRoot.querySelector('dile-modal')).toBeTruthy();
|
|
19
|
-
expect(el.shadowRoot.querySelector('.accept').textContent.trim()).toBe('Accept');
|
|
20
|
-
expect(el.shadowRoot.querySelector('.cancel').textContent.trim()).toBe('Cancell');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('dispatches dile-confirm-accepted when accept is clicked', async () => {
|
|
24
|
-
const el = await renderConfirm('<dile-confirm>Are you sure?</dile-confirm>');
|
|
25
|
-
let accepted = false;
|
|
26
|
-
el.addEventListener('dile-confirm-accepted', () => { accepted = true; });
|
|
27
|
-
|
|
28
|
-
el.shadowRoot.querySelector('.accept').click();
|
|
29
|
-
|
|
30
|
-
expect(accepted).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('handles dontCloseOnAccept and can be reset with resetProcessing()', async () => {
|
|
34
|
-
const el = await renderConfirm('<dile-confirm dontCloseOnAccept>Are you sure?</dile-confirm>');
|
|
35
|
-
let acceptCount = 0;
|
|
36
|
-
el.addEventListener('dile-confirm-accepted', () => { acceptCount++; });
|
|
37
|
-
|
|
38
|
-
el.shadowRoot.querySelector('.accept').click();
|
|
39
|
-
await el.updateComplete;
|
|
40
|
-
expect(acceptCount).toBe(1);
|
|
41
|
-
expect(el._isProcessing).toBe(true);
|
|
42
|
-
expect(el.shadowRoot.querySelector('.accept').classList.contains('disabled')).toBe(true);
|
|
43
|
-
|
|
44
|
-
// Clicking again while processing should not trigger accept
|
|
45
|
-
el.shadowRoot.querySelector('.accept').click();
|
|
46
|
-
expect(acceptCount).toBe(1);
|
|
47
|
-
|
|
48
|
-
// Calling resetProcessing should unlock the buttons
|
|
49
|
-
el.resetProcessing();
|
|
50
|
-
await el.updateComplete;
|
|
51
|
-
expect(el._isProcessing).toBe(false);
|
|
52
|
-
expect(el.shadowRoot.querySelector('.accept').classList.contains('disabled')).toBe(false);
|
|
53
|
-
|
|
54
|
-
el.shadowRoot.querySelector('.accept').click();
|
|
55
|
-
expect(acceptCount).toBe(2);
|
|
56
|
-
});
|
|
57
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import './confirm-text.js';
|
|
3
|
-
|
|
4
|
-
describe('dile-confirm-text', () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
async function renderConfirmText(html) {
|
|
10
|
-
document.body.innerHTML = html;
|
|
11
|
-
const el = document.body.querySelector('dile-confirm-text');
|
|
12
|
-
await el.updateComplete;
|
|
13
|
-
return el;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
it('renders the title and an input to type the confirmation text', async () => {
|
|
17
|
-
const el = await renderConfirmText('<dile-confirm-text title="Delete item">This cannot be undone</dile-confirm-text>');
|
|
18
|
-
expect(el.shadowRoot.querySelector('.title').textContent.trim()).toBe('Delete item');
|
|
19
|
-
expect(el.shadowRoot.querySelector('dile-input')).toBeTruthy();
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('shows negative feedback when accepting with an empty text field', async () => {
|
|
23
|
-
const el = await renderConfirmText('<dile-confirm-text>Confirm</dile-confirm-text>');
|
|
24
|
-
el.shadowRoot.querySelector('.accept').click();
|
|
25
|
-
await el.updateComplete;
|
|
26
|
-
|
|
27
|
-
expect(el.feedback.shadowRoot.textContent).toContain(el.emptyTextMessage);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import './copy-markdown-url.js';
|
|
3
|
-
|
|
4
|
-
describe('dile-copy-markdown-url', () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
async function renderCopyMarkdownUrl(html) {
|
|
10
|
-
document.body.innerHTML = html;
|
|
11
|
-
const el = document.body.querySelector('dile-copy-markdown-url');
|
|
12
|
-
await el.updateComplete;
|
|
13
|
-
return el;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
it('renders a dile-copy-text with the slotted content', async () => {
|
|
17
|
-
const el = await renderCopyMarkdownUrl('<dile-copy-markdown-url url="/doc.md">Copy link</dile-copy-markdown-url>');
|
|
18
|
-
expect(el.shadowRoot.querySelector('dile-copy-text')).toBeTruthy();
|
|
19
|
-
expect(el.textContent.trim()).toBe('Copy link');
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('defaults to an empty url and content', async () => {
|
|
23
|
-
const el = await renderCopyMarkdownUrl('<dile-copy-markdown-url></dile-copy-markdown-url>');
|
|
24
|
-
expect(el.url).toBe('');
|
|
25
|
-
expect(el.content).toBe('');
|
|
26
|
-
});
|
|
27
|
-
});
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach, vi } from 'vitest';
|
|
2
|
-
import './copy-text.js';
|
|
3
|
-
|
|
4
|
-
describe('dile-copy-text', () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
document.body.innerHTML = '';
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
async function renderCopyText(html) {
|
|
10
|
-
document.body.innerHTML = html;
|
|
11
|
-
const el = document.body.querySelector('dile-copy-text');
|
|
12
|
-
await el.updateComplete;
|
|
13
|
-
return el;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
it('renders the slotted content inside a clickable link', async () => {
|
|
17
|
-
const el = await renderCopyText('<dile-copy-text content="hello">Copy me</dile-copy-text>');
|
|
18
|
-
const link = el.shadowRoot.querySelector('a');
|
|
19
|
-
expect(link).toBeTruthy();
|
|
20
|
-
expect(el.textContent.trim()).toBe('Copy me');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('dispatches dile-text-copied with the content on copy()', async () => {
|
|
24
|
-
const el = await renderCopyText('<dile-copy-text content="hello">Copy me</dile-copy-text>');
|
|
25
|
-
const writeText = vi.fn().mockResolvedValue(undefined);
|
|
26
|
-
vi.stubGlobal('navigator', { ...navigator, clipboard: { writeText } });
|
|
27
|
-
|
|
28
|
-
let detail = null;
|
|
29
|
-
el.addEventListener('dile-text-copied', (e) => { detail = e.detail; });
|
|
30
|
-
|
|
31
|
-
await el.copy();
|
|
32
|
-
|
|
33
|
-
expect(writeText).toHaveBeenCalledWith('hello');
|
|
34
|
-
expect(detail).toEqual({ text: 'hello' });
|
|
35
|
-
|
|
36
|
-
vi.unstubAllGlobals();
|
|
37
|
-
});
|
|
38
|
-
});
|