@expressivecss/expressive 0.1.0 → 0.3.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.
Files changed (40) hide show
  1. package/README.md +8 -8
  2. package/dist/css/expressive.css +1088 -356
  3. package/dist/css/expressive.css.map +1 -1
  4. package/dist/css/expressive.min.css +1 -1
  5. package/dist/css/expressive.min.css.map +1 -1
  6. package/dist/js/expressive.cjs +778 -746
  7. package/dist/js/expressive.cjs.map +4 -4
  8. package/dist/js/expressive.js +778 -746
  9. package/dist/js/expressive.js.map +4 -4
  10. package/dist/js/expressive.min.js +10 -10
  11. package/dist/js/expressive.min.js.map +4 -4
  12. package/dist/js/expressive.mjs +778 -746
  13. package/dist/js/expressive.mjs.map +4 -4
  14. package/dist/types/behaviors/dialogs.d.ts +25 -0
  15. package/dist/types/components/buttons.d.ts +17 -41
  16. package/dist/types/components/carousel.d.ts +40 -46
  17. package/dist/types/components/chips.d.ts +2 -2
  18. package/dist/types/components/collapsible.d.ts +35 -13
  19. package/dist/types/components/parallax.d.ts +7 -31
  20. package/dist/types/components/tapTarget.d.ts +23 -24
  21. package/dist/types/index.d.ts +2 -1
  22. package/package.json +1 -1
  23. package/src/sass/README.md +4 -3
  24. package/src/sass/components/_badges.scss +5 -4
  25. package/src/sass/components/_breadcrumb.scss +93 -16
  26. package/src/sass/components/_buttons.scss +195 -96
  27. package/src/sass/components/_carousel.scss +130 -63
  28. package/src/sass/components/_chips.scss +1 -1
  29. package/src/sass/components/_collapsible.scss +160 -60
  30. package/src/sass/components/_collection.scss +161 -77
  31. package/src/sass/components/_icons-material-design.scss +77 -4
  32. package/src/sass/components/_lightbox.scss +4 -0
  33. package/src/sass/components/_modal.scss +67 -3
  34. package/src/sass/components/_navbar.scss +15 -0
  35. package/src/sass/components/_pagination.scss +131 -25
  36. package/src/sass/components/_parallax.scss +116 -20
  37. package/src/sass/components/_sidenav.scss +10 -5
  38. package/src/sass/components/_slider.scss +8 -0
  39. package/src/sass/components/_tapTarget.scss +134 -47
  40. package/src/sass/utilities/_helpers.scss +10 -0
@@ -1,104 +1,191 @@
1
1
  @use "../abstracts" as *;
2
2
 
3
+ // Tap target (Feature Discovery). A circular spotlight centered on an
4
+ // origin. JS writes --md-comp-tap-target-x/y/origin-size and data-edge;
5
+ // this file does the rest.
6
+ //
7
+ // Tokens:
8
+ // --md-comp-tap-target-size 480px
9
+ // --md-comp-tap-target-z 1000
10
+ // --md-comp-tap-target-container-color
11
+ // --md-comp-tap-target-supporting-color
12
+ // --md-comp-tap-target-duration 300ms
13
+ // --md-comp-tap-target-easing soft ease-in-out
14
+ //
15
+ // .feature-discovery is an alias of .tap-target.
16
+
3
17
  .tap-target-wrapper {
4
- width: 800px;
5
- height: 800px;
18
+ --md-comp-tap-target-size: 480px;
19
+ --md-comp-tap-target-z: 1000;
20
+ --md-comp-tap-target-container-color: var(--md-sys-color-primary-container);
21
+ --md-comp-tap-target-supporting-color: var(--md-sys-color-on-primary-container);
22
+ --md-comp-tap-target-duration: 300ms;
23
+ --md-comp-tap-target-easing: cubic-bezier(0.65, 0, 0.35, 1);
24
+ --md-comp-tap-target-x: 50%;
25
+ --md-comp-tap-target-y: 50%;
26
+ --md-comp-tap-target-origin-size: 56px;
27
+
28
+ box-sizing: border-box;
6
29
  position: fixed;
7
- z-index: 1000;
30
+ inset: auto;
31
+ left: var(--md-comp-tap-target-x);
32
+ top: var(--md-comp-tap-target-y);
33
+ translate: -50% -50%;
34
+ width: var(--md-comp-tap-target-size);
35
+ height: var(--md-comp-tap-target-size);
36
+ margin: 0;
37
+ padding: 0;
38
+ overflow: visible;
39
+ border: 0;
40
+ background: transparent;
41
+ color: var(--md-comp-tap-target-supporting-color);
8
42
  visibility: hidden;
9
- transition: visibility 0s .3s;
43
+ pointer-events: none;
44
+ z-index: var(--md-comp-tap-target-z);
45
+ transition:
46
+ visibility 0s var(--md-comp-tap-target-duration),
47
+ overlay var(--md-comp-tap-target-duration) allow-discrete,
48
+ display var(--md-comp-tap-target-duration) allow-discrete;
10
49
  }
11
50
 
12
- .tap-target-wrapper.open {
51
+ .tap-target-wrapper:is(.open, :popover-open) {
13
52
  visibility: visible;
14
- transition: visibility 0s;
53
+ pointer-events: none;
54
+ transition-delay: 0s;
15
55
 
16
- .tap-target {
56
+ .tap-target,
57
+ .feature-discovery {
17
58
  transform: scale(1);
18
- opacity: .95;
19
- transition:
20
- transform .3s cubic-bezier(.42,0,.58,1),
21
- opacity .3s cubic-bezier(.42,0,.58,1);
59
+ opacity: 1;
22
60
  }
23
61
 
24
62
  .tap-target-wave::before {
25
63
  transform: scale(1);
26
64
  }
65
+
27
66
  .tap-target-wave::after {
28
67
  visibility: visible;
29
68
  animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;
30
- transition:
31
- opacity .3s,
32
- transform .3s,
33
- visibility 0s 1s;
34
69
  }
35
70
  }
36
71
 
37
- .tap-target {
72
+ .tap-target,
73
+ .feature-discovery {
38
74
  position: absolute;
39
- font-size: 1rem;
40
- border-radius: 50%;
41
- background-color: var(--md-sys-color-primary-container);
42
- color: var(--md-sys-color-primary);
43
- box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2);
75
+ inset: 0;
76
+ display: grid;
77
+ box-sizing: border-box;
44
78
  width: 100%;
45
79
  height: 100%;
80
+ overflow: hidden;
81
+ border-radius: 50%;
82
+ background-color: var(--md-comp-tap-target-container-color);
83
+ color: var(--md-comp-tap-target-supporting-color);
46
84
  opacity: 0;
47
85
  transform: scale(0);
48
- transition: transform .3s cubic-bezier(.42, 0, .58, 1),
49
- opacity .3s cubic-bezier(.42, 0, .58, 1);
86
+ transition:
87
+ transform var(--md-comp-tap-target-duration) var(--md-comp-tap-target-easing),
88
+ opacity var(--md-comp-tap-target-duration) var(--md-comp-tap-target-easing);
89
+ @include z-depth("3");
90
+ @include typescale("body-medium");
50
91
  }
51
92
 
52
93
  .tap-target-content {
53
94
  position: relative;
54
- display: table-cell;
95
+ z-index: 1;
96
+ display: grid;
97
+ align-content: start;
98
+ gap: 8px;
99
+ box-sizing: border-box;
100
+ max-width: min(18rem, 52%);
101
+ padding: calc(var(--md-comp-tap-target-origin-size) * 0.5 + 20px);
102
+ pointer-events: auto;
103
+
104
+ > :is(h1, h2, h3, h4, h5, h6) {
105
+ margin: 0;
106
+ color: inherit;
107
+ @include typescale("title-medium");
108
+ }
109
+
110
+ > p {
111
+ margin: 0;
112
+ color: inherit;
113
+ }
114
+ }
115
+
116
+ .tap-target-wrapper[data-edge^="top"] .tap-target-content {
117
+ align-self: end;
118
+ }
119
+
120
+ .tap-target-wrapper[data-edge^="bottom"] .tap-target-content {
121
+ align-self: start;
122
+ }
123
+
124
+ .tap-target-wrapper[data-edge$="left"] .tap-target-content {
125
+ justify-self: end;
126
+ }
127
+
128
+ .tap-target-wrapper[data-edge$="right"] .tap-target-content {
129
+ justify-self: start;
130
+ }
131
+
132
+ .tap-target-wrapper[data-edge$="center"] .tap-target-content {
133
+ justify-self: center;
134
+ max-width: min(22rem, 80%);
135
+ text-align: center;
55
136
  }
56
137
 
57
138
  .tap-target-wave {
58
139
  position: absolute;
140
+ top: 50%;
141
+ left: 50%;
142
+ z-index: 0;
143
+ width: calc(var(--md-comp-tap-target-origin-size) * 2);
144
+ height: calc(var(--md-comp-tap-target-origin-size) * 2);
145
+ translate: -50% -50%;
59
146
  border-radius: 50%;
60
- z-index: 10001;
147
+ pointer-events: none;
61
148
 
62
149
  &::before,
63
150
  &::after {
64
- content: '';
65
- display: block;
151
+ content: "";
66
152
  position: absolute;
67
- width: 100%;
68
- height: 100%;
153
+ inset: 0;
154
+ display: block;
69
155
  border-radius: 50%;
70
- background-color: var(--md-sys-color-surface)
156
+ background-color: var(--md-sys-color-surface);
71
157
  }
158
+
72
159
  &::before {
73
160
  transform: scale(0);
74
- transition: transform .3s;
161
+ transition: transform var(--md-comp-tap-target-duration)
162
+ var(--md-comp-tap-target-easing);
75
163
  }
164
+
76
165
  &::after {
77
166
  visibility: hidden;
78
- transition:
79
- opacity .3s,
80
- transform .3s,
81
- visibility 0s;
82
167
  z-index: -1;
83
168
  }
84
169
  }
85
170
 
171
+ // Raised only on the non-popover path so a static origin stays above the
172
+ // circle. Never set position here — a FAB may already be fixed.
86
173
  .tap-target-origin {
87
- top: 50%;
88
- left: 50%;
89
- z-index: 10002;
90
- position: absolute !important;
91
- transform: translate(-50%,-50%);
174
+ z-index: calc(var(--md-comp-tap-target-z, 1000) + 2);
175
+ }
92
176
 
93
- &:not(.btn),
94
- &:not(.btn):hover {
95
- background: none;
177
+ @include bp-down("small") {
178
+ .tap-target-wrapper {
179
+ --md-comp-tap-target-size: 360px;
96
180
  }
97
181
  }
98
182
 
99
- @include bp-down("small") {
100
- .tap-target, .tap-target-wrapper {
101
- width: 600px;
102
- height: 600px;
183
+ @media (prefers-reduced-motion: reduce) {
184
+ .tap-target-wrapper {
185
+ --md-comp-tap-target-duration: 0s;
186
+ }
187
+
188
+ .tap-target-wrapper:is(.open, :popover-open) .tap-target-wave::after {
189
+ animation: none;
103
190
  }
104
191
  }
@@ -39,15 +39,25 @@ video.responsive-video {
39
39
  height: auto;
40
40
  }
41
41
 
42
+ // 12px matches the card container shape. .circle is more specific on
43
+ // `img.responsive-img.circle` only if we exclude it here — otherwise this
44
+ // element+class pair would beat `.circle` and square the disc off.
45
+ img.responsive-img:not(.circle),
46
+ video.responsive-video {
47
+ border-radius: 12px;
48
+ }
49
+
42
50
  .video-container {
43
51
  position: relative;
44
52
  aspect-ratio: 16 / 9; // was padding-bottom: 56.25% + height: 0
45
53
  overflow: hidden;
54
+ border-radius: 12px;
46
55
 
47
56
  iframe, object, embed {
48
57
  position: absolute;
49
58
  inset: 0;
50
59
  width: 100%;
51
60
  height: 100%;
61
+ border: 0;
52
62
  }
53
63
  }