@dile/ui 3.4.5 → 3.5.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/components/accordion/accordion-item.js +3 -1
- package/components/accordion/accordion.js +3 -1
- package/components/app-drawer/app-drawer.js +3 -1
- package/components/avatar/avatar.js +3 -1
- package/components/avatar/avatar.spec.js +25 -0
- package/components/box-selector/box-selector-item.js +3 -1
- package/components/box-selector/box-selector-item.spec.js +27 -0
- package/components/box-selector/box-selector.js +3 -1
- package/components/box-selector/box-selector.spec.js +27 -0
- package/components/breadcrumbs/breadcrumbs-item.js +3 -1
- package/components/breadcrumbs/breadcrumbs-item.spec.js +28 -0
- package/components/breadcrumbs/breadcrumbs.js +3 -1
- package/components/breadcrumbs/breadcrumbs.spec.js +33 -0
- package/components/button/button-icon.js +3 -1
- package/components/button/button.js +3 -1
- package/components/card/card-slide.js +3 -1
- package/components/card/card-slide.spec.js +30 -0
- package/components/card/card.js +3 -1
- package/components/card/card.spec.js +26 -0
- package/components/checkbox/checkbox.js +3 -1
- package/components/chip/chip.js +3 -1
- package/components/chip/chip.spec.js +31 -0
- package/components/color-picker/color-picker.js +3 -1
- package/components/confirm/confirm.js +3 -1
- package/components/confirm/confirm.spec.js +32 -0
- package/components/confirm-text/confirm-text.js +3 -1
- package/components/confirm-text/confirm-text.spec.js +29 -0
- package/components/copy-markdown-url/copy-markdown-url.spec.js +27 -0
- package/components/copy-markdown-url/index.js +3 -1
- package/components/copy-text/__screenshots__/copy-text.spec.js/dile-copy-text-dispatches-dile-text-copied-with-the-content-on-copy---1.png +0 -0
- package/components/copy-text/copy-text.spec.js +38 -0
- package/components/copy-text/index.js +3 -1
- package/components/drop-file/drop-file.js +3 -1
- package/components/drop-file/drop-file.spec.js +33 -0
- package/components/drop-file/file-preview.js +3 -1
- package/components/drop-file/file-preview.spec.js +35 -0
- package/components/floating-feedback/floating-feedback.spec.js +30 -0
- package/components/floating-feedback/index.js +3 -1
- package/components/floating-menu/floating-menu-item.js +3 -1
- package/components/floating-menu/floating-menu-item.spec.js +27 -0
- package/components/floating-menu/floating-menu.js +3 -1
- package/components/floating-menu/floating-menu.spec.js +31 -0
- package/components/form-separator/form-separator.js +3 -1
- package/components/form-separator/form-separator.spec.js +28 -0
- package/components/hamburger/hamburger.js +3 -1
- package/components/hamburger/hamburger.spec.js +28 -0
- package/components/icon/icon.js +3 -1
- package/components/icon/icon.spec.js +31 -0
- package/components/icon-switch/icon-switch-group.js +3 -1
- package/components/icon-switch/icon-switch-group.spec.js +46 -0
- package/components/icon-switch/icon-switch.js +3 -1
- package/components/icon-switch/icon-switch.spec.js +35 -0
- package/components/info-box/info-box.js +3 -1
- package/components/info-box/info-box.spec.js +38 -0
- package/components/inline-feedback/inline-feedback.js +3 -1
- package/components/inline-feedback/inline-feedback.spec.js +46 -0
- package/components/input/__screenshots__/input-number-mask.spec.js/dile-input-number-mask-masks-digit-keydowns-following-the-given-pattern-1.png +0 -0
- package/components/input/input-contact.js +3 -1
- package/components/input/input-contact.spec.js +32 -0
- package/components/input/input-integer.js +3 -1
- package/components/input/input-integer.spec.js +31 -0
- package/components/input/input-message.js +3 -1
- package/components/input/input-message.spec.js +27 -0
- package/components/input/input-money.js +3 -1
- package/components/input/input-money.spec.js +30 -0
- package/components/input/input-number-mask.js +3 -1
- package/components/input/input-number-mask.spec.js +32 -0
- package/components/input/input-percentage.js +3 -1
- package/components/input/input-percentage.spec.js +31 -0
- package/components/input/input-search.js +3 -1
- package/components/input/input-search.spec.js +39 -0
- package/components/input/input.js +3 -1
- package/components/input/input.spec.js +47 -0
- package/components/light-mode-switch/light-mode-switch.js +3 -1
- package/components/light-mode-switch/light-mode-switch.spec.js +34 -0
- package/components/menu-hamburger/menu-hamburger.js +3 -1
- package/components/menu-hamburger/menu-hamburger.spec.js +34 -0
- package/components/menu-overlay/menu-overlay.js +3 -1
- package/components/menu-overlay/menu-overlay.spec.js +44 -0
- package/components/message/message.js +3 -1
- package/components/message/message.spec.js +42 -0
- package/components/modal/__screenshots__/modal-help.spec.js/dile-modal-help-opens-the-inner-modal-on-open---1.png +0 -0
- package/components/modal/modal-help.js +3 -1
- package/components/modal/modal-help.spec.js +32 -0
- package/components/modal/modal.js +3 -1
- package/components/modal/modal.spec.js +46 -0
- package/components/nav/nav.js +3 -1
- package/components/nav/nav.spec.js +33 -0
- package/components/number-picker/number-picker-element.js +3 -1
- package/components/number-picker/number-picker-element.spec.js +30 -0
- package/components/number-picker/number-picker.js +3 -1
- package/components/number-picker/number-picker.spec.js +30 -0
- package/components/order-switch/order-switch.js +3 -1
- package/components/order-switch/order-switch.spec.js +31 -0
- package/components/otp-input/otp-input.js +3 -1
- package/components/otp-input/otp-input.spec.js +41 -0
- package/components/pages/pages.js +3 -1
- package/components/pages/pages.spec.js +44 -0
- package/components/password/password.js +3 -1
- package/components/password/password.spec.js +35 -0
- package/components/progress-bar/progress-bar.js +3 -1
- package/components/progress-bar/progress-bar.spec.js +28 -0
- package/components/radio-group/radio-group.js +3 -1
- package/components/radio-group/radio-group.spec.js +44 -0
- package/components/radio-group/radio.js +3 -1
- package/components/radio-group/radio.spec.js +32 -0
- package/components/range/range.js +3 -1
- package/components/range/range.spec.js +36 -0
- package/components/rating/rating.js +3 -1
- package/components/rating/rating.spec.js +34 -0
- package/components/rating/star.js +3 -1
- package/components/rating/star.spec.js +30 -0
- package/components/rating-scale-question/rating-scale-option.js +3 -1
- package/components/rating-scale-question/rating-scale-option.spec.js +32 -0
- package/components/rating-scale-question/rating-scale-question.js +3 -1
- package/components/rating-scale-question/rating-scale-question.spec.js +35 -0
- package/components/select/__screenshots__/select-ajax-overlay.spec.js/dile-select-ajax-overlay-Selecting-a-result-clearing-the-selection-returns-to-the-search-field-1.png +0 -0
- package/components/select/__screenshots__/select-ajax-overlay.spec.js/dile-select-ajax-overlay-Selecting-a-result-selecting-an-option-sets-value-selectedText--closes-the-popup-and-fires-events-1.png +0 -0
- package/components/select/__screenshots__/select-ajax-overlay.spec.js/dile-select-ajax-overlay-Selecting-a-result-shows-the-read-only-field-with-the-clear-icon-after-selecting-1.png +0 -0
- package/components/select/__screenshots__/select-ajax-overlay.spec.js/dile-select-ajax-overlay-static-mode-loads-all-data-on-init-and-renders-it-inline-without-requiring-a-search-1.png +0 -0
- package/components/select/__screenshots__/select-ajax-overlay.spec.js/dile-select-ajax-overlay-static-mode-shows-a-visible--clickable-trigger-instead-of-hiding-it--there-is-no-separate-search-field-to-compose-under--1.png +0 -0
- package/components/select/__screenshots__/select-overlay.spec.js/dile-select-overlay-Positioning-keeps-the-same-moveTop-tightened-gap-when-flipping-above-the-trigger-as-when-sitting-below-it-1.png +0 -0
- package/components/select/__screenshots__/select-overlay.spec.js/dile-select-overlay-Rendering-throws-when-no-select-element-is-slotted-1.png +0 -0
- package/components/select/__screenshots__/select-overlay.spec.js/dile-select-overlay-hideTrigger-handleExternalKeydown---drives-navigation-without-a-visible-trigger-1.png +0 -0
- package/components/select/__screenshots__/zzdebug2.spec.js/debug-static-debug-1.png +0 -0
- package/components/select/__screenshots__/zzdebug3.spec.js/debug-rapid-close-reopen-reproduces-blur-then-quick-refocus-1.png +0 -0
- package/components/select/index.js +3 -1
- package/components/select/select-ajax-overlay.js +6 -0
- package/components/select/select-ajax-overlay.spec.js +389 -0
- package/components/select/select-ajax.js +3 -1
- package/components/select/select-boolean.js +3 -1
- package/components/select/select-overlay.js +5 -0
- package/components/select/select-overlay.spec.js +507 -0
- package/components/select/select.js +3 -1
- package/components/select/src/DileSelectAjaxOverlay.js +521 -0
- package/components/select/src/DileSelectOverlay.js +511 -0
- package/components/selector/selector-item.js +3 -1
- package/components/selector/selector-item.spec.js +40 -0
- package/components/selector/selector-overlay.js +3 -1
- package/components/selector/selector.js +3 -1
- package/components/selector/selector.spec.js +45 -0
- package/components/slide-menu/slide-menu.js +3 -1
- package/components/slide-menu/slide-menu.spec.js +38 -0
- package/components/slide-show/slide-show.js +3 -1
- package/components/slide-show/slide-show.spec.js +34 -0
- package/components/social-icon/social-icon.js +3 -1
- package/components/social-icon/social-icon.spec.js +26 -0
- package/components/spinner/spinner-bar.js +3 -1
- package/components/spinner/spinner-bar.spec.js +26 -0
- package/components/spinner/spinner-block.js +3 -1
- package/components/spinner/spinner-block.spec.js +21 -0
- package/components/spinner/spinner-horizontal.js +3 -1
- package/components/spinner/spinner-horizontal.spec.js +25 -0
- package/components/spinner/spinner-icon.js +3 -1
- package/components/spinner/spinner-icon.spec.js +25 -0
- package/components/spinner/spinner-modal.js +3 -1
- package/components/spinner/spinner-modal.spec.js +26 -0
- package/components/spinner/spinner.js +3 -1
- package/components/spinner/spinner.spec.js +26 -0
- package/components/switch/switch.js +3 -1
- package/components/switch/switch.spec.js +33 -0
- package/components/tabs/tab.js +3 -1
- package/components/tabs/tabs.js +3 -1
- package/components/tabs/tabs.spec.js +45 -0
- package/components/textarea/textarea.js +3 -1
- package/components/textarea/textarea.spec.js +39 -0
- package/components/time-picker/time-picker.js +3 -1
- package/components/time-picker/time-picker.spec.js +26 -0
- package/components/timer/timer.js +3 -1
- package/components/timer/timer.spec.js +31 -0
- package/components/toast/toast-item.js +3 -1
- package/components/toast/toast-persistent.js +3 -1
- package/components/toast/toast.js +3 -1
- package/components/tooltip/chip-tooltip.js +3 -1
- package/components/tooltip/chip-tooltip.spec.js +29 -0
- package/components/tooltip/tooltip.js +3 -1
- package/components/tooltip/tooltip.spec.js +32 -0
- package/components/web-visor/web-visor.js +3 -1
- package/components/web-visor/web-visor.spec.js +32 -0
- package/mixins/overlay/src/DileOverlay.js +9 -6
- package/package.json +3 -3
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './slide-show.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-slide-show', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSlideShow(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-slide-show');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders closed by default with the showLabel text', async () => {
|
|
17
|
+
const el = await renderSlideShow('<dile-slide-show>Content</dile-slide-show>');
|
|
18
|
+
const link = el.shadowRoot.querySelector('a');
|
|
19
|
+
|
|
20
|
+
expect(link).toBeTruthy();
|
|
21
|
+
expect(link.textContent.trim()).toBe('Open');
|
|
22
|
+
expect(link.classList.contains('showmoreclose')).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('opens and shows the hideLabel text', async () => {
|
|
26
|
+
const el = await renderSlideShow('<dile-slide-show hideLabel="Close it">Content</dile-slide-show>');
|
|
27
|
+
el.toggle();
|
|
28
|
+
await el.updateComplete;
|
|
29
|
+
|
|
30
|
+
const link = el.shadowRoot.querySelector('a');
|
|
31
|
+
expect(link.textContent.trim()).toBe('Close it');
|
|
32
|
+
expect(link.classList.contains('showmoreopen')).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './social-icon.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-social-icon', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSocialIcon(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-social-icon');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('defaults to the facebook icon and renders an svg', async () => {
|
|
17
|
+
const el = await renderSocialIcon('<dile-social-icon></dile-social-icon>');
|
|
18
|
+
expect(el.icon).toBe('facebook');
|
|
19
|
+
expect(el.shadowRoot.querySelector('svg')).toBeTruthy();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders a different icon based on the icon property', async () => {
|
|
23
|
+
const el = await renderSocialIcon('<dile-social-icon icon="twitter"></dile-social-icon>');
|
|
24
|
+
expect(el.shadowRoot.querySelector('svg')).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner-bar.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner-bar', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSpinnerBar(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-spinner-bar');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders nothing when inactive', async () => {
|
|
17
|
+
const el = await renderSpinnerBar('<dile-spinner-bar></dile-spinner-bar>');
|
|
18
|
+
expect(el.active).toBe(false);
|
|
19
|
+
expect(el.shadowRoot.querySelector('.bar')).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders the bar when active', async () => {
|
|
23
|
+
const el = await renderSpinnerBar('<dile-spinner-bar active></dile-spinner-bar>');
|
|
24
|
+
expect(el.shadowRoot.querySelector('.bar')).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import './spinner.js';
|
|
2
2
|
import { DileSpinnerBlock } from "./src/DileSpinnerBlock.js";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
if (!customElements.get("dile-spinner-block")) {
|
|
5
|
+
window.customElements.define("dile-spinner-block", DileSpinnerBlock);
|
|
6
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner-block.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner-block', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it('renders an active dile-spinner inside the loading section', async () => {
|
|
10
|
+
document.body.innerHTML = '<dile-spinner-block></dile-spinner-block>';
|
|
11
|
+
const el = document.body.querySelector('dile-spinner-block');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
|
|
14
|
+
const section = el.shadowRoot.querySelector('section.loading');
|
|
15
|
+
expect(section).toBeTruthy();
|
|
16
|
+
|
|
17
|
+
const spinner = section.querySelector('dile-spinner');
|
|
18
|
+
expect(spinner).toBeTruthy();
|
|
19
|
+
expect(spinner.hasAttribute('active')).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { DileSpinnerHorizontal } from "./src/DileSpinnerHorizontal.js";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if (!customElements.get("dile-spinner-horizontal")) {
|
|
4
|
+
window.customElements.define("dile-spinner-horizontal", DileSpinnerHorizontal);
|
|
5
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner-horizontal.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner-horizontal', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSpinnerHorizontal(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-spinner-horizontal');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders nothing when inactive', async () => {
|
|
17
|
+
const el = await renderSpinnerHorizontal('<dile-spinner-horizontal></dile-spinner-horizontal>');
|
|
18
|
+
expect(el.shadowRoot.querySelector('.loader')).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('renders the loader when active', async () => {
|
|
22
|
+
const el = await renderSpinnerHorizontal('<dile-spinner-horizontal active></dile-spinner-horizontal>');
|
|
23
|
+
expect(el.shadowRoot.querySelector('.loader')).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner-icon.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner-icon', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSpinnerIcon(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-spinner-icon');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('is inactive by default', async () => {
|
|
17
|
+
const el = await renderSpinnerIcon('<dile-spinner-icon></dile-spinner-icon>');
|
|
18
|
+
expect(el.active).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('renders the loader icon when active', async () => {
|
|
22
|
+
const el = await renderSpinnerIcon('<dile-spinner-icon active></dile-spinner-icon>');
|
|
23
|
+
expect(el.shadowRoot.querySelector('dile-lucide-icon-loader-circle')).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import './spinner.js';
|
|
2
2
|
import { DileSpinnerModal } from "./src/DileSpinnerModal.js";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
if (!customElements.get("dile-spinner-modal")) {
|
|
5
|
+
window.customElements.define("dile-spinner-modal", DileSpinnerModal);
|
|
6
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner-modal.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner-modal', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSpinnerModal(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-spinner-modal');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders nothing when inactive', async () => {
|
|
17
|
+
const el = await renderSpinnerModal('<dile-spinner-modal></dile-spinner-modal>');
|
|
18
|
+
expect(el.shadowRoot.querySelector('div')).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('renders the modal overlay with a spinner when active', async () => {
|
|
22
|
+
const el = await renderSpinnerModal('<dile-spinner-modal active></dile-spinner-modal>');
|
|
23
|
+
expect(el.shadowRoot.querySelector('div')).toBeTruthy();
|
|
24
|
+
expect(el.shadowRoot.querySelector('dile-spinner')).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './spinner.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-spinner', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSpinner(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-spinner');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders nothing when inactive', async () => {
|
|
17
|
+
const el = await renderSpinner('<dile-spinner></dile-spinner>');
|
|
18
|
+
expect(el.active).toBe(false);
|
|
19
|
+
expect(el.shadowRoot.querySelector('i')).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders the spinner markup when active', async () => {
|
|
23
|
+
const el = await renderSpinner('<dile-spinner active></dile-spinner>');
|
|
24
|
+
expect(el.shadowRoot.querySelector('i')).toBeTruthy();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './switch.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-switch', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderSwitch(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-switch');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('starts unchecked by default', async () => {
|
|
17
|
+
const el = await renderSwitch('<dile-switch name="notify"></dile-switch>');
|
|
18
|
+
expect(el.checked).toBe(false);
|
|
19
|
+
expect(el.shadowRoot.querySelector('section button')).toBeTruthy();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('toggles checked state and dispatches dile-switch-changed', async () => {
|
|
23
|
+
const el = await renderSwitch('<dile-switch name="notify"></dile-switch>');
|
|
24
|
+
let detail = null;
|
|
25
|
+
el.addEventListener('dile-switch-changed', (e) => { detail = e.detail; });
|
|
26
|
+
|
|
27
|
+
el.shadowRoot.querySelector('div').click();
|
|
28
|
+
await el.updateComplete;
|
|
29
|
+
|
|
30
|
+
expect(el.checked).toBe(true);
|
|
31
|
+
expect(detail).toEqual({ checked: true, name: 'notify' });
|
|
32
|
+
});
|
|
33
|
+
});
|
package/components/tabs/tab.js
CHANGED
package/components/tabs/tabs.js
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './tabs.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-tabs', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderTabs(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-tabs');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders slotted dile-tab items', async () => {
|
|
17
|
+
const el = await renderTabs(`
|
|
18
|
+
<dile-tabs selected="0">
|
|
19
|
+
<dile-tab>One</dile-tab>
|
|
20
|
+
<dile-tab>Two</dile-tab>
|
|
21
|
+
</dile-tabs>
|
|
22
|
+
`);
|
|
23
|
+
|
|
24
|
+
const tabs = el.querySelectorAll('dile-tab');
|
|
25
|
+
expect(tabs.length).toBe(2);
|
|
26
|
+
await tabs[0].updateComplete;
|
|
27
|
+
expect(tabs[0].selected).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('selects a tab when clicked', async () => {
|
|
31
|
+
const el = await renderTabs(`
|
|
32
|
+
<dile-tabs>
|
|
33
|
+
<dile-tab>One</dile-tab>
|
|
34
|
+
<dile-tab>Two</dile-tab>
|
|
35
|
+
</dile-tabs>
|
|
36
|
+
`);
|
|
37
|
+
|
|
38
|
+
const tabs = el.querySelectorAll('dile-tab');
|
|
39
|
+
await tabs[1].updateComplete;
|
|
40
|
+
tabs[1].shadowRoot.querySelector('article').click();
|
|
41
|
+
await el.updateComplete;
|
|
42
|
+
|
|
43
|
+
expect(el.selected).toBe(1);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './textarea.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-textarea', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderTextarea(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-textarea');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders a native textarea with the initial value', async () => {
|
|
17
|
+
const el = await renderTextarea('<dile-textarea name="bio" value="Hello"></dile-textarea>');
|
|
18
|
+
const textarea = el.shadowRoot.querySelector('textarea');
|
|
19
|
+
|
|
20
|
+
expect(textarea).toBeTruthy();
|
|
21
|
+
expect(textarea.value).toBe('Hello');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('updates the value property on input', async () => {
|
|
25
|
+
const el = await renderTextarea('<dile-textarea name="bio"></dile-textarea>');
|
|
26
|
+
const textarea = el.shadowRoot.querySelector('textarea');
|
|
27
|
+
textarea.value = 'New text';
|
|
28
|
+
textarea.dispatchEvent(new Event('input'));
|
|
29
|
+
await el.updateComplete;
|
|
30
|
+
|
|
31
|
+
expect(el.value).toBe('New text');
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('renders the label when provided', async () => {
|
|
35
|
+
const el = await renderTextarea('<dile-textarea name="bio" label="Bio"></dile-textarea>');
|
|
36
|
+
const label = el.shadowRoot.querySelector('label');
|
|
37
|
+
expect(label.textContent.trim()).toBe('Bio');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './time-picker.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-time-picker', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderTimePicker(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-time-picker');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('defaults to 00:00:00 and renders three number pickers', async () => {
|
|
17
|
+
const el = await renderTimePicker('<dile-time-picker name="start"></dile-time-picker>');
|
|
18
|
+
expect(el.value).toBe('00:00:00');
|
|
19
|
+
expect(el.shadowRoot.querySelectorAll('dile-number-picker-element').length).toBe(3);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders the label when provided', async () => {
|
|
23
|
+
const el = await renderTimePicker('<dile-time-picker label="Start time"></dile-time-picker>');
|
|
24
|
+
expect(el.shadowRoot.querySelector('label').textContent.trim()).toBe('Start time');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './timer.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-timer', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderTimer(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-timer');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('defaults to a 60s duration shown as 01:00', async () => {
|
|
17
|
+
const el = await renderTimer('<dile-timer></dile-timer>');
|
|
18
|
+
expect(el.duration).toBe(60_000);
|
|
19
|
+
expect(el.shadowRoot.querySelector('.display').textContent.trim()).toBe('01:00');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('renders control buttons when controls is set', async () => {
|
|
23
|
+
const el = await renderTimer('<dile-timer controls></dile-timer>');
|
|
24
|
+
expect(el.shadowRoot.querySelectorAll('.controls dile-button').length).toBe(3);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('renders the title when provided', async () => {
|
|
28
|
+
const el = await renderTimer('<dile-timer title="Countdown"></dile-timer>');
|
|
29
|
+
expect(el.shadowRoot.querySelector('.title').textContent.trim()).toBe('Countdown');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './chip-tooltip.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-chip-tooltip', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderChipTooltip(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-chip-tooltip');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders the label inside a dile-tooltip with the message', async () => {
|
|
17
|
+
const el = await renderChipTooltip('<dile-chip-tooltip label="Info" message="More info here"></dile-chip-tooltip>');
|
|
18
|
+
const tooltip = el.shadowRoot.querySelector('dile-tooltip');
|
|
19
|
+
|
|
20
|
+
expect(tooltip).toBeTruthy();
|
|
21
|
+
expect(tooltip.getAttribute('tooltip')).toBe('More info here');
|
|
22
|
+
expect(el.shadowRoot.querySelector('.label').textContent.trim()).toBe('Info');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('defaults the position to bottom', async () => {
|
|
26
|
+
const el = await renderChipTooltip('<dile-chip-tooltip message="Info"></dile-chip-tooltip>');
|
|
27
|
+
expect(el.position).toBe('bottom');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './tooltip.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-tooltip', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderTooltip(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-tooltip');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders the tooltip text hidden by default', async () => {
|
|
17
|
+
const el = await renderTooltip('<dile-tooltip tooltip="Hello there">Trigger</dile-tooltip>');
|
|
18
|
+
const tooltipText = el.shadowRoot.querySelector('.tooltiptext');
|
|
19
|
+
|
|
20
|
+
expect(tooltipText).toBeTruthy();
|
|
21
|
+
expect(tooltipText.textContent.trim()).toBe('Hello there');
|
|
22
|
+
expect(tooltipText.classList.contains('show')).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('shows the tooltip on mouseover', async () => {
|
|
26
|
+
const el = await renderTooltip('<dile-tooltip tooltip="Hello there">Trigger</dile-tooltip>');
|
|
27
|
+
el.doMouseover();
|
|
28
|
+
await el.updateComplete;
|
|
29
|
+
|
|
30
|
+
expect(el.shadowRoot.querySelector('.tooltiptext').classList.contains('show')).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
+
import './web-visor.js';
|
|
3
|
+
|
|
4
|
+
describe('dile-web-visor', () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
document.body.innerHTML = '';
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
async function renderWebVisor(html) {
|
|
10
|
+
document.body.innerHTML = html;
|
|
11
|
+
const el = document.body.querySelector('dile-web-visor');
|
|
12
|
+
await el.updateComplete;
|
|
13
|
+
return el;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
it('renders an iframe pointing at the url', async () => {
|
|
17
|
+
const el = await renderWebVisor('<dile-web-visor url="https://example.com" title="Example"></dile-web-visor>');
|
|
18
|
+
const iframe = el.shadowRoot.querySelector('iframe');
|
|
19
|
+
|
|
20
|
+
expect(iframe).toBeTruthy();
|
|
21
|
+
expect(iframe.getAttribute('src')).toBe('https://example.com');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('increases zoom when zoom in is clicked', async () => {
|
|
25
|
+
const el = await renderWebVisor('<dile-web-visor url="https://example.com"></dile-web-visor>');
|
|
26
|
+
const zoomInButton = el.shadowRoot.querySelectorAll('.controls dile-button')[1];
|
|
27
|
+
zoomInButton.click();
|
|
28
|
+
await el.updateComplete;
|
|
29
|
+
|
|
30
|
+
expect(el._zoom).toBeCloseTo(1.1);
|
|
31
|
+
});
|
|
32
|
+
});
|