@expressivecss/expressive 0.7.0 → 0.9.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.
- package/CHANGELOG.md +1313 -1
- package/README.md +76 -30
- package/dist/css/expressive.css +4896 -1777
- package/dist/css/expressive.css.map +1 -1
- package/dist/css/expressive.min.css +1 -1
- package/dist/css/expressive.min.css.map +1 -1
- package/dist/fonts/LICENSE-material-symbols +93 -0
- package/dist/fonts/LICENSE-noto-sans +93 -0
- package/dist/fonts/LICENSE-roboto +93 -0
- package/dist/fonts/material-symbols-outlined.woff2 +0 -0
- package/dist/fonts/material-symbols-rounded.woff2 +0 -0
- package/dist/fonts/material-symbols-sharp.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-400.woff2 +0 -0
- package/dist/fonts/noto-sans-latin-500.woff2 +0 -0
- package/dist/fonts/roboto-latin-400.woff2 +0 -0
- package/dist/fonts/roboto-latin-500.woff2 +0 -0
- package/dist/js/expressive.cjs +1673 -1338
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +1673 -1338
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +13 -13
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +1673 -1338
- package/dist/js/expressive.mjs.map +4 -4
- package/dist/types/behaviors/bottomSheets.d.ts +19 -11
- package/dist/types/behaviors/sheetDrag.d.ts +40 -0
- package/dist/types/behaviors/sideSheets.d.ts +2 -9
- package/dist/types/components/appBar.d.ts +26 -0
- package/dist/types/components/autocomplete.d.ts +15 -3
- package/dist/types/components/buttonGroup.d.ts +39 -0
- package/dist/types/components/buttons.d.ts +5 -1
- package/dist/types/components/cards.d.ts +11 -13
- package/dist/types/components/carousel.d.ts +87 -53
- package/dist/types/components/chips.d.ts +21 -1
- package/dist/types/components/expandingCard.d.ts +31 -0
- package/dist/types/components/index.d.ts +23 -20
- package/dist/types/components/lightbox.d.ts +1 -0
- package/dist/types/components/menu.d.ts +11 -1
- package/dist/types/components/{sidenav.d.ts → navigationDrawer.d.ts} +16 -16
- package/dist/types/components/registry.d.ts +18 -8
- package/dist/types/components/slider.d.ts +26 -85
- package/dist/types/components/snackbar.d.ts +20 -5
- package/dist/types/components/tabs.d.ts +12 -0
- package/dist/types/components/timepicker.d.ts +12 -10
- package/dist/types/components/tooltip.d.ts +1 -0
- package/dist/types/core/utils.d.ts +64 -53
- package/dist/types/index.d.ts +8 -9
- package/package.json +39 -3
- package/src/sass/README.md +61 -11
- package/src/sass/abstracts/_breakpoints.scss +17 -19
- package/src/sass/abstracts/_mixins.scss +155 -21
- package/src/sass/abstracts/_variables.scss +69 -5
- package/src/sass/base/_fonts.scss +63 -0
- package/src/sass/base/_global.scss +6 -24
- package/src/sass/base/_grid.scss +15 -12
- package/src/sass/base/_normalize.scss +34 -38
- package/src/sass/base/_typography.scss +4 -18
- package/src/sass/components/_badges.scss +3 -5
- package/src/sass/components/_banners.scss +298 -0
- package/src/sass/components/_bottom-app-bar.scss +180 -0
- package/src/sass/components/_bottom-sheet.scss +12 -4
- package/src/sass/components/_button-groups.scss +358 -0
- package/src/sass/components/_buttons.scss +245 -92
- package/src/sass/components/_cards.scss +514 -78
- package/src/sass/components/_carousel.scss +562 -68
- package/src/sass/components/_chips.scss +64 -5
- package/src/sass/components/_datepicker.scss +24 -24
- package/src/sass/components/_dialog.scss +17 -11
- package/src/sass/components/_drag-handle.scss +130 -0
- package/src/sass/components/_expanding-card.scss +226 -0
- package/src/sass/components/_fab-menu.scss +232 -0
- package/src/sass/components/_floating-sheet.scss +86 -0
- package/src/sass/components/_icon-buttons.scss +172 -0
- package/src/sass/components/_icons-material-design.scss +22 -10
- package/src/sass/components/_index.scss +22 -6
- package/src/sass/components/_list.scss +16 -13
- package/src/sass/components/_loading-indicator.scss +106 -0
- package/src/sass/components/_menu.scss +335 -61
- package/src/sass/components/_navbar.scss +245 -45
- package/src/sass/components/_navigation-bar.scss +22 -11
- package/src/sass/components/{_sidenav.scss → _navigation-drawer.scss} +123 -33
- package/src/sass/components/_navigation-rail.scss +31 -23
- package/src/sass/components/_page-footer.scss +19 -16
- package/src/sass/components/_pagination.scss +24 -6
- package/src/sass/components/_panes.scss +52 -11
- package/src/sass/components/{_preloader.scss → _progress.scss} +11 -3
- package/src/sass/components/_scrim.scss +37 -0
- package/src/sass/components/_search.scss +259 -0
- package/src/sass/components/_segmented-buttons.scss +188 -0
- package/src/sass/components/_side-sheet.scss +2 -2
- package/src/sass/components/_snackbar.scss +20 -15
- package/src/sass/components/_split-button.scss +196 -0
- package/src/sass/components/_tabs.scss +7 -8
- package/src/sass/components/_timepicker.scss +67 -58
- package/src/sass/components/_toolbar.scss +206 -80
- package/src/sass/components/_transitions.scss +8 -1
- package/src/sass/components/forms/_checkboxes.scss +49 -12
- package/src/sass/components/forms/_fieldset.scss +4 -4
- package/src/sass/components/forms/_file-input.scss +8 -1
- package/src/sass/components/forms/_index.scss +1 -1
- package/src/sass/components/forms/_input-fields.scss +50 -44
- package/src/sass/components/forms/_radio-buttons.scss +42 -10
- package/src/sass/components/forms/_select.scss +38 -1
- package/src/sass/components/forms/{_range.scss → _slider.scss} +8 -9
- package/src/sass/components/forms/_switches.scss +6 -7
- package/src/sass/expressive.scss +5 -0
- package/src/sass/tokens/_index.scss +4 -1
- package/src/sass/tokens/_reference.scss +70 -61
- package/src/sass/tokens/_state.scss +24 -0
- package/src/sass/tokens/_theme.scss +6 -3
- package/src/sass/tokens/_vibrant.scss +76 -0
- package/src/sass/utilities/_colors.scss +14 -1
- package/src/sass/utilities/_helpers.scss +5 -5
- package/src/sass/utilities/_visibility.scss +48 -26
- package/dist/types/behaviors/waves.d.ts +0 -15
- package/dist/types/components/parallax.d.ts +0 -16
- package/dist/types/components/range.d.ts +0 -43
- package/dist/types/core/bounding.d.ts +0 -6
- package/dist/types/core/edges.d.ts +0 -6
- package/src/sass/components/_parallax.scss +0 -104
- package/src/sass/components/_pulse.scss +0 -37
- package/src/sass/components/_slider.scss +0 -129
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@use "../abstracts" as *;
|
|
2
2
|
|
|
3
|
-
.timepicker-container {
|
|
3
|
+
:is(.timepicker-container, .time-picker-container) {
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
max-width: 325px;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/* Clock Digital Display */
|
|
16
|
-
.timepicker-digital-display {
|
|
16
|
+
:is(.timepicker-digital-display, .time-picker-digital-display) {
|
|
17
17
|
width: auto;
|
|
18
18
|
flex: 1 auto;
|
|
19
19
|
// background-color: var(--md-sys-color-surface);
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
font-weight: 300;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
.timepicker-text-container {
|
|
24
|
+
:is(.timepicker-text-container, .time-picker-text-container) {
|
|
25
25
|
display: flex;
|
|
26
26
|
font-size: 4rem;
|
|
27
27
|
text-align: left;
|
|
@@ -40,29 +40,29 @@
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
.timepicker-display-column {
|
|
43
|
+
:is(.timepicker-display-column, .time-picker-display-column) {
|
|
44
44
|
display: inline-flex;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
.timepicker-display-digital-clock {
|
|
47
|
+
:is(.timepicker-display-digital-clock, .time-picker-display-digital-clock) {
|
|
48
48
|
flex-grow: 1;
|
|
49
49
|
display: inline-flex;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
.timepicker-input-hours-wrapper,
|
|
53
|
-
.timepicker-input-minutes-wrapper {
|
|
52
|
+
:is(.timepicker-input-hours-wrapper, .time-picker-input-hours-wrapper),
|
|
53
|
+
:is(.timepicker-input-minutes-wrapper, .time-picker-input-minutes-wrapper) {
|
|
54
54
|
width: 6.9rem;
|
|
55
55
|
height: 5.75rem;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
.timepicker-input-hours,
|
|
59
|
-
.timepicker-input-minutes,
|
|
60
|
-
.timepicker-span-am-pm div {
|
|
58
|
+
:is(.timepicker-input-hours, .time-picker-input-hours),
|
|
59
|
+
:is(.timepicker-input-minutes, .time-picker-input-minutes),
|
|
60
|
+
:is(.timepicker-span-am-pm, .time-picker-span-am-pm) div {
|
|
61
61
|
cursor: pointer;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
input[type=text].timepicker-input-hours,
|
|
65
|
-
input[type=text].timepicker-input-minutes {
|
|
64
|
+
input[type=text]:is(.timepicker-input-hours, .time-picker-input-hours),
|
|
65
|
+
input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
|
|
66
66
|
height: 100%;
|
|
67
67
|
padding: 1.33rem .8rem;
|
|
68
68
|
border: 0;
|
|
@@ -75,7 +75,7 @@ input[type=text].timepicker-input-minutes {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
.timepicker-input-divider-wrapper {
|
|
78
|
+
:is(.timepicker-input-divider-wrapper, .time-picker-input-divider-wrapper) {
|
|
79
79
|
width: 1.6rem;
|
|
80
80
|
text-align: center;
|
|
81
81
|
}
|
|
@@ -84,7 +84,7 @@ input[type=text].timepicker-input-minutes {
|
|
|
84
84
|
color: var(--md-sys-color-on-background);
|
|
85
85
|
}*/
|
|
86
86
|
|
|
87
|
-
.timepicker-display-am-pm {
|
|
87
|
+
:is(.timepicker-display-am-pm, .time-picker-display-am-pm) {
|
|
88
88
|
font-size: 1.3rem;
|
|
89
89
|
/*position: absolute;
|
|
90
90
|
top: 1rem;
|
|
@@ -92,17 +92,20 @@ input[type=text].timepicker-input-minutes {
|
|
|
92
92
|
font-weight: 400;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
.timepicker-span-am-pm {
|
|
95
|
+
:is(.timepicker-span-am-pm, .time-picker-span-am-pm) {
|
|
96
96
|
height: 5.75rem;
|
|
97
97
|
max-width: 3.5rem;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
.timepicker-container .am-btn,
|
|
101
|
-
.timepicker-container .pm-btn {
|
|
100
|
+
:is(.timepicker-container, .time-picker-container) .am-btn,
|
|
101
|
+
:is(.timepicker-container, .time-picker-container) .pm-btn {
|
|
102
102
|
width: 3.6rem;
|
|
103
103
|
height: 50%;
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
// --btn-padding is a Materialize variable that no longer exists, so this
|
|
105
|
+
// was invalid at computed-value time and the padding resolved to 0 - not
|
|
106
|
+
// to the base button's inline space, which the invalid declaration still
|
|
107
|
+
// beat in the cascade. Written as the 0 it has always rendered as.
|
|
108
|
+
padding-inline: 0;
|
|
106
109
|
line-height: 2rem;
|
|
107
110
|
vertical-align: middle;
|
|
108
111
|
text-align: center;
|
|
@@ -110,25 +113,25 @@ input[type=text].timepicker-input-minutes {
|
|
|
110
113
|
border: 1px solid var(--md-sys-color-outline);
|
|
111
114
|
}
|
|
112
115
|
|
|
113
|
-
.timepicker-container .am-btn {
|
|
116
|
+
:is(.timepicker-container, .time-picker-container) .am-btn {
|
|
114
117
|
border-bottom-right-radius: 0;
|
|
115
118
|
border-bottom-left-radius: 0;
|
|
116
119
|
}
|
|
117
120
|
|
|
118
|
-
.timepicker-container .pm-btn {
|
|
121
|
+
:is(.timepicker-container, .time-picker-container) .pm-btn {
|
|
119
122
|
border-top: 0;
|
|
120
123
|
border-top-left-radius: 0;
|
|
121
124
|
border-top-right-radius: 0;
|
|
122
125
|
}
|
|
123
126
|
|
|
124
127
|
/* Analog Clock Display */
|
|
125
|
-
.timepicker-analog-display {
|
|
128
|
+
:is(.timepicker-analog-display, .time-picker-analog-display) {
|
|
126
129
|
flex: 2.5 auto;
|
|
127
130
|
padding: .67rem;
|
|
128
131
|
// background-color: var(--md-sys-color-surface);
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
.timepicker-plate {
|
|
134
|
+
:is(.timepicker-plate, .time-picker-plate) {
|
|
132
135
|
background-color: var(--md-sys-color-surface-variant);
|
|
133
136
|
border-radius: 50%;
|
|
134
137
|
width: 260px;
|
|
@@ -137,10 +140,14 @@ input[type=text].timepicker-input-minutes {
|
|
|
137
140
|
position: relative;
|
|
138
141
|
margin: 0 1.6rem 1.6rem 1.6rem;
|
|
139
142
|
user-select: none;
|
|
143
|
+
// Dragging the clock hand is a two-dimensional gesture, so no axis is left
|
|
144
|
+
// to the page. See the note on the snackbar: under Pointer Events this is
|
|
145
|
+
// what reserves the gesture, not `preventDefault()`.
|
|
146
|
+
touch-action: none;
|
|
140
147
|
}
|
|
141
148
|
|
|
142
|
-
.timepicker-canvas,
|
|
143
|
-
.timepicker-dial {
|
|
149
|
+
:is(.timepicker-canvas, .time-picker-canvas),
|
|
150
|
+
:is(.timepicker-dial, .time-picker-dial) {
|
|
144
151
|
position: absolute;
|
|
145
152
|
left: 0;
|
|
146
153
|
right: 0;
|
|
@@ -148,11 +155,11 @@ input[type=text].timepicker-input-minutes {
|
|
|
148
155
|
bottom: 0;
|
|
149
156
|
}
|
|
150
157
|
|
|
151
|
-
.timepicker-minutes {
|
|
158
|
+
:is(.timepicker-minutes, .time-picker-minutes) {
|
|
152
159
|
visibility: hidden;
|
|
153
160
|
}
|
|
154
161
|
|
|
155
|
-
.timepicker-tick {
|
|
162
|
+
:is(.timepicker-tick, .time-picker-tick) {
|
|
156
163
|
border-radius: 50%;
|
|
157
164
|
color: var(--md-sys-color-on-background);
|
|
158
165
|
line-height: 40px;
|
|
@@ -164,28 +171,28 @@ input[type=text].timepicker-input-minutes {
|
|
|
164
171
|
font-size: 15px;
|
|
165
172
|
}
|
|
166
173
|
|
|
167
|
-
.timepicker-tick.active,
|
|
168
|
-
.timepicker-tick:hover {
|
|
174
|
+
:is(.timepicker-tick, .time-picker-tick).active,
|
|
175
|
+
:is(.timepicker-tick, .time-picker-tick):hover {
|
|
169
176
|
background-color: color-mix(in oklab, var(--md-sys-color-primary) 6%, transparent);
|
|
170
177
|
}
|
|
171
178
|
|
|
172
|
-
.timepicker-dial {
|
|
179
|
+
:is(.timepicker-dial, .time-picker-dial) {
|
|
173
180
|
transition: transform 350ms, opacity 350ms;
|
|
174
181
|
}
|
|
175
182
|
|
|
176
|
-
.timepicker-dial-out {
|
|
183
|
+
:is(.timepicker-dial-out, .time-picker-dial-out) {
|
|
177
184
|
opacity: 0;
|
|
178
185
|
|
|
179
|
-
|
|
186
|
+
&:is(.timepicker-hours, .time-picker-hours) {
|
|
180
187
|
transform: scale(1.1, 1.1);
|
|
181
188
|
}
|
|
182
189
|
|
|
183
|
-
|
|
190
|
+
&:is(.timepicker-minutes, .time-picker-minutes) {
|
|
184
191
|
transform: scale(.8, .8);
|
|
185
192
|
}
|
|
186
193
|
}
|
|
187
194
|
|
|
188
|
-
.timepicker-canvas {
|
|
195
|
+
:is(.timepicker-canvas, .time-picker-canvas) {
|
|
189
196
|
transition: opacity 175ms;
|
|
190
197
|
|
|
191
198
|
line {
|
|
@@ -195,100 +202,102 @@ input[type=text].timepicker-input-minutes {
|
|
|
195
202
|
}
|
|
196
203
|
}
|
|
197
204
|
|
|
198
|
-
.timepicker-canvas-out {
|
|
205
|
+
:is(.timepicker-canvas-out, .time-picker-canvas-out) {
|
|
199
206
|
opacity: 0.25;
|
|
200
207
|
}
|
|
201
208
|
|
|
202
|
-
.timepicker-canvas-bearing {
|
|
209
|
+
:is(.timepicker-canvas-bearing, .time-picker-canvas-bearing) {
|
|
203
210
|
stroke: none;
|
|
204
211
|
fill: var(--md-sys-color-primary);
|
|
205
212
|
}
|
|
206
213
|
|
|
207
|
-
.timepicker-canvas-bg {
|
|
214
|
+
:is(.timepicker-canvas-bg, .time-picker-canvas-bg) {
|
|
208
215
|
stroke: none;
|
|
209
216
|
fill: var(--md-sys-color-primary);
|
|
210
217
|
}
|
|
211
218
|
|
|
212
219
|
|
|
213
220
|
/* Footer */
|
|
214
|
-
.timepicker-footer {
|
|
221
|
+
:is(.timepicker-footer, .time-picker-footer) {
|
|
215
222
|
margin: 0 auto;
|
|
216
223
|
padding: 5px 1rem;
|
|
217
224
|
display: flex;
|
|
218
225
|
justify-content: space-between;
|
|
219
226
|
}
|
|
220
227
|
|
|
221
|
-
.timepicker-clear {
|
|
228
|
+
:is(.timepicker-clear, .time-picker-clear) {
|
|
222
229
|
color: var(--md-sys-color-error);
|
|
223
230
|
}
|
|
224
231
|
|
|
225
|
-
.timepicker-close {
|
|
232
|
+
:is(.timepicker-close, .time-picker-close) {
|
|
226
233
|
color: var(--md-sys-color-primary);
|
|
227
234
|
}
|
|
228
235
|
|
|
229
|
-
.timepicker-clear,
|
|
230
|
-
.timepicker-close {
|
|
236
|
+
:is(.timepicker-clear, .time-picker-clear),
|
|
237
|
+
:is(.timepicker-close, .time-picker-close) {
|
|
231
238
|
padding: 0 20px;
|
|
232
239
|
}
|
|
233
240
|
|
|
234
241
|
/* Media Queries */
|
|
235
|
-
@include bp-up("
|
|
236
|
-
.timepicker-container {
|
|
242
|
+
@include bp-up("expanded") {
|
|
243
|
+
:is(.timepicker-container, .time-picker-container) {
|
|
237
244
|
width: auto;
|
|
238
245
|
max-width: 620px;
|
|
239
246
|
}
|
|
240
247
|
|
|
241
|
-
.timepicker-container {
|
|
248
|
+
:is(.timepicker-container, .time-picker-container) {
|
|
242
249
|
flex-direction: row;
|
|
243
250
|
}
|
|
244
251
|
|
|
245
|
-
.timepicker-digital-display {
|
|
252
|
+
:is(.timepicker-digital-display, .time-picker-digital-display) {
|
|
246
253
|
padding: .67rem;
|
|
247
254
|
}
|
|
248
255
|
|
|
249
|
-
.timepicker-text-container {
|
|
256
|
+
:is(.timepicker-text-container, .time-picker-text-container) {
|
|
250
257
|
/*top: 31%;*/
|
|
251
258
|
flex-direction: column;
|
|
252
259
|
margin-top: 4.8rem;
|
|
253
260
|
text-align: center;
|
|
254
261
|
}
|
|
255
262
|
|
|
256
|
-
.timepicker-display-column {
|
|
263
|
+
:is(.timepicker-display-column, .time-picker-display-column) {
|
|
257
264
|
padding: 0 3%;
|
|
258
265
|
}
|
|
259
266
|
|
|
260
|
-
.timepicker-display-am-pm {
|
|
267
|
+
:is(.timepicker-display-am-pm, .time-picker-display-am-pm) {
|
|
261
268
|
margin-top: 1.1rem;
|
|
262
269
|
}
|
|
263
270
|
|
|
264
|
-
.timepicker-span-am-pm {
|
|
271
|
+
:is(.timepicker-span-am-pm, .time-picker-span-am-pm) {
|
|
265
272
|
display: flex;
|
|
266
273
|
flex-grow: 1;
|
|
267
274
|
max-width: unset;
|
|
268
275
|
}
|
|
269
276
|
|
|
270
|
-
.timepicker-container .am-btn,
|
|
271
|
-
.timepicker-container .pm-btn {
|
|
277
|
+
:is(.timepicker-container, .time-picker-container) .am-btn,
|
|
278
|
+
:is(.timepicker-container, .time-picker-container) .pm-btn {
|
|
272
279
|
flex-grow: 1;
|
|
273
280
|
/*width: auto;*/
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
281
|
+
// Same two dead Materialize variables as above; both declarations
|
|
282
|
+
// rendered as 0. The corner rules that follow square off the inner
|
|
283
|
+
// edges, so the outer ones are the only radius in play.
|
|
284
|
+
padding-inline: 0;
|
|
285
|
+
border-radius: 0;
|
|
277
286
|
border: 1px solid var(--md-sys-color-outline);
|
|
278
287
|
}
|
|
279
288
|
|
|
280
|
-
.timepicker-container .am-btn {
|
|
289
|
+
:is(.timepicker-container, .time-picker-container) .am-btn {
|
|
281
290
|
border-top-right-radius: 0;
|
|
282
291
|
border-bottom-right-radius: 0;
|
|
283
292
|
}
|
|
284
293
|
|
|
285
|
-
.timepicker-container .pm-btn {
|
|
294
|
+
:is(.timepicker-container, .time-picker-container) .pm-btn {
|
|
286
295
|
border-left: 0;
|
|
287
296
|
border-bottom-left-radius: 0;
|
|
288
297
|
border-top-left-radius: 0;
|
|
289
298
|
}
|
|
290
299
|
|
|
291
|
-
.timepicker-plate {
|
|
300
|
+
:is(.timepicker-plate, .time-picker-plate) {
|
|
292
301
|
margin-top: 1.6rem;
|
|
293
302
|
}
|
|
294
303
|
}
|