@vaadin/vaadin-lumo-styles 25.0.0-alpha6 → 25.0.0-alpha7

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.
Files changed (219) hide show
  1. package/components/accordion-heading.css +14 -0
  2. package/components/accordion-panel.css +15 -0
  3. package/components/accordion.css +7 -0
  4. package/components/app-layout.css +11 -0
  5. package/components/avatar-group.css +31 -0
  6. package/components/avatar.css +17 -0
  7. package/components/button.css +12 -0
  8. package/components/card.css +50 -0
  9. package/components/charts.css +11 -0
  10. package/components/checkbox-group.css +23 -0
  11. package/components/checkbox.css +14 -0
  12. package/components/combo-box.css +47 -0
  13. package/components/confirm-dialog.css +17 -0
  14. package/components/context-menu.css +32 -0
  15. package/components/crud.css +40 -0
  16. package/components/custom-field.css +20 -0
  17. package/components/dashboard.css +34 -0
  18. package/components/date-picker.css +49 -0
  19. package/components/date-time-picker.css +28 -0
  20. package/components/details-summary.css +11 -0
  21. package/components/details.css +12 -0
  22. package/components/dialog.css +16 -0
  23. package/components/drawer-toggle.css +14 -0
  24. package/components/email-field.css +25 -0
  25. package/components/field-highlighter.css +22 -0
  26. package/components/form-item.css +11 -0
  27. package/components/form-layout.css +11 -0
  28. package/components/grid-filter-column.css +6 -0
  29. package/components/grid-filter.css +12 -0
  30. package/components/grid-pro-edit-column.css +48 -0
  31. package/components/grid-pro.css +14 -0
  32. package/components/grid-selection-column.css +6 -0
  33. package/components/grid-sort-column.css +6 -0
  34. package/components/grid-sorter.css +19 -0
  35. package/components/grid-tree-column.css +6 -0
  36. package/components/grid-tree-toggle.css +11 -0
  37. package/components/grid.css +11 -0
  38. package/components/horizontal-layout.css +11 -0
  39. package/components/icon.css +11 -0
  40. package/components/input-container.css +11 -0
  41. package/components/integer-field.css +25 -0
  42. package/components/item.css +11 -0
  43. package/components/list-box.css +11 -0
  44. package/components/login-form.css +14 -0
  45. package/components/login.css +15 -0
  46. package/components/map.css +11 -0
  47. package/components/master-detail-layout.css +11 -0
  48. package/components/menu-bar.css +47 -0
  49. package/components/message-input.css +13 -0
  50. package/components/message-list.css +6 -0
  51. package/components/message.css +12 -0
  52. package/components/multi-select-combo-box.css +61 -0
  53. package/components/notification.css +15 -0
  54. package/components/number-field.css +25 -0
  55. package/components/overlay.css +11 -0
  56. package/components/password-field.css +32 -0
  57. package/components/popover.css +14 -0
  58. package/components/progress-bar.css +11 -0
  59. package/components/radio-button.css +14 -0
  60. package/components/radio-group.css +23 -0
  61. package/components/rich-text-editor.css +26 -0
  62. package/components/scroller.css +11 -0
  63. package/components/select.css +48 -0
  64. package/components/side-nav-item.css +14 -0
  65. package/components/side-nav.css +12 -0
  66. package/components/split-layout.css +11 -0
  67. package/components/tab.css +11 -0
  68. package/components/tabs.css +12 -0
  69. package/components/tabsheet.css +19 -0
  70. package/components/text-area.css +25 -0
  71. package/components/text-field.css +23 -0
  72. package/components/time-picker.css +43 -0
  73. package/components/tooltip.css +14 -0
  74. package/components/upload.css +28 -0
  75. package/components/vertical-layout.css +11 -0
  76. package/components.css +71 -0
  77. package/global.css +14 -0
  78. package/lumo.css +8 -0
  79. package/package.json +8 -6
  80. package/props.css +12 -0
  81. package/src/components/accordion-heading.css +42 -0
  82. package/src/components/accordion-panel.css +38 -0
  83. package/src/components/app-layout.css +193 -0
  84. package/src/components/avatar-group-menu-item.css +22 -0
  85. package/src/components/avatar-group-overlay.css +15 -0
  86. package/src/components/avatar-group.css +67 -0
  87. package/src/components/avatar.css +110 -0
  88. package/src/components/button.css +335 -0
  89. package/src/components/card.css +38 -0
  90. package/src/components/chart.css +88 -0
  91. package/src/components/checkbox-group.css +18 -0
  92. package/src/components/checkbox.css +341 -0
  93. package/src/components/combo-box-item.css +18 -0
  94. package/src/components/combo-box-overlay.css +15 -0
  95. package/src/components/combo-box.css +14 -0
  96. package/src/components/confirm-dialog-overlay.css +59 -0
  97. package/src/components/context-menu-item.css +39 -0
  98. package/src/components/context-menu-list-box.css +40 -0
  99. package/src/components/context-menu-overlay.css +41 -0
  100. package/src/components/crud-dialog-overlay.css +57 -0
  101. package/src/components/crud-edit.css +30 -0
  102. package/src/components/crud.css +157 -0
  103. package/src/components/custom-field.css +102 -0
  104. package/src/components/dashboard-layout.css +94 -0
  105. package/src/components/dashboard-section.css +113 -0
  106. package/src/components/dashboard-widget.css +224 -0
  107. package/src/components/dashboard.css +23 -0
  108. package/src/components/date-picker-month-calendar.css +192 -0
  109. package/src/components/date-picker-overlay-content.css +161 -0
  110. package/src/components/date-picker-overlay.css +60 -0
  111. package/src/components/date-picker-year.css +35 -0
  112. package/src/components/date-picker.css +41 -0
  113. package/src/components/date-time-picker.css +36 -0
  114. package/src/components/details-summary.css +131 -0
  115. package/src/components/details.css +37 -0
  116. package/src/components/dialog-overlay.css +173 -0
  117. package/src/components/drawer-toggle.css +51 -0
  118. package/src/components/email-field.css +26 -0
  119. package/src/components/field-outline.css +51 -0
  120. package/src/components/form-item.css +36 -0
  121. package/src/components/form-layout.css +11 -0
  122. package/src/components/grid-filter.css +16 -0
  123. package/src/components/grid-pro-edit-select.css +19 -0
  124. package/src/components/grid-pro.css +84 -0
  125. package/src/components/grid-sorter.css +70 -0
  126. package/src/components/grid-tree-toggle.css +104 -0
  127. package/src/components/grid.css +755 -0
  128. package/src/components/horizontal-layout.css +38 -0
  129. package/src/components/icon.css +47 -0
  130. package/src/components/input-container.css +230 -0
  131. package/src/components/item.css +94 -0
  132. package/src/components/list-box.css +31 -0
  133. package/src/components/login-form-wrapper.css +128 -0
  134. package/src/components/login-overlay-wrapper.css +179 -0
  135. package/src/components/map.css +437 -0
  136. package/src/components/master-detail-layout.css +26 -0
  137. package/src/components/menu-bar-button.css +128 -0
  138. package/src/components/menu-bar-item.css +24 -0
  139. package/src/components/menu-bar-overlay.css +10 -0
  140. package/src/components/menu-bar.css +31 -0
  141. package/src/components/message-input.css +30 -0
  142. package/src/components/message.css +82 -0
  143. package/src/components/multi-select-combo-box-chip.css +113 -0
  144. package/src/components/multi-select-combo-box-container.css +20 -0
  145. package/src/components/multi-select-combo-box-item.css +13 -0
  146. package/src/components/multi-select-combo-box-overlay.css +18 -0
  147. package/src/components/multi-select-combo-box.css +98 -0
  148. package/src/components/notification-card.css +228 -0
  149. package/src/components/notification-container.css +53 -0
  150. package/src/components/number-field.css +53 -0
  151. package/src/components/password-field-button.css +19 -0
  152. package/src/components/password-field.css +24 -0
  153. package/src/components/popover-overlay.css +162 -0
  154. package/src/components/progress-bar.css +295 -0
  155. package/src/components/radio-button.css +156 -0
  156. package/src/components/radio-group.css +18 -0
  157. package/src/components/rich-text-editor-popup-overlay.css +27 -0
  158. package/src/components/rich-text-editor.css +485 -0
  159. package/src/components/scroller.css +40 -0
  160. package/src/components/select-overlay.css +54 -0
  161. package/src/components/select-value-button.css +57 -0
  162. package/src/components/select.css +56 -0
  163. package/src/components/side-nav-item.css +170 -0
  164. package/src/components/side-nav.css +102 -0
  165. package/src/components/split-layout.css +132 -0
  166. package/src/components/tab.css +246 -0
  167. package/src/components/tabs.css +285 -0
  168. package/src/components/tabsheet.css +59 -0
  169. package/src/components/text-area.css +116 -0
  170. package/src/components/time-picker-overlay.css +15 -0
  171. package/src/components/time-picker.css +36 -0
  172. package/src/components/tooltip-overlay.css +53 -0
  173. package/src/components/upload-file-list.css +24 -0
  174. package/src/components/upload-file.css +133 -0
  175. package/src/components/upload-icon.css +14 -0
  176. package/src/components/upload.css +56 -0
  177. package/src/components/user-tag.css +48 -0
  178. package/src/components/user-tags-overlay.css +67 -0
  179. package/src/components/vertical-layout.css +38 -0
  180. package/src/global/badge.css +167 -0
  181. package/src/global/dark.css +93 -0
  182. package/src/global/style.css +93 -0
  183. package/src/global/typography.css +113 -0
  184. package/src/mixins/checkable-field.css +67 -0
  185. package/src/mixins/combo-box-loader.css +14 -0
  186. package/src/mixins/combo-box-overlay.css +30 -0
  187. package/src/mixins/dashboard-item.css +253 -0
  188. package/src/mixins/field-base.css +187 -0
  189. package/src/mixins/field-button.css +46 -0
  190. package/src/mixins/field-error-message.css +36 -0
  191. package/src/mixins/field-helper.css +62 -0
  192. package/src/mixins/field-label.css +62 -0
  193. package/src/mixins/field-required.css +26 -0
  194. package/src/mixins/grid-pro-editor.css +35 -0
  195. package/src/mixins/group-field.css +58 -0
  196. package/src/mixins/loader.css +48 -0
  197. package/src/mixins/menu-overlay-core.css +36 -0
  198. package/src/mixins/menu-overlay-ext.css +63 -0
  199. package/src/mixins/overlay.css +113 -0
  200. package/src/mixins/resizable-overlay.css +99 -0
  201. package/src/props/color.css +98 -0
  202. package/src/props/icons.css +61 -0
  203. package/src/props/reset.css +11 -0
  204. package/src/props/sizing.css +19 -0
  205. package/src/props/spacing.css +27 -0
  206. package/src/props/style.css +21 -0
  207. package/src/props/typography.css +24 -0
  208. package/src/utilities/accessibility.css +17 -0
  209. package/src/utilities/background.css +189 -0
  210. package/src/utilities/border.css +173 -0
  211. package/src/utilities/filter.css +37 -0
  212. package/src/utilities/flexbox-grid.css +781 -0
  213. package/src/utilities/layout.css +629 -0
  214. package/src/utilities/shadows.css +29 -0
  215. package/src/utilities/sizing.css +142 -0
  216. package/src/utilities/spacing.css +682 -0
  217. package/src/utilities/transition.css +46 -0
  218. package/src/utilities/typography.css +424 -0
  219. package/utility.css +17 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-base {
7
+ :host {
8
+ display: inline-flex;
9
+ outline: none;
10
+ --lumo-text-field-size: var(--lumo-size-m);
11
+ color: var(--vaadin-input-field-value-color, var(--lumo-body-text-color));
12
+ font-size: var(--vaadin-input-field-value-font-size, var(--lumo-font-size-m));
13
+ font-family: var(--lumo-font-family);
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ -webkit-tap-highlight-color: transparent;
17
+ padding: var(--lumo-space-xs) 0;
18
+ --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));
19
+ --_focus-ring-width: var(--vaadin-focus-ring-width, 2px);
20
+ --_input-height: var(--vaadin-input-field-height, var(--lumo-text-field-size));
21
+ --_disabled-value-color: var(--vaadin-input-field-disabled-value-color, var(--lumo-disabled-text-color));
22
+ }
23
+
24
+ :host::before {
25
+ content: '\2003';
26
+ width: 0;
27
+ /* Size and position this element on the same vertical position as the input-field element
28
+ to make vertical align for the host element work as expected */
29
+ height: var(--_input-height);
30
+ box-sizing: border-box;
31
+ display: inline-flex;
32
+ align-items: center;
33
+ }
34
+
35
+ [class$='container'] {
36
+ display: flex;
37
+ flex-direction: column;
38
+ min-width: 100%;
39
+ max-width: 100%;
40
+ width: var(--vaadin-field-default-width, 12em);
41
+ }
42
+
43
+ :host([hidden]) {
44
+ display: none !important;
45
+ }
46
+
47
+ :host([focused]) [part='input-field'] ::slotted(:is(input, textarea)) {
48
+ mask-image: none;
49
+ }
50
+
51
+ ::slotted(:is(input, textarea):placeholder-shown) {
52
+ color: var(--vaadin-input-field-placeholder-color, var(--lumo-secondary-text-color));
53
+ }
54
+
55
+ /* Hover */
56
+ :host(:hover:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after {
57
+ opacity: var(--vaadin-input-field-hover-highlight-opacity, 0.1);
58
+ }
59
+
60
+ /* Touch device adjustment */
61
+ @media (pointer: coarse) {
62
+ :host(:hover:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after {
63
+ opacity: 0;
64
+ }
65
+
66
+ :host(:active:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after {
67
+ opacity: 0.2;
68
+ }
69
+ }
70
+
71
+ /* Trigger when not focusing using the keyboard */
72
+ :host([focused]:not([focus-ring]):not([readonly])) [part='input-field']::after {
73
+ transform: scaleX(0);
74
+ transition-duration: 0.15s, 1s;
75
+ }
76
+
77
+ /* Opt-in focus-ring when using pointer devices */
78
+ /* This applies a focus-ring as box-shadow when the element is focused, but
79
+ the ring is only visible / has a width when the respective CSS property is
80
+ "enabled" using a value of 1 */
81
+ :host([focused]) [part='input-field'] {
82
+ /* Borders are implemented using box-shadows as well. To avoid overriding
83
+ the border on focus, even if the pointer focus-ring is disabled, we need to:
84
+ - Duplicate the border box shadow for this rule
85
+ - Remove the border (by using width of 0) when the focus-ring is visible,
86
+ which is the same behavior as for the keyboard focus-ring below
87
+ - Apply the border when the focus ring is not visible
88
+ */
89
+ --_pointer-focus-visible: clamp(0, var(--lumo-input-field-pointer-focus-visible, 0), 1);
90
+ --_conditional-border-width: calc(calc(1 - var(--_pointer-focus-visible)) * var(--_input-border-width));
91
+ --_conditional-focus-ring-width: calc(var(--_pointer-focus-visible) * var(--_focus-ring-width));
92
+ box-shadow:
93
+ inset 0 0 0 var(--_conditional-border-width) var(--_input-border-color),
94
+ 0 0 0 var(--_conditional-focus-ring-width) var(--_focus-ring-color);
95
+ }
96
+
97
+ /* Focus-ring when using keyboard navigation */
98
+ :host([focus-ring]) [part='input-field'] {
99
+ box-shadow: 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
100
+ }
101
+
102
+ /* Read-only and disabled */
103
+ :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {
104
+ opacity: 0;
105
+ }
106
+
107
+ /* Read-only style */
108
+ :host([readonly]) {
109
+ --vaadin-input-field-border-color: transparent;
110
+ }
111
+
112
+ /* Disabled style */
113
+ :host([disabled]) {
114
+ pointer-events: none;
115
+ --vaadin-input-field-border-color: var(--lumo-contrast-20pct);
116
+ }
117
+
118
+ :host([disabled]) [part='label'],
119
+ :host([disabled]) [part='input-field'] ::slotted([slot$='fix']) {
120
+ color: var(--lumo-disabled-text-color);
121
+ -webkit-text-fill-color: var(--lumo-disabled-text-color);
122
+ }
123
+
124
+ :host([disabled]) [part='input-field'] ::slotted(:not([slot$='fix'])) {
125
+ color: var(--_disabled-value-color);
126
+ -webkit-text-fill-color: var(--_disabled-value-color);
127
+ }
128
+
129
+ /* Invalid style */
130
+ :host([invalid]) {
131
+ --vaadin-input-field-border-color: var(--lumo-error-color);
132
+ --_focus-ring-color: var(--lumo-error-color-50pct);
133
+ }
134
+
135
+ :host([input-prevented]) [part='input-field'] {
136
+ animation: shake 0.15s infinite;
137
+ }
138
+
139
+ @keyframes shake {
140
+ 25% {
141
+ transform: translateX(4px);
142
+ }
143
+
144
+ 75% {
145
+ transform: translateX(-4px);
146
+ }
147
+ }
148
+
149
+ /* Small theme */
150
+ :host([theme~='small']) {
151
+ font-size: var(--lumo-font-size-s);
152
+ --lumo-text-field-size: var(--lumo-size-s);
153
+ }
154
+
155
+ :host([theme~='small']) [part='label'] {
156
+ font-size: var(--lumo-font-size-xs);
157
+ }
158
+
159
+ :host([theme~='small']) [part='error-message'] {
160
+ font-size: var(--lumo-font-size-xxs);
161
+ }
162
+
163
+ /* Slotted content */
164
+ [part='input-field'] ::slotted(:not(vaadin-icon):not(input):not(textarea)) {
165
+ color: var(--lumo-secondary-text-color);
166
+ font-weight: 400;
167
+ }
168
+
169
+ [part='clear-button']::before {
170
+ content: var(--lumo-icons-cross);
171
+ }
172
+
173
+ @media (forced-colors: active) {
174
+ :host(:not([readonly])) [part='input-field'] {
175
+ outline: 1px solid;
176
+ outline-offset: -1px;
177
+ }
178
+
179
+ :host([focused]) [part='input-field'] {
180
+ outline-width: 2px;
181
+ }
182
+
183
+ :host([disabled]) [part='input-field'] {
184
+ outline-color: GrayText;
185
+ }
186
+ }
187
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-button {
7
+ [part$='button'] {
8
+ flex: none;
9
+ width: 1em;
10
+ height: 1em;
11
+ line-height: 1;
12
+ font-size: var(--lumo-icon-size-m);
13
+ text-align: center;
14
+ color: var(--lumo-contrast-60pct);
15
+ transition: 0.2s color;
16
+ cursor: var(--lumo-clickable-cursor);
17
+ }
18
+
19
+ [part$='button']:hover {
20
+ color: var(--lumo-contrast-90pct);
21
+ }
22
+
23
+ :host([disabled]) [part$='button'],
24
+ :host([readonly]) [part$='button'] {
25
+ color: var(--lumo-contrast-20pct);
26
+ cursor: default;
27
+ }
28
+
29
+ [part$='button']::before {
30
+ font-family: 'lumo-icons';
31
+ display: block;
32
+ }
33
+
34
+ [part='clear-button'] {
35
+ display: none;
36
+ cursor: default;
37
+ }
38
+
39
+ [part='clear-button']::before {
40
+ content: '\2715';
41
+ }
42
+
43
+ :host([clear-button-visible][has-value]:not([disabled]):not([readonly])) [part='clear-button'] {
44
+ display: block;
45
+ }
46
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-error-message {
7
+ [part='error-message'] {
8
+ margin-left: calc(var(--lumo-border-radius-m) / 4);
9
+ font-size: var(--vaadin-input-field-error-font-size, var(--lumo-font-size-xs));
10
+ line-height: var(--lumo-line-height-xs);
11
+ font-weight: var(--vaadin-input-field-error-font-weight, 400);
12
+ color: var(--vaadin-input-field-error-color, var(--lumo-error-text-color));
13
+ will-change: max-height;
14
+ transition: 0.4s max-height;
15
+ max-height: 5em;
16
+ }
17
+
18
+ :host([has-error-message]) [part='error-message']::before,
19
+ :host([has-error-message]) [part='error-message']::after {
20
+ content: '';
21
+ display: block;
22
+ height: 0.4em;
23
+ }
24
+
25
+ :host(:not([invalid])) [part='error-message'] {
26
+ max-height: 0;
27
+ overflow: hidden;
28
+ }
29
+
30
+ /* RTL specific styles */
31
+
32
+ :host([dir='rtl']) [part='error-message'] {
33
+ margin-left: 0;
34
+ margin-right: calc(var(--lumo-border-radius-m) / 4);
35
+ }
36
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-helper {
7
+ :host {
8
+ --_helper-spacing: var(--vaadin-input-field-helper-spacing, 0.4em);
9
+ }
10
+
11
+ :host([has-helper]) [part='helper-text']::before {
12
+ content: '';
13
+ display: block;
14
+ height: var(--_helper-spacing);
15
+ }
16
+
17
+ [part='helper-text'] {
18
+ display: block;
19
+ color: var(--vaadin-input-field-helper-color, var(--lumo-secondary-text-color));
20
+ font-size: var(--vaadin-input-field-helper-font-size, var(--lumo-font-size-xs));
21
+ line-height: var(--lumo-line-height-xs);
22
+ font-weight: var(--vaadin-input-field-helper-font-weight, 400);
23
+ margin-left: calc(var(--lumo-border-radius-m) / 4);
24
+ transition: color 0.2s;
25
+ }
26
+
27
+ :host(:hover:not([readonly])) [part='helper-text'] {
28
+ color: var(--lumo-body-text-color);
29
+ }
30
+
31
+ :host([disabled]) [part='helper-text'] {
32
+ color: var(--lumo-disabled-text-color);
33
+ -webkit-text-fill-color: var(--lumo-disabled-text-color);
34
+ }
35
+
36
+ :host([has-helper][theme~='helper-above-field']) [part='helper-text']::before {
37
+ display: none;
38
+ }
39
+
40
+ :host([has-helper][theme~='helper-above-field']) [part='helper-text']::after {
41
+ content: '';
42
+ display: block;
43
+ height: var(--_helper-spacing);
44
+ }
45
+
46
+ :host([has-helper][theme~='helper-above-field']) [part='label'] {
47
+ order: 0;
48
+ padding-bottom: var(--_helper-spacing);
49
+ }
50
+
51
+ :host([has-helper][theme~='helper-above-field']) [part='helper-text'] {
52
+ order: 1;
53
+ }
54
+
55
+ :host([has-helper][theme~='helper-above-field']) [part='label'] + * {
56
+ order: 2;
57
+ }
58
+
59
+ :host([has-helper][theme~='helper-above-field']) [part='error-message'] {
60
+ order: 3;
61
+ }
62
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-label {
7
+ [part='label'] {
8
+ align-self: flex-start;
9
+ color: var(--vaadin-input-field-label-color, var(--lumo-secondary-text-color));
10
+ font-weight: var(--vaadin-input-field-label-font-weight, 500);
11
+ font-size: var(--vaadin-input-field-label-font-size, var(--lumo-font-size-s));
12
+ transition: color 0.2s;
13
+ line-height: 1;
14
+ padding-inline: calc(var(--lumo-border-radius-m) / 4) 1em;
15
+ padding-bottom: 0.5em;
16
+ /* As a workaround for diacritics being cut off, add a top padding and a
17
+ negative margin to compensate */
18
+ padding-top: 0.25em;
19
+ margin-top: -0.25em;
20
+ overflow: hidden;
21
+ white-space: nowrap;
22
+ text-overflow: ellipsis;
23
+ position: relative;
24
+ max-width: 100%;
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ :host([focused]:not([readonly])) [part='label'] {
29
+ color: var(--vaadin-input-field-focused-label-color, var(--lumo-primary-text-color));
30
+ }
31
+
32
+ :host(:hover:not([readonly]):not([focused])) [part='label'] {
33
+ color: var(--vaadin-input-field-hovered-label-color, var(--lumo-body-text-color));
34
+ }
35
+
36
+ /* Touch device adjustment */
37
+ @media (pointer: coarse) {
38
+ :host(:hover:not([readonly]):not([focused])) [part='label'] {
39
+ color: var(--vaadin-input-field-label-color, var(--lumo-secondary-text-color));
40
+ }
41
+ }
42
+
43
+ :host(:not([has-label])) [part='label'] {
44
+ display: none;
45
+ }
46
+
47
+ :host([has-label])::before {
48
+ margin-top: calc(var(--lumo-font-size-s) * 1.5);
49
+ }
50
+
51
+ :host([has-label][theme~='small'])::before {
52
+ margin-top: calc(var(--lumo-font-size-xs) * 1.5);
53
+ }
54
+
55
+ :host([has-label]) {
56
+ padding-top: var(--lumo-space-m);
57
+ }
58
+
59
+ :host([has-label]) ::slotted([slot='tooltip']) {
60
+ --vaadin-tooltip-offset-bottom: calc((var(--lumo-space-m) - var(--lumo-space-xs)) * -1);
61
+ }
62
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_field-required {
7
+ :host([required]) [part='required-indicator']::after {
8
+ content: var(--lumo-required-field-indicator, '\2022');
9
+ color: var(--lumo-required-field-indicator-color, var(--lumo-primary-text-color));
10
+ position: absolute;
11
+ right: 0;
12
+ width: 1em;
13
+ text-align: center;
14
+ }
15
+
16
+ :host([invalid]) [part='required-indicator']::after {
17
+ color: var(--lumo-required-field-indicator-color, var(--lumo-error-text-color));
18
+ }
19
+
20
+ /* RTL specific styles */
21
+
22
+ :host([dir='rtl']) [part='required-indicator']::after {
23
+ right: auto;
24
+ left: 0;
25
+ }
26
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2000 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_grid-pro-editor {
7
+ :host([theme~='grid-pro-editor']) {
8
+ position: absolute;
9
+ inset: 0;
10
+ padding: 0;
11
+ will-change: transform;
12
+ font-size: inherit;
13
+ --lumo-text-field-size: 27px;
14
+ /* outline similar to what grid uses */
15
+ box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
16
+ }
17
+
18
+ :host([theme~='grid-pro-editor']) [part='input-field'] {
19
+ padding: 0;
20
+ border-radius: 0;
21
+ flex-grow: 1;
22
+ font-weight: 400;
23
+ --vaadin-input-field-border-color: transparent;
24
+ }
25
+
26
+ /* reset outline inherited from text-field */
27
+ :host([theme~='grid-pro-editor'][focus-ring]) [part='input-field'] {
28
+ box-shadow: none;
29
+ }
30
+
31
+ :host([theme~='grid-pro-editor']) ::slotted(input) {
32
+ padding: 0 var(--lumo-space-m);
33
+ font-size: inherit;
34
+ }
35
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_group-field {
7
+ :host {
8
+ display: inline-flex;
9
+ color: var(--lumo-body-text-color);
10
+ font-size: var(--lumo-font-size-m);
11
+ font-family: var(--lumo-font-family);
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ -webkit-tap-highlight-color: transparent;
15
+ padding: var(--lumo-space-xs) 0;
16
+ }
17
+
18
+ :host::before {
19
+ content: '\2003';
20
+ width: 0;
21
+ height: var(--lumo-size-s);
22
+ box-sizing: border-box;
23
+ display: inline-flex;
24
+ align-items: center;
25
+ }
26
+
27
+ :host([hidden]) {
28
+ display: none !important;
29
+ }
30
+
31
+ .vaadin-group-field-container {
32
+ display: flex;
33
+ flex-direction: column;
34
+ width: 100%;
35
+ }
36
+
37
+ [part='group-field'] {
38
+ display: flex;
39
+ flex-wrap: wrap;
40
+ }
41
+
42
+ :host(:not([has-label])) [part='label'] {
43
+ display: none;
44
+ }
45
+
46
+ :host([theme~='vertical']) [part='group-field'] {
47
+ flex-direction: column;
48
+ }
49
+
50
+ :host([disabled]) [part='label'] {
51
+ color: var(--lumo-disabled-text-color);
52
+ -webkit-text-fill-color: var(--lumo-disabled-text-color);
53
+ }
54
+
55
+ :host([focused]:not([readonly])) [part='label'] {
56
+ color: var(--lumo-primary-text-color);
57
+ }
58
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_loader {
7
+ [part='loader'] {
8
+ box-sizing: border-box;
9
+ width: var(--lumo-icon-size-s);
10
+ height: var(--lumo-icon-size-s);
11
+ border: 2px solid transparent;
12
+ border-color: var(--lumo-primary-color-10pct) var(--lumo-primary-color-10pct) var(--lumo-primary-color)
13
+ var(--lumo-primary-color);
14
+ border-radius: calc(0.5 * var(--lumo-icon-size-s));
15
+ opacity: 0;
16
+ pointer-events: none;
17
+ }
18
+
19
+ :host(:not([loading])) [part='loader'] {
20
+ display: none;
21
+ }
22
+
23
+ :host([loading]) [part='loader'] {
24
+ animation:
25
+ 1s linear infinite lumo-loader-rotate,
26
+ 0.3s 0.1s lumo-loader-fade-in both;
27
+ }
28
+
29
+ @keyframes lumo-loader-fade-in {
30
+ 0% {
31
+ opacity: 0;
32
+ }
33
+
34
+ 100% {
35
+ opacity: 1;
36
+ }
37
+ }
38
+
39
+ @keyframes lumo-loader-rotate {
40
+ 0% {
41
+ transform: rotate(0deg);
42
+ }
43
+
44
+ 100% {
45
+ transform: rotate(360deg);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_menu-overlay-core {
7
+ :host([opening]),
8
+ :host([closing]) {
9
+ animation: 0.14s lumo-overlay-dummy-animation;
10
+ }
11
+
12
+ [part='overlay'] {
13
+ will-change: opacity, transform;
14
+ }
15
+
16
+ :host([opening]) [part='overlay'] {
17
+ animation: 0.1s lumo-menu-overlay-enter ease-out both;
18
+ }
19
+
20
+ @keyframes lumo-menu-overlay-enter {
21
+ 0% {
22
+ opacity: 0;
23
+ transform: translateY(-4px);
24
+ }
25
+ }
26
+
27
+ :host([closing]) [part='overlay'] {
28
+ animation: 0.1s lumo-menu-overlay-exit both;
29
+ }
30
+
31
+ @keyframes lumo-menu-overlay-exit {
32
+ 100% {
33
+ opacity: 0;
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @license
3
+ * Copyright (c) 2017 - 2025 Vaadin Ltd.
4
+ * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
+ */
6
+ @media lumo_mixins_menu-overlay-ext {
7
+ /* Small viewport (bottom sheet) styles */
8
+ /* Use direct media queries instead of the state attributes ([phone] and [fullscreen]) provided by the elements */
9
+ @media (max-width: 450px), (max-height: 450px) {
10
+ :host {
11
+ inset: 0 0 var(--vaadin-overlay-viewport-bottom, 0) 0 !important;
12
+ align-items: stretch !important;
13
+ justify-content: flex-end !important;
14
+ }
15
+
16
+ [part='overlay'] {
17
+ max-height: 50vh;
18
+ width: 100vw;
19
+ border-radius: 0;
20
+ box-shadow: var(--lumo-box-shadow-xl);
21
+ }
22
+
23
+ /* The content part scrolls instead of the overlay part, because of the gradient fade-out */
24
+ [part='content'] {
25
+ padding: 30px var(--lumo-space-m);
26
+ max-height: inherit;
27
+ box-sizing: border-box;
28
+ overflow: auto;
29
+ mask-image: linear-gradient(transparent, #000 40px, #000 calc(100% - 40px), transparent);
30
+ }
31
+
32
+ [part='backdrop'] {
33
+ display: block;
34
+ }
35
+
36
+ /* Animations */
37
+
38
+ :host([opening]) [part='overlay'] {
39
+ animation: 0.2s lumo-mobile-menu-overlay-enter cubic-bezier(0.215, 0.61, 0.355, 1) both;
40
+ }
41
+
42
+ :host([closing]),
43
+ :host([closing]) [part='backdrop'] {
44
+ animation-delay: 0.14s;
45
+ }
46
+
47
+ :host([closing]) [part='overlay'] {
48
+ animation: 0.14s 0.14s lumo-mobile-menu-overlay-exit cubic-bezier(0.55, 0.055, 0.675, 0.19) both;
49
+ }
50
+ }
51
+
52
+ @keyframes lumo-mobile-menu-overlay-enter {
53
+ 0% {
54
+ transform: translateY(150%);
55
+ }
56
+ }
57
+
58
+ @keyframes lumo-mobile-menu-overlay-exit {
59
+ 100% {
60
+ transform: translateY(150%);
61
+ }
62
+ }
63
+ }