beercss 2.1.1 → 2.2.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/README.md +14 -6
- package/dist/cdn/beer.min.css +1 -1
- package/dist/cdn/beer.min.js +1 -1
- package/package.json +1 -1
- package/src/cdn/beer.css +18 -17
- package/src/cdn/beer.ts +398 -0
- package/src/cdn/elements/badges.css +5 -15
- package/src/cdn/elements/buttons.css +18 -87
- package/src/cdn/elements/cards.css +5 -32
- package/src/cdn/elements/chips.css +9 -31
- package/src/cdn/elements/containers.css +20 -22
- package/src/cdn/elements/dropdowns.css +18 -41
- package/src/cdn/elements/expansions.css +0 -15
- package/src/cdn/elements/fields.css +41 -56
- package/src/cdn/elements/grids.css +170 -0
- package/src/cdn/elements/icons.css +18 -18
- package/src/cdn/elements/layouts.css +31 -23
- package/src/cdn/elements/loaders.css +21 -28
- package/src/cdn/elements/media.css +82 -106
- package/src/cdn/elements/modals.css +30 -54
- package/src/cdn/elements/navigations.css +74 -72
- package/src/cdn/elements/overlays.css +0 -1
- package/src/cdn/elements/progress.css +4 -3
- package/src/cdn/elements/selections.css +46 -59
- package/src/cdn/elements/tables.css +2 -19
- package/src/cdn/elements/tabs.css +8 -10
- package/src/cdn/elements/toasts.css +4 -9
- package/src/cdn/elements/tooltips.css +0 -42
- package/src/cdn/helpers/alignments.css +12 -28
- package/src/cdn/helpers/dividers.css +6 -20
- package/src/cdn/helpers/elevates.css +16 -0
- package/src/cdn/helpers/forms.css +33 -62
- package/src/cdn/helpers/margins.css +4 -0
- package/src/cdn/helpers/paddings.css +5 -1
- package/src/cdn/helpers/positions.css +2 -2
- package/src/cdn/helpers/reset.css +4 -3
- package/src/cdn/helpers/responsive.css +3 -18
- package/src/cdn/helpers/scrolls.css +1 -1
- package/src/cdn/helpers/shadows.css +4 -25
- package/src/cdn/helpers/sizes.css +4 -6
- package/src/cdn/helpers/spaces.css +8 -7
- package/src/cdn/helpers/theme.css +7 -0
- package/src/cdn/helpers/typography.css +13 -9
- package/src/cdn/helpers/waves.css +5 -3
- package/src/cdn/settings/dark.css +4 -3
- package/src/cdn/settings/light.css +4 -3
- package/src/cdn/settings/urls.css +1 -1
- package/src/cdn/beer.js +0 -409
- package/src/cdn/elements/rows.css +0 -251
package/src/cdn/beer.ts
ADDED
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
if (window["ui"]) return;
|
|
3
|
+
|
|
4
|
+
interface ILastTheme {
|
|
5
|
+
dark:string,
|
|
6
|
+
light:string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let _timeoutToast:NodeJS.Timeout = null;
|
|
10
|
+
let _timeoutMutation:NodeJS.Timeout = null;
|
|
11
|
+
let _mutation:MutationObserver = null;
|
|
12
|
+
let _lastTheme:ILastTheme = {
|
|
13
|
+
light: "",
|
|
14
|
+
dark: ""
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const guid = ():string => {
|
|
18
|
+
return "fxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c:string) => {
|
|
19
|
+
let r = (Math.random() * 16) | 0,
|
|
20
|
+
v = c == "x" ? r : (r & 0x3) | 0x8;
|
|
21
|
+
return v.toString(16);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const query = (selector:string|Element, element?:Element):Element => {
|
|
26
|
+
try {
|
|
27
|
+
return typeof selector == "string"
|
|
28
|
+
? (element || document).querySelector(selector)
|
|
29
|
+
: selector;
|
|
30
|
+
} catch {}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const queryAll = (selector:string|NodeListOf<Element>, element?:Element) => {
|
|
34
|
+
try {
|
|
35
|
+
return typeof selector == "string"
|
|
36
|
+
? (element || document).querySelectorAll(selector)
|
|
37
|
+
: selector;
|
|
38
|
+
} catch {}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const hasClass = (element:Element, name:string):boolean => {
|
|
42
|
+
if (!element) return false;
|
|
43
|
+
return element.classList.contains(name);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const addClass = (element:Element, name:string) => {
|
|
47
|
+
if (!element) return;
|
|
48
|
+
element.classList.add(name);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const removeClass = (element:Element, name:string) => {
|
|
52
|
+
if (!element) return;
|
|
53
|
+
element.classList.remove(name);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const on = (element:Element, name:string, callback:any) => {
|
|
57
|
+
element.addEventListener(name, callback, true);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const off = (element:Element, name:string, callback:any) => {
|
|
61
|
+
element.removeEventListener(name, callback, true);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const insertBefore = (newElement:Element, element:Element):Element => {
|
|
65
|
+
if (!element) return;
|
|
66
|
+
return element.parentNode.insertBefore(newElement, element);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const prev = (element:Element):Element => {
|
|
70
|
+
if (!element) return;
|
|
71
|
+
return element.previousElementSibling;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const next = (element:Element):Element => {
|
|
75
|
+
if (!element) return;
|
|
76
|
+
return element.nextElementSibling;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const parent = (element:Element):Element => {
|
|
80
|
+
if (!element) return;
|
|
81
|
+
return element.parentElement;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const create = (json:any) => {
|
|
85
|
+
let element = document.createElement("div");
|
|
86
|
+
|
|
87
|
+
for (let i in json)
|
|
88
|
+
element[i] = json[i];
|
|
89
|
+
|
|
90
|
+
return element;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const updateInput = (target:Element) => {
|
|
94
|
+
let input = target as HTMLInputElement;
|
|
95
|
+
let parentTarget = parent(target);
|
|
96
|
+
let label = query("label", parentTarget) as HTMLLabelElement;
|
|
97
|
+
let isBorder = hasClass(parentTarget, "border") && !hasClass(parentTarget, "fill");
|
|
98
|
+
let toActive = document.activeElement == target || input.value || /date|time/.test(input.type);
|
|
99
|
+
|
|
100
|
+
if (toActive) {
|
|
101
|
+
if (isBorder && label) {
|
|
102
|
+
let width = hasClass(label, "active") ? label.offsetWidth : Math.round(label.offsetWidth / 1.33);
|
|
103
|
+
let start = hasClass(parentTarget, "round") ? 20 : 12;
|
|
104
|
+
let end = width + start + 8;
|
|
105
|
+
input.style.clipPath = `polygon(0% 0%, ${start}rem 0%, ${start}rem 8rem, ${end}rem 8rem, ${end}rem 0%, 100% 0%, 100% 100%, 0% 100%)`;
|
|
106
|
+
} else
|
|
107
|
+
input.style.clipPath = "";
|
|
108
|
+
addClass(label, "active");
|
|
109
|
+
} else {
|
|
110
|
+
removeClass(label, "active");
|
|
111
|
+
input.style.clipPath = "";
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (target.getAttribute("data-ui")) open(target);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const onClickElement = (e:Event) => {
|
|
118
|
+
let target = e.currentTarget as HTMLElement;
|
|
119
|
+
if (/input/i.test(target.tagName)) return;
|
|
120
|
+
open(target);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const onClickLabel = (e:Event) => {
|
|
124
|
+
let target = e.currentTarget as Element;
|
|
125
|
+
let input = query('input:not([type=file]):not([type=checkbox]):not([type=radio]), select, textarea', parent(target)) as HTMLElement;
|
|
126
|
+
if (input) input.focus();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const onFocusInput = (e:Event) => {
|
|
130
|
+
let target = e.currentTarget as Element;
|
|
131
|
+
updateInput(target);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const onBlurInput = (e:Event) => {
|
|
135
|
+
let target = e.currentTarget as Element;
|
|
136
|
+
updateInput(target);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const onClickDocument = (e:Event) => {
|
|
140
|
+
let target = e.currentTarget as Element;
|
|
141
|
+
let dropdowns = queryAll(".dropdown.active");
|
|
142
|
+
dropdowns.forEach((x:Element) => removeClass(x, "active"));
|
|
143
|
+
|
|
144
|
+
off(target, "click", onClickDocument);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const onClickToast = (e:Event) => {
|
|
148
|
+
let target = e.currentTarget as Element;
|
|
149
|
+
removeClass(target, "active");
|
|
150
|
+
|
|
151
|
+
if (_timeoutToast) clearTimeout(_timeoutToast);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const onChangeFile = (e:Event) => {
|
|
155
|
+
let target = e.currentTarget as HTMLInputElement;
|
|
156
|
+
updateFile(target);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const onKeydownFile = (e:KeyboardEvent) => {
|
|
160
|
+
let target = e.currentTarget as HTMLInputElement;
|
|
161
|
+
updateFile(target, e);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const onMutation = () => {
|
|
165
|
+
if (_timeoutMutation) clearTimeout(_timeoutMutation);
|
|
166
|
+
_timeoutMutation = setTimeout(ui, 180);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const updateFile = (target:Element, e?:KeyboardEvent) => {
|
|
170
|
+
if (e) {
|
|
171
|
+
if (e.key !== "Enter") return;
|
|
172
|
+
|
|
173
|
+
let target = e.currentTarget as Element;
|
|
174
|
+
let nextTarget = next(target) as HTMLInputElement;
|
|
175
|
+
if (!nextTarget || !/file/i.test(nextTarget.type)) return;
|
|
176
|
+
return nextTarget.click();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let currentTarget = target as HTMLInputElement;
|
|
180
|
+
let previousTarget = prev(target) as HTMLInputElement;
|
|
181
|
+
if (!previousTarget || !/text/i.test(previousTarget.type)) return;
|
|
182
|
+
previousTarget.value = Array.from(currentTarget.files).map((x) => x.name).join(", ");
|
|
183
|
+
previousTarget.readOnly = true;
|
|
184
|
+
previousTarget.addEventListener("keydown", onKeydownFile);
|
|
185
|
+
updateInput(previousTarget);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const open = (from?:Element, to?:Element, config?:any) => {
|
|
189
|
+
if (!to) to = query(from.getAttribute("data-ui"))
|
|
190
|
+
if (hasClass(to, "modal")) return modal(from, to);
|
|
191
|
+
if (hasClass(to, "dropdown")) return dropdown(from, to);
|
|
192
|
+
if (hasClass(to, "toast")) return toast(from, to, config);
|
|
193
|
+
if (hasClass(to, "page")) return page(from, to);
|
|
194
|
+
if (hasClass(to, "progress")) return progress(to, config);
|
|
195
|
+
|
|
196
|
+
tab(from);
|
|
197
|
+
|
|
198
|
+
if (hasClass(to, "active")) return removeClass(to, "active");
|
|
199
|
+
|
|
200
|
+
addClass(to, "active");
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const tab = (from:Element) => {
|
|
204
|
+
let container = parent(from);
|
|
205
|
+
if (!hasClass(container, "tabs")) return;
|
|
206
|
+
|
|
207
|
+
let tabs = queryAll("a", container);
|
|
208
|
+
tabs.forEach((x:Element) => removeClass(x, "active"));
|
|
209
|
+
|
|
210
|
+
addClass(from, "active");
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const page = (from:Element, to:Element,) => {
|
|
214
|
+
tab(from);
|
|
215
|
+
|
|
216
|
+
let container = parent(to);
|
|
217
|
+
for (let i = 0; i < container.children.length; i++)
|
|
218
|
+
if (hasClass(container.children[i], "page")) removeClass(container.children[i], "active");
|
|
219
|
+
|
|
220
|
+
addClass(to, "active");
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const dropdown = (from:Element, to:Element) => {
|
|
224
|
+
tab(from);
|
|
225
|
+
|
|
226
|
+
if (hasClass(to, "active")) return removeClass(to, "active");
|
|
227
|
+
|
|
228
|
+
let dropdowns = queryAll(".dropdown.active");
|
|
229
|
+
dropdowns.forEach((x:Element) => removeClass(x, "active"));
|
|
230
|
+
|
|
231
|
+
addClass(to, "active");
|
|
232
|
+
on(document.body, "click", onClickDocument);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
const modal = (from:Element, to:Element) => {
|
|
236
|
+
tab(from);
|
|
237
|
+
|
|
238
|
+
let overlay = prev(to) as HTMLElement;
|
|
239
|
+
if (!hasClass(overlay, "overlay")) {
|
|
240
|
+
overlay = create({ className: "overlay active" });
|
|
241
|
+
insertBefore(overlay, to);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
overlay.onclick = () => {
|
|
245
|
+
removeClass(from, "active");
|
|
246
|
+
removeClass(to, "active");
|
|
247
|
+
removeClass(overlay, "active");
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
let isActive = hasClass(to, "active");
|
|
251
|
+
let container = parent(to);
|
|
252
|
+
if (/nav/i.test(container.tagName)) {
|
|
253
|
+
let elements = queryAll(".modal, a, .overlay", container);
|
|
254
|
+
elements.forEach((x:Element) => removeClass(x, "active"));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (isActive) {
|
|
258
|
+
removeClass(from, "active");
|
|
259
|
+
removeClass(overlay, "active");
|
|
260
|
+
removeClass(to, "active");
|
|
261
|
+
} else {
|
|
262
|
+
if (!/button/i.test(from.tagName) && !hasClass(from, "button") && !hasClass(from, "chip")) addClass(from, "active");
|
|
263
|
+
addClass(overlay, "active");
|
|
264
|
+
addClass(to, "active");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const toast = (from:Element, to:Element, config:any) => {
|
|
269
|
+
tab(from);
|
|
270
|
+
|
|
271
|
+
let elements = queryAll(".toast.active");
|
|
272
|
+
elements.forEach((x:Element) => removeClass(x, "active"));
|
|
273
|
+
addClass(to, "active");
|
|
274
|
+
on(to, "click", onClickToast);
|
|
275
|
+
|
|
276
|
+
if (_timeoutToast) clearTimeout(_timeoutToast);
|
|
277
|
+
|
|
278
|
+
if (config && config == -1) return;
|
|
279
|
+
|
|
280
|
+
_timeoutToast = setTimeout(() => {
|
|
281
|
+
removeClass(to, "active");
|
|
282
|
+
}, config && config ? config : 6000);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const progress = (to:Element, config:any) => {
|
|
286
|
+
let element = to as HTMLElement;
|
|
287
|
+
|
|
288
|
+
if (hasClass(element, "left")) return element.style.clipPath = `polygon(0% 0%, 0% 100%, ${config}% 100%, ${config}% 0%)`;
|
|
289
|
+
|
|
290
|
+
if (hasClass(element, "top")) return element.style.clipPath = `polygon(0% 0%, 100% 0%, 100% ${config}%, 0% ${config}%)`;
|
|
291
|
+
|
|
292
|
+
if (hasClass(element, "right")) return element.style.clipPath = `polygon(100% 0%, 100% 100%, ${100 - config}% 100%, ${100 - config}% 0%)`;
|
|
293
|
+
|
|
294
|
+
if (hasClass(element, "bottom")) return element.style.clipPath = `polygon(0% 100%, 100% 100%, 100% ${100 - config}%, 0% ${100 - config}%)`;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const lastTheme = ():ILastTheme => {
|
|
298
|
+
if (_lastTheme.light && _lastTheme.dark) return _lastTheme;
|
|
299
|
+
|
|
300
|
+
let light = document.createElement("body");
|
|
301
|
+
light.className = "light";
|
|
302
|
+
document.body.appendChild(light);
|
|
303
|
+
|
|
304
|
+
let dark = document.createElement("body");
|
|
305
|
+
dark.className = "dark";
|
|
306
|
+
document.body.appendChild(dark);
|
|
307
|
+
|
|
308
|
+
let fromLight = getComputedStyle(light);
|
|
309
|
+
let fromDark = getComputedStyle(dark);
|
|
310
|
+
let variables = ['--primary', '--on-primary', '--primary-container', '--on-primary-container', '--secondary', '--on-secondary', '--secondary-container', '--on-secondary-container', '--tertiary', '--on-tertiary', '--tertiary-container', '--on-tertiary-container', '--error', '--on-error', '--error-container', '--on-error-container', '--background', '--on-background', '--surface', '--on-surface', '--outline', '--surface-variant', '--on-surface-variant', '--inverse-surface', '--inverse-on-surface'];
|
|
311
|
+
for(let i=0; i<variables.length; i++) {
|
|
312
|
+
_lastTheme.light += variables[i] + ":" + fromLight.getPropertyValue(variables[i]) + ";";
|
|
313
|
+
_lastTheme.dark += variables[i] + ":" + fromDark.getPropertyValue(variables[i]) + ";";
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
document.body.removeChild(light);
|
|
317
|
+
document.body.removeChild(dark);
|
|
318
|
+
return _lastTheme;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const theme = (source:any):ILastTheme => {
|
|
322
|
+
if (!source || !window["materialDynamicColors"]) return lastTheme();
|
|
323
|
+
|
|
324
|
+
let mode = /dark/i.test(document.body.className) ? "dark" : "light";
|
|
325
|
+
if (source && source.light && source.dark) {
|
|
326
|
+
_lastTheme.light = source.light;
|
|
327
|
+
_lastTheme.dark = source.dark;
|
|
328
|
+
document.body.setAttribute("style", source[mode]);
|
|
329
|
+
return source;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return window["materialDynamicColors"](source).then((theme) => {
|
|
333
|
+
const toCss = (data) => {
|
|
334
|
+
let style = "";
|
|
335
|
+
for (let i in data) {
|
|
336
|
+
let kebabCase = i.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
|
|
337
|
+
style += "--"+kebabCase+":"+data[i]+";";
|
|
338
|
+
}
|
|
339
|
+
return style;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
_lastTheme.light = toCss(theme.light);
|
|
343
|
+
_lastTheme.dark = toCss(theme.dark);
|
|
344
|
+
document.body.setAttribute("style", _lastTheme[mode]);
|
|
345
|
+
return _lastTheme;
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const mode = (value:string):string => {
|
|
350
|
+
if (!value) return /dark/i.test(document.body.className) ? "dark" : "light";
|
|
351
|
+
document.body.classList.remove("light", "dark");
|
|
352
|
+
document.body.classList.add(value);
|
|
353
|
+
if (window["materialDynamicColors"]) document.body.setAttribute("style", _lastTheme[value]);
|
|
354
|
+
return value;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
const setup = () => {
|
|
358
|
+
if (_mutation) return;
|
|
359
|
+
_mutation = new MutationObserver(onMutation);
|
|
360
|
+
_mutation.observe(document.body, { childList: true, subtree: true });
|
|
361
|
+
ui();
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const ui = (selector?:string, config?:any) => {
|
|
365
|
+
if (selector) {
|
|
366
|
+
if (selector == "setup") return setup();
|
|
367
|
+
if (selector == "guid") return guid();
|
|
368
|
+
if (selector == "mode") return mode(config);
|
|
369
|
+
if (selector == "theme") return theme(config);
|
|
370
|
+
|
|
371
|
+
let to = query(selector);
|
|
372
|
+
let from = query("[data-ui='#" + to.id + "']");
|
|
373
|
+
open(from, to, config);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
let elements = queryAll("[data-ui]");
|
|
377
|
+
elements.forEach((x:Element) => on(x, "click", onClickElement));
|
|
378
|
+
|
|
379
|
+
let labels = queryAll(".field > label");
|
|
380
|
+
labels.forEach((x:HTMLLabelElement) => on(x, "click", onClickLabel));
|
|
381
|
+
|
|
382
|
+
let inputs = queryAll(".field > input:not([type=file]):not([type=checkbox]):not([type=radio]), .field > select, .field > textarea");
|
|
383
|
+
inputs.forEach((x:Element) => {
|
|
384
|
+
on(x, "focus", onFocusInput);
|
|
385
|
+
on(x, "blur", onBlurInput);
|
|
386
|
+
updateInput(x);
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
let files = queryAll(".field > input[type=file]");
|
|
390
|
+
files.forEach((x:Element) => {
|
|
391
|
+
on(x, "change", onChangeFile);
|
|
392
|
+
updateFile(x);
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
window["ui"] = ui;
|
|
397
|
+
window.addEventListener("load", () => ui("setup"));
|
|
398
|
+
})();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
align-items: center;
|
|
4
4
|
justify-content: center;
|
|
5
5
|
position: absolute;
|
|
6
|
-
font-size:
|
|
6
|
+
font-size: 12rem;
|
|
7
7
|
text-transform: none;
|
|
8
8
|
z-index: 1;
|
|
9
9
|
padding: 0 6rem;
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
bottom: auto;
|
|
15
15
|
right: 0;
|
|
16
16
|
transform: translate(50%, -100%);
|
|
17
|
-
|
|
18
|
-
height: 16rem;
|
|
17
|
+
height: 20rem;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
.badge.none {
|
|
@@ -94,24 +93,15 @@
|
|
|
94
93
|
|
|
95
94
|
.badge.border {
|
|
96
95
|
border: 1rem solid var(--error);
|
|
97
|
-
|
|
98
|
-
color:var(--error);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.badge.round {
|
|
102
|
-
border-radius: 8rem;
|
|
96
|
+
color: var(--error);
|
|
103
97
|
}
|
|
104
98
|
|
|
105
99
|
.badge.circle,
|
|
106
100
|
.badge.square {
|
|
107
101
|
padding: 0;
|
|
108
102
|
text-align: center;
|
|
109
|
-
width:
|
|
110
|
-
height:
|
|
111
|
-
min-width: auto;
|
|
112
|
-
min-height: auto;
|
|
113
|
-
max-width: none;
|
|
114
|
-
max-height: none;
|
|
103
|
+
width: 20rem;
|
|
104
|
+
height: 20rem;
|
|
115
105
|
}
|
|
116
106
|
|
|
117
107
|
.badge.circle {
|
|
@@ -4,137 +4,73 @@ button {
|
|
|
4
4
|
display: inline-flex;
|
|
5
5
|
align-items: center;
|
|
6
6
|
justify-content: center;
|
|
7
|
-
box-shadow: var(--shadow1);
|
|
8
|
-
min-height: 40rem;
|
|
9
7
|
height: 40rem;
|
|
8
|
+
min-width: 40rem;
|
|
10
9
|
font-size: 14rem;
|
|
11
10
|
font-weight: 500;
|
|
12
11
|
color: var(--on-primary);
|
|
13
|
-
padding: 0
|
|
12
|
+
padding: 0 24rem;
|
|
14
13
|
background-color: var(--primary);
|
|
15
14
|
margin: 0 8rem;
|
|
16
15
|
border-radius: 8rem;
|
|
17
16
|
transition: var(--speed3) transform, var(--speed3) border-radius, var(--speed3) padding;
|
|
18
17
|
user-select: none;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
.button > :not(.dropdown, .progress, .badge, .tooltip) + :not(.dropdown, .progress, .badge, .tooltip),
|
|
22
|
-
button > :not(.dropdown, .progress, .badge, .tooltip) + :not(.dropdown, .progress, .badge, .tooltip) {
|
|
23
|
-
margin-left: 4rem;
|
|
18
|
+
gap: 8rem;
|
|
24
19
|
}
|
|
25
20
|
|
|
26
21
|
.button.none,
|
|
27
22
|
button.none {
|
|
28
|
-
box-shadow: none;
|
|
29
23
|
width: auto;
|
|
30
|
-
min-width: auto;
|
|
31
24
|
height: auto;
|
|
32
|
-
min-height: auto;
|
|
33
25
|
color: var(--primary);
|
|
34
26
|
padding: 0;
|
|
35
27
|
background-color: transparent;
|
|
36
|
-
|
|
28
|
+
min-width: auto;
|
|
29
|
+
min-height: 24rem;
|
|
37
30
|
}
|
|
38
31
|
|
|
39
32
|
.button.small,
|
|
40
33
|
button.small {
|
|
41
|
-
min-height: 32rem !important;
|
|
42
34
|
height: 32rem;
|
|
35
|
+
min-width: 32rem;
|
|
43
36
|
font-size: 14rem;
|
|
44
37
|
}
|
|
45
38
|
|
|
46
|
-
.button.medium,
|
|
47
|
-
button.medium {
|
|
48
|
-
min-height: 40rem !important;
|
|
49
|
-
height: 40rem;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
39
|
.button.large,
|
|
53
40
|
button.large {
|
|
54
|
-
min-height: 48rem !important;
|
|
55
41
|
height: 48rem;
|
|
42
|
+
min-width: 48rem;
|
|
56
43
|
}
|
|
57
44
|
|
|
58
45
|
.button.extra,
|
|
59
|
-
button.extra
|
|
60
|
-
|
|
46
|
+
button.extra,
|
|
47
|
+
.button.extend,
|
|
48
|
+
button.extend {
|
|
61
49
|
height: 56rem;
|
|
50
|
+
min-width: 56rem;
|
|
62
51
|
font-size: 16rem;
|
|
63
52
|
}
|
|
64
53
|
|
|
65
54
|
.button.border,
|
|
66
55
|
button.border {
|
|
67
56
|
border: 1rem solid var(--primary);
|
|
68
|
-
background-color: transparent;
|
|
69
57
|
color: var(--primary);
|
|
70
|
-
box-shadow: none;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.button.round,
|
|
74
|
-
button.round {
|
|
75
|
-
transform: none;
|
|
76
|
-
border-radius: 32rem;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.button.top-round,
|
|
80
|
-
button.top-round {
|
|
81
|
-
border-radius: 32rem 32rem 4rem 4rem !important;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.button.bottom-round,
|
|
85
|
-
button.bottom-round {
|
|
86
|
-
border-radius: 4rem 4rem 32rem 32rem !important;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.button.left-round,
|
|
90
|
-
button.left-round {
|
|
91
|
-
border-radius: 32rem 4rem 4rem 32rem !important;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.button.right-round,
|
|
95
|
-
button.right-round {
|
|
96
|
-
border-radius: 4rem 32rem 32rem 4rem !important;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.button.top-round.left-round,
|
|
100
|
-
button.top-round.left-round {
|
|
101
|
-
border-radius: 32rem 32rem 4rem 32rem !important;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.button.top-round.right-round,
|
|
105
|
-
button.top-round.right-round {
|
|
106
|
-
border-radius: 32rem 32rem 32rem 4rem !important;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.button.bottom-round.left-round,
|
|
110
|
-
button.bottom-round.left-round {
|
|
111
|
-
border-radius: 32rem 4rem 32rem 32rem !important;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.button.bottom-round.right-round,
|
|
115
|
-
button.bottom-round.right-round {
|
|
116
|
-
border-radius: 4rem 32rem 32rem 32rem !important;
|
|
117
58
|
}
|
|
118
59
|
|
|
119
60
|
.button.circle,
|
|
120
61
|
button.circle {
|
|
121
|
-
transform: none;
|
|
122
|
-
padding: 0;
|
|
123
62
|
border-radius: 40rem;
|
|
124
63
|
padding: 0;
|
|
125
64
|
}
|
|
126
65
|
|
|
127
66
|
.button.square,
|
|
128
67
|
button.square {
|
|
129
|
-
|
|
130
|
-
border-radius: 4rem;
|
|
68
|
+
border-radius: 0;
|
|
131
69
|
padding: 0;
|
|
132
70
|
}
|
|
133
71
|
|
|
134
72
|
.button.extend,
|
|
135
73
|
button.extend {
|
|
136
|
-
min-height: 56rem !important;
|
|
137
|
-
min-width: 56rem !important;
|
|
138
74
|
padding: 0;
|
|
139
75
|
}
|
|
140
76
|
|
|
@@ -148,8 +84,6 @@ button.extend:hover,
|
|
|
148
84
|
.button.extend.active,
|
|
149
85
|
button.extend.active {
|
|
150
86
|
width: auto;
|
|
151
|
-
max-width: none;
|
|
152
|
-
min-width: auto;
|
|
153
87
|
padding: 0 16rem;
|
|
154
88
|
}
|
|
155
89
|
|
|
@@ -169,15 +103,6 @@ button.extend.active > img + span {
|
|
|
169
103
|
margin-left: 48rem;
|
|
170
104
|
}
|
|
171
105
|
|
|
172
|
-
.button.square:not(.flat, .border),
|
|
173
|
-
.button.circle:not(.flat, .border),
|
|
174
|
-
.button.diamond:not(.flat, .border),
|
|
175
|
-
button.square:not(.flat, .border),
|
|
176
|
-
button.circle:not(.flat, .border),
|
|
177
|
-
button.diamond:not(.flat, .border) {
|
|
178
|
-
box-shadow: var(--shadow2);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
106
|
.button[disabled],
|
|
182
107
|
button:disabled {
|
|
183
108
|
opacity: .5;
|
|
@@ -193,4 +118,10 @@ button:disabled::before,
|
|
|
193
118
|
.button[disabled]::after,
|
|
194
119
|
button:disabled::after {
|
|
195
120
|
display: none;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.button.fill,
|
|
124
|
+
button.fill {
|
|
125
|
+
background-color: var(--secondary-container) !important;
|
|
126
|
+
color: var(--on-secondary-container) !important;
|
|
196
127
|
}
|
|
@@ -1,52 +1,25 @@
|
|
|
1
|
-
.card,
|
|
2
1
|
article {
|
|
3
|
-
box-shadow: var(--
|
|
4
|
-
background-color: var(--surface
|
|
5
|
-
color: var(--on-surface
|
|
2
|
+
box-shadow: var(--elevate1);
|
|
3
|
+
background-color: var(--surface);
|
|
4
|
+
color: var(--on-surface);
|
|
6
5
|
padding: 16rem;
|
|
7
|
-
border-radius:
|
|
6
|
+
border-radius: 12rem;
|
|
8
7
|
display: block;
|
|
9
8
|
transition: var(--speed3) transform, var(--speed3) border-radius, var(--speed3) padding;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
article + article {
|
|
11
|
+
* + article {
|
|
14
12
|
margin-top: 16rem;
|
|
15
13
|
}
|
|
16
14
|
|
|
17
|
-
.row.medium-space > .col > .card + .card,
|
|
18
|
-
.row.medium-space > .col > article + article {
|
|
19
|
-
margin-top: 24rem;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.row.large-space > .col > .card + .card,
|
|
23
|
-
.row.large-space > .col > article + article {
|
|
24
|
-
margin-top: 32rem;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.card.small,
|
|
28
15
|
article.small {
|
|
29
16
|
height: 192rem;
|
|
30
17
|
}
|
|
31
18
|
|
|
32
|
-
.card.medium,
|
|
33
19
|
article.medium {
|
|
34
20
|
height: 320rem;
|
|
35
21
|
}
|
|
36
22
|
|
|
37
|
-
.card.large,
|
|
38
23
|
article.large {
|
|
39
24
|
height: 512rem;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.card.border,
|
|
43
|
-
article.border {
|
|
44
|
-
border: 1rem solid var(--outline);
|
|
45
|
-
box-shadow: none;
|
|
46
|
-
background-color: transparent;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.card.round,
|
|
50
|
-
article.round {
|
|
51
|
-
border-radius: 24rem;
|
|
52
25
|
}
|