Skip to content

Commit 66b8838

Browse files
authored
experiment: add cursor properties for interactive elements (#9190)
1 parent 49ae0c4 commit 66b8838

File tree

8 files changed

+27
-7
lines changed

8 files changed

+27
-7
lines changed

packages/button/src/vaadin-button-base-styles.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const buttonStyles = css`
1818
-webkit-tap-highlight-color: transparent;
1919
-webkit-user-select: none;
2020
user-select: none;
21-
cursor: pointer;
21+
cursor: var(--vaadin-clickable-cursor);
2222
box-sizing: border-box;
2323
vertical-align: middle;
2424
flex-shrink: 0;
@@ -70,7 +70,7 @@ export const buttonStyles = css`
7070
7171
:host([disabled]) {
7272
pointer-events: var(--_vaadin-button-disabled-pointer-events, none);
73-
cursor: not-allowed;
73+
cursor: var(--vaadin-disabled-cursor);
7474
opacity: 0.5;
7575
}
7676

packages/component-base/src/style-props.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ addGlobalThemeStyles(
5757
--_vaadin-icon-minus: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M5 12h14" /></svg>');
5858
--_vaadin-icon-plus: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /></svg>');
5959
--_vaadin-icon-warn: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z" /></svg>');
60+
61+
/* Cursors for interactive elements */
62+
--vaadin-clickable-cursor: pointer;
63+
--vaadin-disabled-cursor: not-allowed;
6064
}
6165
6266
@media (forced-colors: active) {

packages/details/src/vaadin-details-summary-base-styles.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export const detailsSummary = (partName = 'vaadin-details-summary') => css`
1515
border-radius: var(--${unsafeCSS(partName)}-border-radius, var(--_vaadin-radius-m));
1616
box-sizing: border-box;
1717
color: var(--${unsafeCSS(partName)}-text-color, var(--_vaadin-color-strong));
18+
cursor: var(--vaadin-clickable-cursor);
1819
display: flex;
1920
font-size: var(--${unsafeCSS(partName)}-font-size, inherit);
2021
font-weight: var(--${unsafeCSS(partName)}-font-weight, 500);
@@ -66,7 +67,7 @@ export const detailsSummary = (partName = 'vaadin-details-summary') => css`
6667
6768
:host([disabled]) {
6869
opacity: 0.5;
69-
cursor: not-allowed;
70+
cursor: var(--vaadin-disabled-cursor);
7071
}
7172
7273
:host([dir='rtl']) [part='toggle']::before {

packages/field-base/src/styles/button-base-styles.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { css } from 'lit';
99
export const button = css`
1010
[part$='button'] {
1111
color: var(--_vaadin-color);
12+
cursor: var(--vaadin-clickable-cursor);
1213
touch-action: manipulation;
1314
-webkit-tap-highlight-color: transparent;
1415
-webkit-user-select: none;
@@ -34,7 +35,7 @@ export const button = css`
3435
3536
:host(:is([readonly], [disabled])) [part$='button'] {
3637
color: var(--_vaadin-color-subtle);
37-
cursor: not-allowed;
38+
cursor: var(--vaadin-disabled-cursor);
3839
}
3940
4041
@media (forced-colors: active) {

packages/field-base/src/styles/field-base-styles.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ export const field = css`
5050
display: none;
5151
}
5252
53+
:host([readonly]) [part='input-field'] {
54+
cursor: default;
55+
}
56+
57+
:host([disabled]) [part='input-field'] {
58+
cursor: var(--vaadin-disabled-cursor);
59+
}
60+
5361
[part='helper-text'] {
5462
font-size: var(--vaadin-input-field-helper-font-size, inherit);
5563
line-height: var(--vaadin-input-field-helper-line-height, inherit);

packages/input-container/src/vaadin-input-container-base-styles.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export const inputContainerStyles = css`
2121
border: var(--vaadin-input-field-border-width, 1px) solid
2222
var(--vaadin-input-field-border-color, var(--_vaadin-border-color-strong));
2323
box-sizing: border-box;
24+
cursor: text;
2425
padding: var(--vaadin-input-field-padding, var(--_vaadin-padding-container));
2526
gap: var(--vaadin-input-field-gap, var(--_vaadin-gap-container-inline));
2627
background: var(--vaadin-input-field-background, var(--_vaadin-background));
@@ -61,12 +62,17 @@ export const inputContainerStyles = css`
6162
font: inherit;
6263
color: inherit;
6364
background: transparent;
65+
cursor: inherit;
6466
}
6567
6668
::slotted(*) {
6769
flex: none;
6870
}
6971
72+
slot {
73+
cursor: auto;
74+
}
75+
7076
::slotted(:is(input, textarea))::placeholder {
7177
/* Use ::slotted(input:placeholder-shown) in themes to style the placeholder. */
7278
/* because ::slotted(...)::placeholder does not work in Safari. */

packages/item/src/vaadin-item-base-styles.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const itemStyles = css`
1212
align-items: center;
1313
border-radius: var(--vaadin-item-border-radius, var(--_vaadin-radius-m));
1414
box-sizing: border-box;
15-
cursor: pointer;
15+
cursor: var(--vaadin-clickable-cursor);
1616
display: flex;
1717
gap: var(--vaadin-item-gap, 0 var(--_vaadin-gap-container-inline));
1818
height: var(--vaadin-item-height, auto);
@@ -25,7 +25,7 @@ export const itemStyles = css`
2525
}
2626
2727
:host([disabled]) {
28-
cursor: not-allowed;
28+
cursor: var(--vaadin-disabled-cursor);
2929
opacity: 0.5;
3030
}
3131

packages/password-field/src/vaadin-password-field-button-base-styles.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const passwordFieldBase = css`
1414
--vaadin-button-padding: 0;
1515
color: inherit;
1616
display: block;
17-
cursor: default;
17+
cursor: var(--vaadin-clickable-cursor);
1818
}
1919
2020
:host::before {

0 commit comments

Comments
 (0)