Skip to content

Commit 51c509e

Browse files
authored
experiment: add date-time-picker base styles and visual tests (#9601)
1 parent f5bb3b2 commit 51c509e

File tree

17 files changed

+147
-0
lines changed

17 files changed

+147
-0
lines changed

packages/date-time-picker/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
"type": "module",
2222
"files": [
2323
"src",
24+
"!src/styles/*-base-styles.d.ts",
25+
"!src/styles/*-base-styles.js",
2426
"theme",
2527
"vaadin-*.d.ts",
2628
"vaadin-*.js",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* @license
3+
* Copyright (c) 2019 - 2025 Vaadin Ltd.
4+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5+
*/
6+
import type { CSSResult } from 'lit';
7+
8+
export const dateTimePickerStyles: CSSResult;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* @license
3+
* Copyright (c) 2019 - 2025 Vaadin Ltd.
4+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5+
*/
6+
import '@vaadin/component-base/src/style-props.js';
7+
import { css } from 'lit';
8+
9+
export const dateTimePickerStyles = css`
10+
@layer base {
11+
.vaadin-date-time-picker-container {
12+
width: calc(
13+
var(--vaadin-field-default-width, 12em) * 2 +
14+
var(--vaadin-date-time-picker-gap, var(--vaadin-gap-container-inline))
15+
);
16+
}
17+
18+
.slots {
19+
display: flex;
20+
gap: var(--vaadin-date-time-picker-gap, var(--vaadin-gap-container-inline));
21+
}
22+
23+
.slots ::slotted([slot='date-picker']) {
24+
min-width: 0;
25+
flex: 1 1 auto;
26+
}
27+
28+
.slots ::slotted([slot='time-picker']) {
29+
min-width: 0;
30+
flex: 1 1.65 auto;
31+
}
32+
}
33+
`;
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import { fixtureSync } from '@vaadin/testing-helpers/dist/fixture.js';
2+
import { visualDiff } from '@web/test-runner-visual-regression';
3+
import '../common.js';
4+
import '../../../src/vaadin-date-time-picker.js';
5+
6+
describe('date-time-picker', () => {
7+
let div, element;
8+
9+
beforeEach(() => {
10+
div = document.createElement('div');
11+
div.style.display = 'inline-block';
12+
div.style.padding = '10px';
13+
element = fixtureSync('<vaadin-date-time-picker></vaadin-date-time-picker>', div);
14+
});
15+
16+
describe('default', () => {
17+
it('basic', async () => {
18+
await visualDiff(div, 'basic');
19+
});
20+
21+
it('disabled', async () => {
22+
element.disabled = true;
23+
await visualDiff(div, 'disabled');
24+
});
25+
26+
it('readonly', async () => {
27+
element.readonly = true;
28+
await visualDiff(div, 'readonly');
29+
});
30+
31+
it('label', async () => {
32+
element.label = 'Label';
33+
await visualDiff(div, 'label');
34+
});
35+
36+
it('focused', async () => {
37+
element.label = 'Label';
38+
element.focus();
39+
await visualDiff(div, 'focused');
40+
});
41+
42+
it('placeholder', async () => {
43+
element.datePlaceholder = 'Date';
44+
element.timePlaceholder = 'Time';
45+
await visualDiff(div, 'placeholder');
46+
});
47+
48+
it('value', async () => {
49+
element.value = '2019-09-16T15:00';
50+
await visualDiff(div, 'value');
51+
});
52+
53+
it('required', async () => {
54+
element.label = 'Label';
55+
element.required = true;
56+
await visualDiff(div, 'required');
57+
});
58+
59+
it('error message', async () => {
60+
element.label = 'Label';
61+
element.errorMessage = 'This field is required';
62+
element.required = true;
63+
element.validate();
64+
await visualDiff(div, 'error-message');
65+
});
66+
67+
it('helper text', async () => {
68+
element.helperText = 'Helper text';
69+
await visualDiff(div, 'helper-text');
70+
});
71+
72+
it('helper above field', async () => {
73+
element.label = 'Label';
74+
element.errorMessage = 'This field is required';
75+
element.required = true;
76+
element.validate();
77+
element.helperText = 'Helper text';
78+
element.setAttribute('theme', 'helper-above-field');
79+
await visualDiff(div, 'helper-above-field');
80+
});
81+
});
82+
83+
describe('RTL', () => {
84+
before(() => {
85+
document.documentElement.setAttribute('dir', 'rtl');
86+
});
87+
88+
after(() => {
89+
document.documentElement.removeAttribute('dir');
90+
});
91+
92+
it('RTL', async () => {
93+
await visualDiff(div, 'rtl-basic');
94+
});
95+
96+
it('RTL error message', async () => {
97+
element.label = 'Label';
98+
element.errorMessage = 'This field is required';
99+
element.required = true;
100+
element.validate();
101+
await visualDiff(div, 'rtl-error-message');
102+
});
103+
});
104+
});
1.48 KB
Loading
1.27 KB
Loading
3.38 KB
Loading
2.27 KB
Loading
4.04 KB
Loading
2.16 KB
Loading

0 commit comments

Comments
 (0)