@vaadin/master-detail-layout 25.0.0-alpha7 → 25.0.0-alpha8
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/package.json +7 -7
- package/src/styles/vaadin-master-detail-layout-core-styles.js +73 -69
- package/src/styles/vaadin-master-detail-layout-transition-core-styles.js +94 -243
- package/src/vaadin-master-detail-layout.d.ts +0 -7
- package/src/vaadin-master-detail-layout.js +23 -20
- package/theme/lumo/vaadin-master-detail-layout-styles.js +6 -11
- package/web-types.json +2 -2
- package/web-types.lit.json +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/master-detail-layout",
|
|
3
|
-
"version": "25.0.0-
|
|
3
|
+
"version": "25.0.0-alpha8",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"web-component"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@vaadin/a11y-base": "25.0.0-
|
|
38
|
-
"@vaadin/component-base": "25.0.0-
|
|
39
|
-
"@vaadin/vaadin-lumo-styles": "25.0.0-
|
|
40
|
-
"@vaadin/vaadin-themable-mixin": "25.0.0-
|
|
37
|
+
"@vaadin/a11y-base": "25.0.0-alpha8",
|
|
38
|
+
"@vaadin/component-base": "25.0.0-alpha8",
|
|
39
|
+
"@vaadin/vaadin-lumo-styles": "25.0.0-alpha8",
|
|
40
|
+
"@vaadin/vaadin-themable-mixin": "25.0.0-alpha8",
|
|
41
41
|
"lit": "^3.0.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@vaadin/chai-plugins": "25.0.0-
|
|
44
|
+
"@vaadin/chai-plugins": "25.0.0-alpha8",
|
|
45
45
|
"@vaadin/testing-helpers": "^2.0.0",
|
|
46
46
|
"sinon": "^18.0.0"
|
|
47
47
|
},
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"web-types.json",
|
|
50
50
|
"web-types.lit.json"
|
|
51
51
|
],
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "ebf53673d5f639d2b1b6f2b31f640f530643ee2f"
|
|
53
53
|
}
|
|
@@ -6,64 +6,72 @@
|
|
|
6
6
|
import { css } from 'lit';
|
|
7
7
|
|
|
8
8
|
export const masterDetailLayoutStyles = css`
|
|
9
|
+
/* Layout and positioning styles */
|
|
10
|
+
|
|
9
11
|
:host {
|
|
10
12
|
display: flex;
|
|
11
13
|
box-sizing: border-box;
|
|
12
14
|
height: 100%;
|
|
15
|
+
max-width: 100%;
|
|
16
|
+
max-height: 100%;
|
|
17
|
+
position: relative; /* Keep the positioning context stable across all modes */
|
|
18
|
+
overflow: hidden;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
:host([hidden]) {
|
|
16
22
|
display: none !important;
|
|
17
23
|
}
|
|
18
24
|
|
|
19
|
-
:host(
|
|
20
|
-
|
|
21
|
-
display: none;
|
|
25
|
+
:host([orientation='vertical']) {
|
|
26
|
+
flex-direction: column;
|
|
22
27
|
}
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
[part='_detail-internal'] {
|
|
30
|
+
display: contents;
|
|
31
|
+
justify-content: end;
|
|
26
32
|
}
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
position: relative;
|
|
34
|
+
:host([orientation='vertical']) [part='_detail-internal'] {
|
|
35
|
+
align-items: end;
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
:host(:is([drawer], [stack])
|
|
34
|
-
:host([drawer][
|
|
38
|
+
:host(:is([drawer], [stack])) [part='_detail-internal'],
|
|
39
|
+
:host(:is([drawer], [stack])[has-detail]) [part='backdrop'] {
|
|
40
|
+
display: flex;
|
|
35
41
|
position: absolute;
|
|
42
|
+
z-index: 1;
|
|
43
|
+
inset: 0;
|
|
44
|
+
overscroll-behavior: contain;
|
|
36
45
|
}
|
|
37
46
|
|
|
38
|
-
:host(:
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
:host(:not([has-detail])) [part='_detail-internal'],
|
|
48
|
+
[part='backdrop'] {
|
|
49
|
+
display: none;
|
|
41
50
|
}
|
|
42
51
|
|
|
43
|
-
:host([
|
|
44
|
-
|
|
45
|
-
inset: 0;
|
|
46
|
-
z-index: 1;
|
|
52
|
+
:host([orientation='horizontal'][drawer]) [part='detail'] {
|
|
53
|
+
margin-inline-start: 50px;
|
|
47
54
|
}
|
|
48
55
|
|
|
49
|
-
:host(
|
|
50
|
-
|
|
56
|
+
:host([orientation='vertical'][drawer]) [part='detail'] {
|
|
57
|
+
margin-top: 50px;
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
:host([drawer][
|
|
54
|
-
|
|
55
|
-
height: 100%;
|
|
56
|
-
width: var(--_detail-min-size, min-content);
|
|
57
|
-
max-width: 100%;
|
|
60
|
+
:host(:is([drawer], [stack])[containment='viewport']) :is([part='_detail-internal'], [part='backdrop']) {
|
|
61
|
+
position: fixed;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
/* Sizing styles */
|
|
65
|
+
|
|
66
|
+
[part] {
|
|
67
|
+
box-sizing: border-box;
|
|
68
|
+
max-width: 100%;
|
|
69
|
+
max-height: 100%;
|
|
62
70
|
}
|
|
63
71
|
|
|
64
72
|
/* No fixed size */
|
|
65
73
|
:host(:not([has-master-size])) [part='master'],
|
|
66
|
-
:host(:not([has-detail-size])) [part='detail'] {
|
|
74
|
+
:host(:not([has-detail-size]):not([drawer], [stack])) [part='detail'] {
|
|
67
75
|
flex-grow: 1;
|
|
68
76
|
flex-basis: 50%;
|
|
69
77
|
}
|
|
@@ -74,82 +82,78 @@ export const masterDetailLayoutStyles = css`
|
|
|
74
82
|
flex-shrink: 0;
|
|
75
83
|
}
|
|
76
84
|
|
|
77
|
-
:host([has-master-size][
|
|
85
|
+
:host([orientation='horizontal'][has-master-size][has-detail]) [part='master'] {
|
|
78
86
|
width: var(--_master-size);
|
|
79
87
|
}
|
|
80
88
|
|
|
81
|
-
:host([has-
|
|
89
|
+
:host([orientation='vertical'][has-master-size][has-detail]) [part='master'] {
|
|
90
|
+
height: var(--_master-size);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
:host([orientation='horizontal'][has-detail-size]:not([stack])) [part='detail'] {
|
|
82
94
|
width: var(--_detail-size);
|
|
83
95
|
}
|
|
84
96
|
|
|
97
|
+
:host([orientation='vertical'][has-detail-size]:not([stack])) [part='detail'] {
|
|
98
|
+
height: var(--_detail-size);
|
|
99
|
+
}
|
|
100
|
+
|
|
85
101
|
:host([has-master-size][has-detail-size]) [part='master'] {
|
|
86
102
|
flex-grow: 1;
|
|
87
103
|
flex-basis: var(--_master-size);
|
|
88
104
|
}
|
|
89
105
|
|
|
90
|
-
:host([has-master-size][has-detail-size]) [part='detail'] {
|
|
106
|
+
:host([has-master-size][has-detail-size]:not([drawer], [stack])) [part='detail'] {
|
|
91
107
|
flex-grow: 1;
|
|
92
108
|
flex-basis: var(--_detail-size);
|
|
93
109
|
}
|
|
94
110
|
|
|
95
111
|
/* Min size */
|
|
96
|
-
:host([has-master-min-size]
|
|
97
|
-
min-width: var(--_master-min-size);
|
|
112
|
+
:host([orientation='horizontal'][has-master-min-size]) [part='master'] {
|
|
113
|
+
min-width: min(100%, var(--_master-min-size));
|
|
98
114
|
}
|
|
99
115
|
|
|
100
|
-
:host([has-
|
|
101
|
-
min-
|
|
116
|
+
:host([orientation='vertical'][has-master-min-size]) [part='master'] {
|
|
117
|
+
min-height: min(100%, var(--_master-min-size));
|
|
102
118
|
}
|
|
103
119
|
|
|
104
|
-
:host([has-
|
|
105
|
-
|
|
106
|
-
flex-shrink: 0;
|
|
120
|
+
:host([orientation='horizontal'][has-detail-min-size]) [part='detail'] {
|
|
121
|
+
min-width: min(100%, var(--_detail-min-size));
|
|
107
122
|
}
|
|
108
123
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
flex-direction: column;
|
|
124
|
+
:host([orientation='vertical'][has-detail-min-size]) [part='detail'] {
|
|
125
|
+
min-height: min(100%, var(--_detail-min-size));
|
|
112
126
|
}
|
|
113
127
|
|
|
114
|
-
:host([
|
|
115
|
-
|
|
128
|
+
:host([drawer]) [part='master'],
|
|
129
|
+
:host([stack]) [part] {
|
|
130
|
+
width: 100% !important;
|
|
131
|
+
height: 100% !important;
|
|
132
|
+
min-width: auto !important;
|
|
133
|
+
min-height: auto !important;
|
|
134
|
+
max-width: 100% !important;
|
|
135
|
+
max-height: 100% !important;
|
|
116
136
|
}
|
|
117
137
|
|
|
118
|
-
|
|
119
|
-
inset-block-end: 0;
|
|
120
|
-
width: 100%;
|
|
121
|
-
height: var(--_detail-min-size, min-content);
|
|
122
|
-
}
|
|
138
|
+
/* Decorative/visual styles */
|
|
123
139
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/* Fixed size */
|
|
129
|
-
:host([has-master-size][orientation='vertical']) [part='master'] {
|
|
130
|
-
height: var(--_master-size);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
:host([has-detail-size][orientation='vertical']:not([stack])) [part='detail'] {
|
|
134
|
-
height: var(--_detail-size);
|
|
140
|
+
[part='backdrop'] {
|
|
141
|
+
background-color: rgba(0, 0, 0, 0.2);
|
|
135
142
|
}
|
|
136
143
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
:host([has-master-min-size][orientation='vertical'][drawer]) {
|
|
140
|
-
min-height: var(--_master-min-size);
|
|
144
|
+
[part='detail'] {
|
|
145
|
+
background: #fff;
|
|
141
146
|
}
|
|
142
147
|
|
|
143
|
-
:host(
|
|
144
|
-
|
|
148
|
+
:host(:is([drawer], [stack])) [part='detail'] {
|
|
149
|
+
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.3);
|
|
145
150
|
}
|
|
146
151
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
max-height: 100%;
|
|
152
|
+
:host([orientation='horizontal']:not([drawer], [stack])) [part='detail'] {
|
|
153
|
+
border-inline-start: 1px solid rgba(0, 0, 0, 0.1);
|
|
150
154
|
}
|
|
151
155
|
|
|
152
|
-
:host([stack]) [part='detail'] {
|
|
153
|
-
|
|
156
|
+
:host([orientation='vertical']:not([drawer], [stack])) [part='detail'] {
|
|
157
|
+
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
|
154
158
|
}
|
|
155
159
|
`;
|
|
@@ -6,284 +6,135 @@
|
|
|
6
6
|
import { css } from 'lit';
|
|
7
7
|
|
|
8
8
|
export const masterDetailLayoutTransitionStyles = css`
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/* Default cross-fade animation */
|
|
18
|
-
vaadin-master-detail-layout[transition] {
|
|
19
|
-
view-transition-name: vaadin-master-detail-layout;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
::view-transition-group(vaadin-master-detail-layout) {
|
|
23
|
-
animation-duration: var(--vaadin-master-detail-layout-transition-duration, 300ms);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/* Drawer - horizontal - add */
|
|
27
|
-
|
|
28
|
-
vaadin-master-detail-layout[drawer][orientation='horizontal'][transition='add']::part(detail) {
|
|
29
|
-
view-transition-name: vaadin-master-detail-layout-drawer-horizontal-detail-add;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
::view-transition-group(vaadin-master-detail-layout-drawer-horizontal-detail-add) {
|
|
33
|
-
clip-path: inset(0);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
::view-transition-new(vaadin-master-detail-layout-drawer-horizontal-detail-add) {
|
|
37
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
38
|
-
vaadin-master-detail-layout-drawer-horizontal-detail-add;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@keyframes vaadin-master-detail-layout-drawer-horizontal-detail-add {
|
|
42
|
-
from {
|
|
43
|
-
transform: translateX(calc(100% * var(--_vaadin-master-detail-layout-dir-multiplier)));
|
|
9
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
10
|
+
html {
|
|
11
|
+
--_vaadin-mdl-dir-multiplier: 1;
|
|
12
|
+
--_vaadin-mdl-stack-master-offset: 20%;
|
|
13
|
+
--_vaadin-mdl-stack-master-clip-path: inset(0 0 0 var(--_vaadin-mdl-stack-master-offset));
|
|
14
|
+
--_vaadin-mdl-easing: cubic-bezier(0.78, 0, 0.22, 1);
|
|
44
15
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* Drawer - horizontal - remove */
|
|
48
|
-
|
|
49
|
-
vaadin-master-detail-layout[drawer][orientation='horizontal'][transition='remove']::part(detail) {
|
|
50
|
-
view-transition-name: vaadin-master-detail-layout-drawer-horizontal-detail-remove;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
::view-transition-group(vaadin-master-detail-layout-drawer-horizontal-detail-remove) {
|
|
54
|
-
clip-path: inset(0);
|
|
55
|
-
}
|
|
56
16
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@keyframes vaadin-master-detail-layout-drawer-horizontal-detail-remove {
|
|
63
|
-
to {
|
|
64
|
-
transform: translateX(calc(100% * var(--_vaadin-master-detail-layout-dir-multiplier)));
|
|
17
|
+
html[dir='rtl'] {
|
|
18
|
+
--_vaadin-mdl-dir-multiplier: -1;
|
|
19
|
+
--_vaadin-mdl-stack-master-clip-path: inset(0 var(--_vaadin-mdl-stack-master-offset) 0 0);
|
|
65
20
|
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/* Stack - horizontal - add */
|
|
69
21
|
|
|
70
|
-
|
|
71
|
-
view-transition-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
::view-transition-group(vaadin-master-detail-layout-stack-horizontal-add) {
|
|
75
|
-
clip-path: inset(0);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
::view-transition-new(vaadin-master-detail-layout-stack-horizontal-add) {
|
|
79
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
80
|
-
vaadin-master-detail-layout-stack-horizontal-add-new;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
::view-transition-old(vaadin-master-detail-layout-stack-horizontal-add) {
|
|
84
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
85
|
-
vaadin-master-detail-layout-stack-horizontal-add-old;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@keyframes vaadin-master-detail-layout-stack-horizontal-add-new {
|
|
89
|
-
from {
|
|
90
|
-
transform: translateX(calc(100px * var(--_vaadin-master-detail-layout-dir-multiplier)));
|
|
91
|
-
opacity: 0;
|
|
22
|
+
::view-transition-group(vaadin-mdl-backdrop),
|
|
23
|
+
::view-transition-group(vaadin-mdl-master),
|
|
24
|
+
::view-transition-group(vaadin-mdl-detail) {
|
|
25
|
+
animation-duration: 0.4s;
|
|
92
26
|
}
|
|
93
|
-
}
|
|
94
27
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
opacity: 0;
|
|
28
|
+
::view-transition-group(vaadin-mdl-master),
|
|
29
|
+
::view-transition-group(vaadin-mdl-detail) {
|
|
30
|
+
animation-timing-function: var(--_vaadin-mdl-easing);
|
|
99
31
|
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* Stack - horizontal - remove */
|
|
103
|
-
|
|
104
|
-
vaadin-master-detail-layout[stack][orientation='horizontal'][transition='remove'] {
|
|
105
|
-
view-transition-name: vaadin-master-detail-layout-stack-horizontal-remove;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
::view-transition-group(vaadin-master-detail-layout-stack-horizontal-remove) {
|
|
109
|
-
clip-path: inset(0);
|
|
110
|
-
}
|
|
111
32
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
vaadin-master-detail-layout-stack-horizontal-remove-old;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
@keyframes vaadin-master-detail-layout-stack-horizontal-remove-new {
|
|
123
|
-
from {
|
|
124
|
-
transform: translateX(calc(-100px * var(--_vaadin-master-detail-layout-dir-multiplier)));
|
|
125
|
-
opacity: 0;
|
|
33
|
+
::view-transition-image-pair(vaadin-mdl-master),
|
|
34
|
+
::view-transition-image-pair(vaadin-mdl-detail),
|
|
35
|
+
::view-transition-new(vaadin-mdl-master),
|
|
36
|
+
::view-transition-new(vaadin-mdl-detail),
|
|
37
|
+
::view-transition-old(vaadin-mdl-master),
|
|
38
|
+
::view-transition-old(vaadin-mdl-detail) {
|
|
39
|
+
animation-timing-function: inherit;
|
|
126
40
|
}
|
|
127
|
-
}
|
|
128
41
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
opacity: 0;
|
|
42
|
+
/* Needed to promote the backdrop on top the master during the transition */
|
|
43
|
+
vaadin-master-detail-layout[transition]:not([transition='replace'])::part(backdrop) {
|
|
44
|
+
view-transition-name: vaadin-mdl-backdrop;
|
|
133
45
|
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/* Stack - horizontal - viewport - add */
|
|
137
|
-
|
|
138
|
-
vaadin-master-detail-layout[stack][orientation='horizontal'][containment='viewport'][transition='add'] {
|
|
139
|
-
view-transition-name: vaadin-master-detail-layout-stack-horizontal-viewport-add;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
::view-transition-new(vaadin-master-detail-layout-stack-horizontal-viewport-add) {
|
|
143
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
144
|
-
vaadin-master-detail-layout-stack-horizontal-add-new;
|
|
145
|
-
}
|
|
146
46
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
view-transition-name: vaadin-master-detail-layout-stack-horizontal-viewport-remove;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
::view-transition-old(vaadin-master-detail-layout-stack-horizontal-viewport-remove) {
|
|
154
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
155
|
-
vaadin-master-detail-layout-stack-horizontal-remove-old;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* Drawer - vertical - add */
|
|
159
|
-
|
|
160
|
-
vaadin-master-detail-layout[drawer][orientation='vertical'][transition='add']::part(detail) {
|
|
161
|
-
view-transition-name: vaadin-master-detail-layout-drawer-vertical-detail-add;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
::view-transition-group(vaadin-master-detail-layout-drawer-vertical-detail-add) {
|
|
165
|
-
clip-path: inset(0);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
::view-transition-new(vaadin-master-detail-layout-drawer-vertical-detail-add) {
|
|
169
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
170
|
-
vaadin-master-detail-layout-drawer-vertical-detail-add;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
@keyframes vaadin-master-detail-layout-drawer-vertical-detail-add {
|
|
174
|
-
from {
|
|
175
|
-
transform: translateY(100%);
|
|
47
|
+
vaadin-master-detail-layout[transition]:not([transition='replace']):not([drawer], [stack])::part(detail),
|
|
48
|
+
vaadin-master-detail-layout[transition]:is([drawer], [stack])::part(_detail-internal) {
|
|
49
|
+
view-transition-name: vaadin-mdl-detail;
|
|
176
50
|
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/* Drawer - vertical - remove */
|
|
180
51
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
::view-transition-group(vaadin-master-detail-layout-drawer-vertical-detail-remove) {
|
|
186
|
-
clip-path: inset(0);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
::view-transition-old(vaadin-master-detail-layout-drawer-vertical-detail-remove) {
|
|
190
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
191
|
-
vaadin-master-detail-layout-drawer-vertical-detail-remove;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
@keyframes vaadin-master-detail-layout-drawer-vertical-detail-remove {
|
|
195
|
-
to {
|
|
196
|
-
transform: translateY(100%);
|
|
52
|
+
::view-transition-group(vaadin-mdl-detail) {
|
|
53
|
+
clip-path: inset(0);
|
|
197
54
|
}
|
|
198
|
-
}
|
|
199
55
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
::view-transition-group(vaadin-master-detail-layout-stack-vertical-add) {
|
|
207
|
-
clip-path: inset(0);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
::view-transition-new(vaadin-master-detail-layout-stack-vertical-add) {
|
|
211
|
-
animation: var(--vaadin-master-detail-layout-transition-duration, 300ms) ease both
|
|
212
|
-
vaadin-master-detail-layout-stack-vertical-add-new;
|
|
213
|
-
}
|
|
56
|
+
::view-transition-new(vaadin-mdl-detail),
|
|
57
|
+
::view-transition-old(vaadin-mdl-detail) {
|
|
58
|
+
animation-name: vaadin-mdl-detail-slide-in;
|
|
59
|
+
}
|
|
214
60
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
61
|
+
::view-transition-old(vaadin-mdl-detail) {
|
|
62
|
+
animation-direction: reverse;
|
|
63
|
+
}
|
|
219
64
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
65
|
+
@keyframes vaadin-mdl-detail-slide-in {
|
|
66
|
+
0% {
|
|
67
|
+
translate: calc((100% + 30px) * var(--_vaadin-mdl-dir-multiplier));
|
|
68
|
+
}
|
|
224
69
|
}
|
|
225
|
-
}
|
|
226
70
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
transform: translateY(-100px);
|
|
71
|
+
vaadin-master-detail-layout[orientation='horizontal'][stack][has-detail]::part(master) {
|
|
72
|
+
translate: calc(var(--_vaadin-mdl-stack-master-offset) * var(--_vaadin-mdl-dir-multiplier) * -1);
|
|
230
73
|
opacity: 0;
|
|
231
74
|
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/* Stack - vertical - remove */
|
|
235
75
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
76
|
+
vaadin-master-detail-layout[transition]::part(master) {
|
|
77
|
+
view-transition-name: vaadin-mdl-master;
|
|
78
|
+
}
|
|
239
79
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
80
|
+
vaadin-master-detail-layout[orientation='horizontal'][stack][transition='add']::part(master) {
|
|
81
|
+
view-transition-class: stack-add;
|
|
82
|
+
}
|
|
243
83
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}
|
|
84
|
+
vaadin-master-detail-layout[orientation='horizontal'][stack][transition='remove']::part(master) {
|
|
85
|
+
view-transition-class: stack-remove;
|
|
86
|
+
}
|
|
248
87
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
88
|
+
::view-transition-new(vaadin-mdl-master),
|
|
89
|
+
::view-transition-old(vaadin-mdl-master) {
|
|
90
|
+
object-fit: none;
|
|
91
|
+
object-position: max(0%, var(--_vaadin-mdl-dir-multiplier) * -100%) 0;
|
|
92
|
+
}
|
|
253
93
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
94
|
+
::view-transition-new(vaadin-mdl-master.stack-remove),
|
|
95
|
+
::view-transition-old(vaadin-mdl-master.stack-remove) {
|
|
96
|
+
animation-name: vaadin-mdl-master-stack-remove;
|
|
97
|
+
clip-path: var(--_vaadin-mdl-stack-master-clip-path);
|
|
258
98
|
}
|
|
259
|
-
}
|
|
260
99
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
100
|
+
@keyframes vaadin-mdl-master-stack-remove {
|
|
101
|
+
100% {
|
|
102
|
+
clip-path: inset(0);
|
|
103
|
+
}
|
|
265
104
|
}
|
|
266
|
-
}
|
|
267
105
|
|
|
268
|
-
|
|
106
|
+
::view-transition-new(vaadin-mdl-master.stack-add),
|
|
107
|
+
::view-transition-old(vaadin-mdl-master.stack-add) {
|
|
108
|
+
animation-name: vaadin-mdl-master-stack-add;
|
|
109
|
+
clip-path: inset(0);
|
|
110
|
+
}
|
|
269
111
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
112
|
+
@keyframes vaadin-mdl-master-stack-add {
|
|
113
|
+
100% {
|
|
114
|
+
clip-path: var(--_vaadin-mdl-stack-master-clip-path);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
273
117
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
118
|
+
/* prettier-ignore */
|
|
119
|
+
vaadin-master-detail-layout[orientation='vertical']:not([drawer], [stack])[transition]:not([transition='replace'])::part(detail),
|
|
120
|
+
vaadin-master-detail-layout[orientation='vertical']:is([drawer], [stack])[transition]::part(_detail-internal) {
|
|
121
|
+
view-transition-name: vaadin-mdl-detail;
|
|
122
|
+
view-transition-class: vertical;
|
|
123
|
+
}
|
|
278
124
|
|
|
279
|
-
|
|
125
|
+
::view-transition-new(vaadin-mdl-detail.vertical),
|
|
126
|
+
::view-transition-old(vaadin-mdl-detail.vertical) {
|
|
127
|
+
animation-name: vaadin-mdl-vertical-detail-slide-in;
|
|
128
|
+
}
|
|
280
129
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
130
|
+
::view-transition-old(vaadin-mdl-detail.vertical) {
|
|
131
|
+
animation-direction: reverse;
|
|
132
|
+
}
|
|
284
133
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
134
|
+
@keyframes vaadin-mdl-vertical-detail-slide-in {
|
|
135
|
+
0% {
|
|
136
|
+
transform: translateY(calc(100% + 30px));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
288
139
|
}
|
|
289
140
|
`;
|
|
@@ -23,13 +23,6 @@ export interface MasterDetailLayoutEventMap extends HTMLElementEventMap, MasterD
|
|
|
23
23
|
*
|
|
24
24
|
* ### Styling
|
|
25
25
|
*
|
|
26
|
-
* The following custom CSS property are available for styling (needed to be set
|
|
27
|
-
* on the `<html>` element since they are used by the global view transitions):
|
|
28
|
-
*
|
|
29
|
-
* Custom CSS property | Description | Default
|
|
30
|
-
* -----------------------------------------------------|---------------------|--------
|
|
31
|
-
* `--vaadin-master-detail-layout-transition-duration` | Transition duration | 300ms
|
|
32
|
-
*
|
|
33
26
|
* The following shadow DOM parts are available for styling:
|
|
34
27
|
*
|
|
35
28
|
* Part name | Description
|
|
@@ -22,13 +22,6 @@ import { masterDetailLayoutTransitionStyles } from './styles/vaadin-master-detai
|
|
|
22
22
|
*
|
|
23
23
|
* ### Styling
|
|
24
24
|
*
|
|
25
|
-
* The following custom CSS properties are available for styling (needed to be set
|
|
26
|
-
* on the `<html>` element since they are used by the global view transitions):
|
|
27
|
-
*
|
|
28
|
-
* Custom CSS property | Description | Default
|
|
29
|
-
* -----------------------------------------------------|---------------------|--------
|
|
30
|
-
* `--vaadin-master-detail-layout-transition-duration` | Transition duration | 300ms
|
|
31
|
-
*
|
|
32
25
|
* The following shadow DOM parts are available for styling:
|
|
33
26
|
*
|
|
34
27
|
* Part name | Description
|
|
@@ -60,7 +53,7 @@ import { masterDetailLayoutTransitionStyles } from './styles/vaadin-master-detai
|
|
|
60
53
|
* @mixes SlotStylesMixin
|
|
61
54
|
*/
|
|
62
55
|
class MasterDetailLayout extends SlotStylesMixin(
|
|
63
|
-
ResizeMixin(ElementMixin(ThemableMixin(LumoInjectionMixin(
|
|
56
|
+
ResizeMixin(ElementMixin(ThemableMixin(PolylitMixin(LumoInjectionMixin(LitElement))))),
|
|
64
57
|
) {
|
|
65
58
|
static get is() {
|
|
66
59
|
return 'vaadin-master-detail-layout';
|
|
@@ -257,18 +250,24 @@ class MasterDetailLayout extends SlotStylesMixin(
|
|
|
257
250
|
/** @protected */
|
|
258
251
|
render() {
|
|
259
252
|
return html`
|
|
260
|
-
<div part="backdrop"
|
|
261
|
-
<div id="master" part="master" ?inert="${this._hasDetail && this._drawer && this.containment === 'layout'}">
|
|
262
|
-
<slot></slot>
|
|
263
|
-
</div>
|
|
253
|
+
<div part="backdrop"></div>
|
|
264
254
|
<div
|
|
265
|
-
id="
|
|
266
|
-
part="
|
|
267
|
-
|
|
268
|
-
aria-modal="${this._drawer && this.containment === 'viewport' ? 'true' : nothing}"
|
|
269
|
-
@keydown="${this.__onDetailKeydown}"
|
|
255
|
+
id="master"
|
|
256
|
+
part="master"
|
|
257
|
+
?inert="${this._hasDetail && (this._stack || (this._drawer && this.containment === 'layout'))}"
|
|
270
258
|
>
|
|
271
|
-
<slot
|
|
259
|
+
<slot></slot>
|
|
260
|
+
</div>
|
|
261
|
+
<div part="_detail-internal" @click="${this.__onDetailClick}">
|
|
262
|
+
<div
|
|
263
|
+
id="detail"
|
|
264
|
+
part="detail"
|
|
265
|
+
role="${this._drawer || this._stack ? 'dialog' : nothing}"
|
|
266
|
+
aria-modal="${this._drawer && this.containment === 'viewport' ? 'true' : nothing}"
|
|
267
|
+
@keydown="${this.__onDetailKeydown}"
|
|
268
|
+
>
|
|
269
|
+
<slot name="detail" @slotchange="${this.__onDetailSlotChange}"></slot>
|
|
270
|
+
</div>
|
|
272
271
|
</div>
|
|
273
272
|
`;
|
|
274
273
|
}
|
|
@@ -291,8 +290,12 @@ class MasterDetailLayout extends SlotStylesMixin(
|
|
|
291
290
|
}
|
|
292
291
|
|
|
293
292
|
/** @private */
|
|
294
|
-
|
|
295
|
-
|
|
293
|
+
__onDetailClick(e) {
|
|
294
|
+
// The detail wrapper element fully covers the backdrop part, so listen
|
|
295
|
+
// to click event on it and detect if it was outside the detail content
|
|
296
|
+
if (!e.composedPath().includes(this.$.detail)) {
|
|
297
|
+
this.dispatchEvent(new CustomEvent('backdrop-click'));
|
|
298
|
+
}
|
|
296
299
|
}
|
|
297
300
|
|
|
298
301
|
/** @private */
|
|
@@ -7,21 +7,16 @@ registerStyles(
|
|
|
7
7
|
css`
|
|
8
8
|
:host(:is([drawer], [stack])) [part='detail'] {
|
|
9
9
|
background-color: var(--lumo-base-color);
|
|
10
|
+
box-shadow:
|
|
11
|
+
0 0 0 1px var(--lumo-shade-5pct),
|
|
12
|
+
var(--lumo-box-shadow-m);
|
|
10
13
|
}
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
[part='detail'] {
|
|
16
|
+
border-color: var(--lumo-contrast-10pct);
|
|
14
17
|
}
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
border-inline-start: 1px solid var(--lumo-contrast-10pct);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
:host([drawer][orientation='vertical']) [part='detail'] {
|
|
21
|
-
border-block-start: 1px solid var(--lumo-contrast-10pct);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
:host([drawer]) [part='backdrop'] {
|
|
19
|
+
[part='backdrop'] {
|
|
25
20
|
background-color: var(--lumo-shade-20pct);
|
|
26
21
|
}
|
|
27
22
|
`,
|
package/web-types.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/master-detail-layout",
|
|
4
|
-
"version": "25.0.0-
|
|
4
|
+
"version": "25.0.0-alpha8",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
8
8
|
"elements": [
|
|
9
9
|
{
|
|
10
10
|
"name": "vaadin-master-detail-layout",
|
|
11
|
-
"description": "`<vaadin-master-detail-layout>` is a web component for building UIs with a master\n(or primary) area and a detail (or secondary) area that is displayed next to, or\noverlaid on top of, the master area, depending on configuration and viewport size.\n\n### Styling\n\nThe following
|
|
11
|
+
"description": "`<vaadin-master-detail-layout>` is a web component for building UIs with a master\n(or primary) area and a detail (or secondary) area that is displayed next to, or\noverlaid on top of, the master area, depending on configuration and viewport size.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n---------------|----------------------\n`backdrop` | Backdrop covering the master area in the drawer mode\n`master` | The master area\n`detail` | The detail area\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n---------------| -----------\n`containment` | Set to `layout` or `viewport` depending on the containment.\n`orientation` | Set to `horizontal` or `vertical` depending on the orientation.\n`has-detail` | Set when the detail content is provided.\n`drawer` | Set when the layout is using the drawer mode.\n`stack` | Set when the layout is using the stack mode.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
12
12
|
"attributes": [
|
|
13
13
|
{
|
|
14
14
|
"name": "detail-size",
|
package/web-types.lit.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/web-types",
|
|
3
3
|
"name": "@vaadin/master-detail-layout",
|
|
4
|
-
"version": "25.0.0-
|
|
4
|
+
"version": "25.0.0-alpha8",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"framework": "lit",
|
|
7
7
|
"framework-config": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"elements": [
|
|
17
17
|
{
|
|
18
18
|
"name": "vaadin-master-detail-layout",
|
|
19
|
-
"description": "`<vaadin-master-detail-layout>` is a web component for building UIs with a master\n(or primary) area and a detail (or secondary) area that is displayed next to, or\noverlaid on top of, the master area, depending on configuration and viewport size.\n\n### Styling\n\nThe following
|
|
19
|
+
"description": "`<vaadin-master-detail-layout>` is a web component for building UIs with a master\n(or primary) area and a detail (or secondary) area that is displayed next to, or\noverlaid on top of, the master area, depending on configuration and viewport size.\n\n### Styling\n\nThe following shadow DOM parts are available for styling:\n\nPart name | Description\n---------------|----------------------\n`backdrop` | Backdrop covering the master area in the drawer mode\n`master` | The master area\n`detail` | The detail area\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n---------------| -----------\n`containment` | Set to `layout` or `viewport` depending on the containment.\n`orientation` | Set to `horizontal` or `vertical` depending on the orientation.\n`has-detail` | Set when the detail content is provided.\n`drawer` | Set when the layout is using the drawer mode.\n`stack` | Set when the layout is using the stack mode.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
|
|
20
20
|
"extension": true,
|
|
21
21
|
"attributes": [
|
|
22
22
|
{
|