vuetiwatch 0.2.0 → 0.2.2
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 +25 -202
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +19 -3
- package/dist/plugin.js.map +1 -1
- package/dist/styles/aurora.css +1 -1
- package/dist/styles/aurora.min.css +1 -1
- package/dist/styles/brutalist.css +1 -1
- package/dist/styles/brutalist.min.css +1 -1
- package/dist/styles/calm.css +1 -1
- package/dist/styles/calm.min.css +1 -1
- package/dist/styles/candy.css +1 -4
- package/dist/styles/candy.min.css +1 -1
- package/dist/styles/clay.css +1 -1
- package/dist/styles/clay.min.css +1 -1
- package/dist/styles/core.css +44 -2
- package/dist/styles/core.min.css +1 -1
- package/dist/styles/darkGlass.css +1 -1
- package/dist/styles/darkGlass.min.css +1 -1
- package/dist/styles/liquidGlass.css +10 -1
- package/dist/styles/liquidGlass.min.css +1 -1
- package/dist/styles/lux.css +1 -1
- package/dist/styles/lux.min.css +1 -1
- package/dist/styles/neon.css +1 -1
- package/dist/styles/neon.min.css +1 -1
- package/dist/styles/slate.css +1 -1
- package/dist/styles/slate.min.css +1 -1
- package/dist/styles/soft.css +3 -2
- package/dist/styles/soft.min.css +1 -1
- package/dist/styles.css +66 -17
- package/dist/styles.min.css +1 -1
- package/dist/themes/atlas.d.ts +35 -0
- package/dist/themes/atlas.d.ts.map +1 -1
- package/dist/themes/atlas.js +75 -1
- package/dist/themes/atlas.js.map +1 -1
- package/dist/themes/atlasDark.d.ts.map +1 -1
- package/dist/themes/atlasDark.js +5 -0
- package/dist/themes/atlasDark.js.map +1 -1
- package/dist/themes/atlasSepia.d.ts.map +1 -1
- package/dist/themes/atlasSepia.js +5 -0
- package/dist/themes/atlasSepia.js.map +1 -1
- package/dist/themes/aurora.d.ts.map +1 -1
- package/dist/themes/aurora.js +20 -1
- package/dist/themes/aurora.js.map +1 -1
- package/dist/themes/brutalist.d.ts.map +1 -1
- package/dist/themes/brutalist.js +63 -5
- package/dist/themes/brutalist.js.map +1 -1
- package/dist/themes/calm.d.ts.map +1 -1
- package/dist/themes/calm.js +22 -1
- package/dist/themes/calm.js.map +1 -1
- package/dist/themes/candy.d.ts.map +1 -1
- package/dist/themes/candy.js +23 -1
- package/dist/themes/candy.js.map +1 -1
- package/dist/themes/clay.d.ts.map +1 -1
- package/dist/themes/clay.js +14 -1
- package/dist/themes/clay.js.map +1 -1
- package/dist/themes/darkGlass.d.ts.map +1 -1
- package/dist/themes/darkGlass.js +13 -1
- package/dist/themes/darkGlass.js.map +1 -1
- package/dist/themes/graphite.d.ts.map +1 -1
- package/dist/themes/graphite.js +42 -7
- package/dist/themes/graphite.js.map +1 -1
- package/dist/themes/liquidGlass.d.ts.map +1 -1
- package/dist/themes/liquidGlass.js +41 -5
- package/dist/themes/liquidGlass.js.map +1 -1
- package/dist/themes/lux.d.ts.map +1 -1
- package/dist/themes/lux.js +48 -6
- package/dist/themes/lux.js.map +1 -1
- package/dist/themes/morph.d.ts.map +1 -1
- package/dist/themes/morph.js +21 -1
- package/dist/themes/morph.js.map +1 -1
- package/dist/themes/neon.d.ts.map +1 -1
- package/dist/themes/neon.js +35 -1
- package/dist/themes/neon.js.map +1 -1
- package/dist/themes/paper.d.ts.map +1 -1
- package/dist/themes/paper.js +38 -1
- package/dist/themes/paper.js.map +1 -1
- package/dist/themes/sketchy.d.ts.map +1 -1
- package/dist/themes/sketchy.js +27 -1
- package/dist/themes/sketchy.js.map +1 -1
- package/dist/themes/slate.d.ts.map +1 -1
- package/dist/themes/slate.js +42 -6
- package/dist/themes/slate.js.map +1 -1
- package/dist/themes/soft.d.ts.map +1 -1
- package/dist/themes/soft.js +49 -8
- package/dist/themes/soft.js.map +1 -1
- package/dist/util/defaults.d.ts +35 -0
- package/dist/util/defaults.d.ts.map +1 -1
- package/dist/util/defaults.js +51 -0
- package/dist/util/defaults.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +2 -2
- package/src/plugin.ts +20 -3
- package/src/styles/core.css +152 -3
- package/src/styles/themes/aurora.css +1 -0
- package/src/styles/themes/brutalist.css +1 -0
- package/src/styles/themes/calm.css +1 -0
- package/src/styles/themes/candy.css +9 -4
- package/src/styles/themes/clay.css +1 -0
- package/src/styles/themes/darkGlass.css +1 -0
- package/src/styles/themes/liquidGlass.css +41 -0
- package/src/styles/themes/lux.css +1 -0
- package/src/styles/themes/neon.css +1 -0
- package/src/styles/themes/slate.css +1 -0
- package/src/styles/themes/soft.css +10 -0
- package/src/themes/atlas.ts +76 -1
- package/src/themes/atlasDark.ts +5 -0
- package/src/themes/atlasSepia.ts +5 -0
- package/src/themes/aurora.ts +21 -1
- package/src/themes/brutalist.ts +65 -5
- package/src/themes/calm.ts +23 -1
- package/src/themes/candy.ts +24 -1
- package/src/themes/clay.ts +15 -1
- package/src/themes/darkGlass.ts +14 -1
- package/src/themes/graphite.ts +44 -7
- package/src/themes/liquidGlass.ts +42 -5
- package/src/themes/lux.ts +50 -6
- package/src/themes/morph.ts +22 -1
- package/src/themes/neon.ts +37 -1
- package/src/themes/paper.ts +40 -1
- package/src/themes/sketchy.ts +29 -1
- package/src/themes/slate.ts +43 -6
- package/src/themes/soft.ts +50 -8
- package/src/util/defaults.ts +84 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/util/defaults.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/util/defaults.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vuetiwatch",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Free, plug-and-play themes for Vuetify 4 — a Bootswatch for Vuetify",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
"clean": "node --eval \"fs.rmSync('dist', { recursive: true, force: true })\"",
|
|
55
55
|
"dev": "tsc --watch",
|
|
56
56
|
"typecheck": "tsc --noEmit",
|
|
57
|
+
"audit": "npm run build:types && node scripts/audit-contrast.mjs",
|
|
57
58
|
"prepack": "npm run build"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -27,12 +27,12 @@ export {
|
|
|
27
27
|
} from './registry.js'
|
|
28
28
|
export { createVuetiwatch, useVuetiwatch } from './plugin.js'
|
|
29
29
|
export { defineTheme } from './util/defineTheme.js'
|
|
30
|
-
export { bars, combine, controls, fields, icons, surfaces, tables } from './util/defaults.js'
|
|
30
|
+
export { bars, combine, controls, fields, icons, overlays, ripple, surfaces, tables } from './util/defaults.js'
|
|
31
31
|
|
|
32
32
|
export type { Vuetiwatch, VuetiwatchOptions } from './plugin.js'
|
|
33
33
|
export type { VuetiwatchThemeName } from './registry.js'
|
|
34
34
|
export type { DefineThemeOptions } from './util/defineTheme.js'
|
|
35
|
-
export type { VuetiwatchIcons } from './util/defaults.js'
|
|
35
|
+
export type { VuetiwatchIcons, VuetiwatchOverlays } from './util/defaults.js'
|
|
36
36
|
export type {
|
|
37
37
|
VuetiwatchAccent,
|
|
38
38
|
VuetiwatchDefaults,
|
package/src/plugin.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, inject, ref, watch } from 'vue'
|
|
1
|
+
import { computed, inject, ref, toRaw, watch } from 'vue'
|
|
2
2
|
import type { App, ComputedRef, Plugin, Ref } from 'vue'
|
|
3
3
|
import type { VuetiwatchAccent, VuetiwatchDefaults, VuetiwatchTheme } from './types.js'
|
|
4
4
|
import { combine } from './util/defaults.js'
|
|
@@ -198,8 +198,25 @@ export function createVuetiwatch (
|
|
|
198
198
|
let applied: VuetiwatchDefaults | undefined
|
|
199
199
|
|
|
200
200
|
const defaultsFor = (name: string) => {
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
/**
|
|
202
|
+
* The comparison goes through `toRaw`, because Vuetify holds
|
|
203
|
+
* `defaults` in a deep `ref` — "if an object is assigned as a ref's
|
|
204
|
+
* value, the object is made deeply reactive" — so reading it back
|
|
205
|
+
* hands out a proxy of what was written, never the object itself.
|
|
206
|
+
* Comparing the two directly can only ever say "not ours", which is
|
|
207
|
+
* the opposite of what the check asks: every theme change would fold
|
|
208
|
+
* the outgoing theme's defaults into the app's own, and they would
|
|
209
|
+
* never come back off. A theme with none of its own, `classic` above
|
|
210
|
+
* all, then keeps whatever was on screen before it.
|
|
211
|
+
*
|
|
212
|
+
* Only the comparison is unwrapped. Vue asks callers not to hold a
|
|
213
|
+
* persistent reference to a raw object, so what is kept is the proxy
|
|
214
|
+
* Vuetify handed out — `mergeDeep` only ever reads it.
|
|
215
|
+
*/
|
|
216
|
+
const live = instance.defaults.value
|
|
217
|
+
|
|
218
|
+
if (applied && toRaw(live) !== applied) {
|
|
219
|
+
userDefaults = live ?? {}
|
|
203
220
|
}
|
|
204
221
|
|
|
205
222
|
const themeDefaults = defaultsByName.get(name)
|
package/src/styles/core.css
CHANGED
|
@@ -249,8 +249,6 @@
|
|
|
249
249
|
.v-field:not([class*='rounded-']),
|
|
250
250
|
.v-list-item:not([class*='rounded-']),
|
|
251
251
|
.v-snackbar__wrapper,
|
|
252
|
-
.v-menu > .v-overlay__content,
|
|
253
|
-
.v-tooltip > .v-overlay__content,
|
|
254
252
|
.v-overlay__content > :is(.v-list, .v-sheet)
|
|
255
253
|
) {
|
|
256
254
|
border-radius: var(--v-vw-radius, 4px);
|
|
@@ -316,6 +314,34 @@
|
|
|
316
314
|
background-color: rgb(var(--v-theme-surface));
|
|
317
315
|
}
|
|
318
316
|
|
|
317
|
+
/**
|
|
318
|
+
* A tonal card tints its ground, not the things standing on it.
|
|
319
|
+
*
|
|
320
|
+
* Vuetify paints that tint with `.v-card__underlay`, positioned and left
|
|
321
|
+
* at `z-index: auto` — which puts it in the positioned layer, above every
|
|
322
|
+
* unpositioned child of the card. Its own `.v-card__content` wrapper is
|
|
323
|
+
* `position: relative` and so escapes, but a card is only given that
|
|
324
|
+
* wrapper for certain slots; content passed straight to the default slot
|
|
325
|
+
* gets none, and is painted over.
|
|
326
|
+
*
|
|
327
|
+
* What that costs is the whole point of the variant. A white field on a
|
|
328
|
+
* tonal card came out washed by `--v-activated-opacity` and read as
|
|
329
|
+
* disabled rather than as somewhere to type, and every label in the card
|
|
330
|
+
* lost the same fraction of its contrast — the stronger a theme sets that
|
|
331
|
+
* opacity, the more it loses.
|
|
332
|
+
*
|
|
333
|
+
* The card already establishes a stacking context of its own, so a
|
|
334
|
+
* negative index puts the tint under the content and no further: it stays
|
|
335
|
+
* inside the card and above the card's own background. Only the card is
|
|
336
|
+
* corrected here. The same shape appears on buttons, chips and avatars,
|
|
337
|
+
* where the tint is the entire visible surface rather than a ground —
|
|
338
|
+
* pushed back there, it disappears behind a transparent control and takes
|
|
339
|
+
* the variant with it.
|
|
340
|
+
*/
|
|
341
|
+
& .v-card--variant-tonal > .v-card__underlay {
|
|
342
|
+
z-index: -1;
|
|
343
|
+
}
|
|
344
|
+
|
|
319
345
|
/* --------------------------------------------------- nested surfaces */
|
|
320
346
|
|
|
321
347
|
/**
|
|
@@ -406,12 +432,110 @@
|
|
|
406
432
|
* theme built with `defineTheme()` gets the same knobs for free.
|
|
407
433
|
*/
|
|
408
434
|
|
|
409
|
-
|
|
435
|
+
/**
|
|
436
|
+
* Every floating surface, so a tooltip is not left behind by a menu.
|
|
437
|
+
*
|
|
438
|
+
* Written twice because an overlay is not where it looks like it is.
|
|
439
|
+
* Vuetify teleports one to `.v-overlay-container`, which hangs off
|
|
440
|
+
* `<body>` rather than off the application root, and stamps the theme
|
|
441
|
+
* class onto the overlay itself — so the theme class and `.v-dialog` land
|
|
442
|
+
* on one element and a descendant combinator has nothing to descend from.
|
|
443
|
+
* The compound form is what matches a teleported surface; the descendant
|
|
444
|
+
* one still covers a menu rendered in place with `attach`.
|
|
445
|
+
*/
|
|
446
|
+
&:is(.v-menu, .v-dialog, .v-tooltip) > .v-overlay__content,
|
|
410
447
|
& :is(.v-menu, .v-dialog, .v-tooltip) > .v-overlay__content {
|
|
411
448
|
border: var(--v-vw-overlay-border, none);
|
|
412
449
|
box-shadow: var(--v-vw-overlay-shadow, revert-layer);
|
|
413
450
|
}
|
|
414
451
|
|
|
452
|
+
/**
|
|
453
|
+
* And give it the shape it is being painted in.
|
|
454
|
+
*
|
|
455
|
+
* The treatment above lands on the content box, and so does a theme's own
|
|
456
|
+
* — the glass themes blur there, `brutalist` puts its offset block there.
|
|
457
|
+
* Vuetify leaves that box square while the card inside it is rounded, so
|
|
458
|
+
* every one of those decorations came out as a rectangle drawn around a
|
|
459
|
+
* rounded panel, most visibly wherever the corner radius is large.
|
|
460
|
+
*
|
|
461
|
+
* A menu and a tooltip are controls and take the control radius; a dialog
|
|
462
|
+
* is a card-sized surface and takes the panel one — the same expression
|
|
463
|
+
* the card itself resolves, so the two edges cannot drift apart. A
|
|
464
|
+
* fullscreen dialog is the exception: it has no corners because it has no
|
|
465
|
+
* edges.
|
|
466
|
+
*/
|
|
467
|
+
&:is(.v-menu, .v-tooltip) > .v-overlay__content,
|
|
468
|
+
& :is(.v-menu, .v-tooltip) > .v-overlay__content {
|
|
469
|
+
border-radius: var(--v-vw-radius, 4px);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
&.v-dialog:not(.v-dialog--fullscreen) > .v-overlay__content,
|
|
473
|
+
& .v-dialog:not(.v-dialog--fullscreen) > .v-overlay__content {
|
|
474
|
+
border-radius: var(--v-vw-radius-lg, var(--v-vw-radius, 4px));
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* And how fast it gets there.
|
|
479
|
+
*
|
|
480
|
+
* Which transition a surface uses is a prop — a theme names it through
|
|
481
|
+
* `overlays()` — but the timing of every one of them is baked into
|
|
482
|
+
* Vuetify's own stylesheet: a fade takes 300ms whether it belongs to a
|
|
483
|
+
* theme that settles slowly or to one that repaints instantly. Naming a
|
|
484
|
+
* transition without owning its clock only half moves it.
|
|
485
|
+
*
|
|
486
|
+
* The class is on the content element itself, whatever the transition is
|
|
487
|
+
* called, so one selector reaches all of them — and `revert-layer` hands
|
|
488
|
+
* the timing straight back to Vuetify for a theme that says nothing, so
|
|
489
|
+
* the two numbers stay opt-in.
|
|
490
|
+
*
|
|
491
|
+
* The scrim is timed from the same pair, because it is the other half of
|
|
492
|
+
* the same event and Vuetify gives no way to say so: it is hard-wired to
|
|
493
|
+
* a 300ms `fade-transition` with no prop to change it. Left alone, a
|
|
494
|
+
* theme that opens its panels in 90ms gets the panel and then, a third of
|
|
495
|
+
* a second later, the room going dark behind it — two things happening
|
|
496
|
+
* where the user did one.
|
|
497
|
+
*
|
|
498
|
+
* Leave falls through to enter, because a theme normally has one speed
|
|
499
|
+
* and stating it twice is how the two drift apart. A theme that wants the
|
|
500
|
+
* asymmetry Material describes — leave faster than enter — says so.
|
|
501
|
+
*/
|
|
502
|
+
& :is(.v-overlay__content, .v-overlay__scrim):is(
|
|
503
|
+
[class*='-transition-enter-active'],
|
|
504
|
+
[class*='-transition-leave-active']
|
|
505
|
+
) {
|
|
506
|
+
transition-timing-function: var(--v-vw-overlay-ease, var(--v-vw-motion-ease, revert-layer));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
& .v-overlay__content[class*='-transition-enter-active'] {
|
|
510
|
+
transition-duration: var(--v-vw-overlay-duration, revert-layer);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
& .v-overlay__content[class*='-transition-leave-active'] {
|
|
514
|
+
transition-duration: var(--v-vw-overlay-exit, var(--v-vw-overlay-duration, revert-layer));
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* The scrim follows the panel unless a theme separates them.
|
|
519
|
+
*
|
|
520
|
+
* Most of the time one number is right for both — they are two halves of
|
|
521
|
+
* one event, and a panel that arrives before the room darkens reads as
|
|
522
|
+
* two things happening. The exception is a theme whose panel does not
|
|
523
|
+
* travel at all: dimming the whole screen in a single frame is not
|
|
524
|
+
* decisive, it is a flash, and the eye reads it as a fault rather than as
|
|
525
|
+
* a choice. Such a theme gives the scrim a clock of its own and keeps its
|
|
526
|
+
* panel instant.
|
|
527
|
+
*/
|
|
528
|
+
& .v-overlay__scrim[class*='-transition-enter-active'] {
|
|
529
|
+
transition-duration: var(--v-vw-scrim-duration, var(--v-vw-overlay-duration, revert-layer));
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
& .v-overlay__scrim[class*='-transition-leave-active'] {
|
|
533
|
+
transition-duration: var(
|
|
534
|
+
--v-vw-scrim-duration,
|
|
535
|
+
var(--v-vw-overlay-exit, var(--v-vw-overlay-duration, revert-layer))
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
|
|
415
539
|
/**
|
|
416
540
|
* A relief theme paints outside the shape it lifts, and a chip group is a
|
|
417
541
|
* scroller: it clips to its content box, so the glow around the chips
|
|
@@ -750,6 +874,31 @@
|
|
|
750
874
|
text-decoration: var(--v-vw-link-decoration, underline);
|
|
751
875
|
text-underline-offset: 0.15em;
|
|
752
876
|
}
|
|
877
|
+
|
|
878
|
+
/* ------------------------------------------------------------ selection */
|
|
879
|
+
|
|
880
|
+
/**
|
|
881
|
+
* Dragging across a paragraph is the one interaction every theme shares
|
|
882
|
+
* and none of them owned: the browser answers in its own blue, which
|
|
883
|
+
* belongs to no palette here and reads as a piece of the operating
|
|
884
|
+
* system showing through the page.
|
|
885
|
+
*
|
|
886
|
+
* The default is the theme's accent rather than a value each theme has
|
|
887
|
+
* to state, so it costs a theme nothing and follows the accent when
|
|
888
|
+
* `setAccent()` repaints one. `24%` is the strongest tint that still
|
|
889
|
+
* leaves body text at its own contrast on both light and dark grounds —
|
|
890
|
+
* a theme that wants a solid highlight sets the pair below and takes
|
|
891
|
+
* responsibility for the ink on top of it.
|
|
892
|
+
*
|
|
893
|
+
* `background-color` rather than the shorthand on purpose: `::selection`
|
|
894
|
+
* paints no image, so a theme whose surface is a gradient cannot express
|
|
895
|
+
* it here and would silently get nothing.
|
|
896
|
+
*/
|
|
897
|
+
&::selection,
|
|
898
|
+
& ::selection {
|
|
899
|
+
background-color: var(--v-vw-selection-fill, rgba(var(--v-theme-primary), 0.24));
|
|
900
|
+
color: var(--v-vw-selection-color, inherit);
|
|
901
|
+
}
|
|
753
902
|
}
|
|
754
903
|
|
|
755
904
|
@keyframes vw-pop {
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
box-shadow: 5px 5px 0 rgb(var(--v-shadow-color));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content,
|
|
29
30
|
& :is(.v-menu, .v-dialog) > .v-overlay__content {
|
|
30
31
|
border: var(--v-vw-border-width) solid rgb(var(--v-shadow-color));
|
|
31
32
|
box-shadow: 8px 8px 0 rgb(var(--v-shadow-color));
|
|
@@ -70,13 +70,18 @@
|
|
|
70
70
|
* Inputs are the one place the padding goes the other way: a dent pressed
|
|
71
71
|
* into the cushion, shaded at the top where the surface falls in. Without
|
|
72
72
|
* it `solo-filled` is the same white as the card it sits on.
|
|
73
|
+
*
|
|
74
|
+
* The tint goes on the field, not on `.v-field__overlay`, which is where
|
|
75
|
+
* it used to be and where it did nothing: Vuetify holds that overlay at
|
|
76
|
+
* `opacity: 0.04`, so a colour set there arrives at a twenty-fifth of its
|
|
77
|
+
* strength — the dent stayed white, and against a tonal card the field
|
|
78
|
+
* read as an inert slab rather than as somewhere to type. Leaving the
|
|
79
|
+
* overlay alone also leaves Vuetify's own hover and focus shading, which
|
|
80
|
+
* recomputes that opacity and would have fought a value forced into it.
|
|
73
81
|
*/
|
|
74
82
|
& .v-field.v-field--variant-solo-filled {
|
|
75
|
-
box-shadow: inset 0 2px 5px rgba(var(--v-shadow-color), 0.16);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
& .v-field.v-field--variant-solo-filled .v-field__overlay {
|
|
79
83
|
background-color: rgb(var(--v-theme-surface-light));
|
|
84
|
+
box-shadow: inset 0 2px 5px rgba(var(--v-shadow-color), 0.16);
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
& :is(.v-switch__track, .v-slider-track__background) {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
0 8px 32px rgba(var(--v-shadow-color), 0.45);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content,
|
|
31
32
|
& :is(.v-menu, .v-dialog) > .v-overlay__content {
|
|
32
33
|
backdrop-filter: blur(18px) saturate(160%);
|
|
33
34
|
box-shadow: 0 16px 48px rgba(var(--v-shadow-color), 0.55);
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
0 10px 34px rgba(var(--v-shadow-color), 0.1);
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content,
|
|
42
43
|
& :is(.v-menu, .v-dialog) > .v-overlay__content {
|
|
43
44
|
backdrop-filter: blur(30px) saturate(190%);
|
|
44
45
|
box-shadow:
|
|
@@ -47,6 +48,46 @@
|
|
|
47
48
|
0 18px 52px rgba(var(--v-shadow-color), 0.18);
|
|
48
49
|
}
|
|
49
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The pane arrives already frosted.
|
|
53
|
+
*
|
|
54
|
+
* Not a browser bug but the filter model working as specified: an element
|
|
55
|
+
* with `opacity` below 1 becomes a backdrop root, and a `backdrop-filter`
|
|
56
|
+
* inside one samples that root rather than the page. Every Vuetify
|
|
57
|
+
* transition fades, so for the length of the entrance the blur has
|
|
58
|
+
* nothing behind it to blur, and the frost only appears at the frame
|
|
59
|
+
* opacity reaches 1 — which reads as the effect loading late.
|
|
60
|
+
*
|
|
61
|
+
* So the entrance is split across two clocks rather than one. The scale
|
|
62
|
+
* keeps the theme's own length and carries the movement; opacity runs on
|
|
63
|
+
* `--vw-glass-lit`, short enough to end the backdrop root while the pane
|
|
64
|
+
* is still on its way in, so the frost is alight for almost all of the
|
|
65
|
+
* arrival.
|
|
66
|
+
*
|
|
67
|
+
* The scrim is put on that same short clock — that is what
|
|
68
|
+
* `--v-vw-scrim-duration` is, and core reads it — and this is the half
|
|
69
|
+
* that is easy to get wrong: cutting the pane's fade altogether was the first
|
|
70
|
+
* attempt, and it traded a late blur for something worse — a solid pane
|
|
71
|
+
* in frame one with the room still darkening behind it for another three
|
|
72
|
+
* hundred milliseconds, which reads as two events instead of one. What
|
|
73
|
+
* has to agree is when the pane is lit and when the room is dark. The
|
|
74
|
+
* scale finishing later is movement, and movement is allowed to settle.
|
|
75
|
+
*
|
|
76
|
+
* The start scale is gentler than the transition's own `scale(0)`, since
|
|
77
|
+
* a pane already visible at 120ms should not still be a dot. The exit
|
|
78
|
+
* keeps one clock: a blur going out early is not something anyone sees.
|
|
79
|
+
*/
|
|
80
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content[class*='-transition-enter-from'],
|
|
81
|
+
& :is(.v-menu, .v-dialog) > .v-overlay__content[class*='-transition-enter-from'] {
|
|
82
|
+
transform: scale(0.92);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content[class*='-transition-enter-active'],
|
|
86
|
+
& :is(.v-menu, .v-dialog) > .v-overlay__content[class*='-transition-enter-active'] {
|
|
87
|
+
transition-property: transform, opacity;
|
|
88
|
+
transition-duration: var(--v-vw-overlay-duration, 320ms), var(--v-vw-scrim-duration, 120ms);
|
|
89
|
+
}
|
|
90
|
+
|
|
50
91
|
/**
|
|
51
92
|
* A text field is a recess, not a raised pane — so it takes a fill rather
|
|
52
93
|
* than glass, and gets no specular rim.
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
box-shadow: 0 2px 8px rgba(var(--v-theme-primary), 0.24);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
&:is(.v-menu, .v-dialog) > .v-overlay__content,
|
|
23
24
|
& :is(.v-menu, .v-dialog) > .v-overlay__content {
|
|
24
25
|
box-shadow: 0 16px 48px rgba(var(--v-theme-primary), 0.18);
|
|
25
26
|
}
|
|
@@ -28,9 +29,18 @@
|
|
|
28
29
|
* `solo-filled` paints itself `surface`, which sits a couple of percent
|
|
29
30
|
* from this theme's `background`. Without the shadow the field has no
|
|
30
31
|
* edge at all, so it keeps one — in the theme's own tint.
|
|
32
|
+
*
|
|
33
|
+
* A cast shadow is not enough on its own, though, and the newsletter
|
|
34
|
+
* band is where that shows: on a tonal card the ground is already a
|
|
35
|
+
* tinted grey, a diffuse violet glow over it is invisible, and the field
|
|
36
|
+
* loses its only edge. What is left is a pale slab a few per cent from
|
|
37
|
+
* what surrounds it, which reads as disabled rather than as somewhere to
|
|
38
|
+
* type. The ring restores the boundary wherever the glow cannot — inset,
|
|
39
|
+
* so it costs no layout the way a real border would.
|
|
31
40
|
*/
|
|
32
41
|
& .v-field.v-field--variant-solo-filled {
|
|
33
42
|
box-shadow:
|
|
43
|
+
inset 0 0 0 1px rgba(var(--v-theme-primary), 0.3),
|
|
34
44
|
0 1px 2px rgba(var(--v-theme-primary), 0.08),
|
|
35
45
|
0 4px 12px rgba(var(--v-theme-primary), 0.06);
|
|
36
46
|
}
|
package/src/themes/atlas.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { VuetiwatchAccent, VuetiwatchDefaults } from '../types.js'
|
|
2
|
-
import { bars, controls, fields, icons, tables } from '../util/defaults.js'
|
|
2
|
+
import { bars, controls, fields, icons, overlays, ripple, tables } from '../util/defaults.js'
|
|
3
3
|
import { defineTheme } from '../util/defineTheme.js'
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -93,6 +93,42 @@ export const atlasVariables = {
|
|
|
93
93
|
'vw-pop-scale': '1.08',
|
|
94
94
|
'vw-pop-duration': '180ms',
|
|
95
95
|
'vw-theme-transition': '320ms',
|
|
96
|
+
/**
|
|
97
|
+
* Overlays move at the same speed as everything else, which Vuetify's
|
|
98
|
+
* own 300ms fade does not. A menu opened two hundred times a day is the
|
|
99
|
+
* one surface where the difference between 140ms and 300ms stops being
|
|
100
|
+
* taste and becomes lag; the exit is quicker still, because a panel on
|
|
101
|
+
* its way out is already answered and only has to get off the screen.
|
|
102
|
+
*/
|
|
103
|
+
'vw-overlay-duration': '140ms',
|
|
104
|
+
'vw-overlay-exit': '100ms',
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Keyboard focus, four times the hover it has to be told apart from.
|
|
108
|
+
* Vuetify's 0.12 against a 0.04 hover is a difference you have to look
|
|
109
|
+
* for, and the person driving an admin panel from the keyboard is the
|
|
110
|
+
* one who cannot afford to.
|
|
111
|
+
*/
|
|
112
|
+
'focus-opacity': 0.16,
|
|
113
|
+
/**
|
|
114
|
+
* The tonal fill under chips and alerts — this theme's whole status
|
|
115
|
+
* vocabulary, and it carries it at `size="small"` and `density="compact"`
|
|
116
|
+
* where Vuetify's 0.12 thins out to nearly nothing.
|
|
117
|
+
*/
|
|
118
|
+
'activated-opacity': 0.14,
|
|
119
|
+
/**
|
|
120
|
+
* A form here disables half its fields depending on the other half, so
|
|
121
|
+
* "off" has to stay readable rather than dissolve. Vuetify's 0.38 puts a
|
|
122
|
+
* label under 3:1 on this ground; 0.45 keeps it legible and still
|
|
123
|
+
* unmistakably inactive.
|
|
124
|
+
*/
|
|
125
|
+
'disabled-opacity': 0.45,
|
|
126
|
+
/**
|
|
127
|
+
* A table waiting on its data is an everyday sight here, not an edge
|
|
128
|
+
* case. Vuetify derives the block from `border-opacity`, which at 0.22
|
|
129
|
+
* draws a row of grey slabs heavier than the data they stand in for.
|
|
130
|
+
*/
|
|
131
|
+
'vw-skeleton-opacity': '0.09',
|
|
96
132
|
} as const
|
|
97
133
|
|
|
98
134
|
/** Component defaults. Identical across the family. */
|
|
@@ -122,7 +158,36 @@ export const atlasDefaults: VuetiwatchDefaults[] = [
|
|
|
122
158
|
* each button floating on its own elevation.
|
|
123
159
|
*/
|
|
124
160
|
VBtnToggle: { variant: 'outlined', divided: true, density: 'compact' },
|
|
161
|
+
// Flush stacked rows rather than floating panels with gaps: a settings
|
|
162
|
+
// page is a list of settings, not a deck of cards.
|
|
163
|
+
VExpansionPanels: { variant: 'accordion' },
|
|
164
|
+
/**
|
|
165
|
+
* Half the controls on a console are icon-only, so a tooltip fires
|
|
166
|
+
* every time the cursor crosses the toolbar on its way somewhere else.
|
|
167
|
+
* A short wait means the tip appears when it was wanted and stays out
|
|
168
|
+
* of the way when it was not.
|
|
169
|
+
*/
|
|
170
|
+
VTooltip: { openDelay: 400 },
|
|
125
171
|
},
|
|
172
|
+
/**
|
|
173
|
+
* Nothing travels. A dropdown you open all day should not slide into
|
|
174
|
+
* place before it can be read, a dialog holds a form you start filling
|
|
175
|
+
* the moment it lands, and a tooltip that scales is a word changing size
|
|
176
|
+
* while you read it. Fading is the only motion here that does not ask to
|
|
177
|
+
* be waited out — and at 140ms it is barely motion at all.
|
|
178
|
+
*/
|
|
179
|
+
overlays({
|
|
180
|
+
dialog: 'fade-transition',
|
|
181
|
+
menu: 'fade-transition',
|
|
182
|
+
tooltip: 'fade-transition',
|
|
183
|
+
}),
|
|
184
|
+
/**
|
|
185
|
+
* No ripple. It is an animation about the weight of a surface, and this
|
|
186
|
+
* theme draws none — but the real cost is that it puts 300ms of spreading
|
|
187
|
+
* ink between a click and the look of an answer, on the screen where that
|
|
188
|
+
* click gets repeated all day.
|
|
189
|
+
*/
|
|
190
|
+
ripple(false),
|
|
126
191
|
// Compact throughout: an admin screen is a working surface, and a field
|
|
127
192
|
// at Vuetify's default height is a third taller than the row it sits in.
|
|
128
193
|
fields({ variant: 'outlined', density: 'compact' }),
|
|
@@ -204,6 +269,16 @@ export const atlas = defineTheme({
|
|
|
204
269
|
'shadow-color': '#0B101C',
|
|
205
270
|
'vw-overlay-border': '1px solid rgba(var(--v-border-color), 0.1)',
|
|
206
271
|
'vw-overlay-shadow': '0 8px 28px rgba(var(--v-shadow-color), 0.1)',
|
|
272
|
+
/**
|
|
273
|
+
* Ids, tokens and shortcuts are what an admin panel is full of, and
|
|
274
|
+
* Vuetify draws both on a grey that belongs to no theme. They take
|
|
275
|
+
* the same tinted band the table headers and filled rows use, so a
|
|
276
|
+
* key cap reads as part of the panel rather than pasted onto it.
|
|
277
|
+
*/
|
|
278
|
+
'theme-code': '#F5F8FD',
|
|
279
|
+
'theme-on-code': '#0B101C',
|
|
280
|
+
'theme-kbd': '#F5F8FD',
|
|
281
|
+
'theme-on-kbd': '#0B101C',
|
|
207
282
|
...atlasVariables,
|
|
208
283
|
},
|
|
209
284
|
},
|
package/src/themes/atlasDark.ts
CHANGED
|
@@ -57,6 +57,11 @@ export const atlasDark = defineTheme({
|
|
|
57
57
|
'shadow-color': '#000000',
|
|
58
58
|
'vw-overlay-border': '1px solid rgba(var(--v-border-color), 0.16)',
|
|
59
59
|
'vw-overlay-shadow': '0 12px 32px rgba(0, 0, 0, 0.5)',
|
|
60
|
+
// The same tinted band as the light variant, in this ground's register.
|
|
61
|
+
'theme-code': '#151E35',
|
|
62
|
+
'theme-on-code': '#EEF2F9',
|
|
63
|
+
'theme-kbd': '#151E35',
|
|
64
|
+
'theme-on-kbd': '#EEF2F9',
|
|
60
65
|
...atlasVariables,
|
|
61
66
|
},
|
|
62
67
|
},
|
package/src/themes/atlasSepia.ts
CHANGED
|
@@ -53,6 +53,11 @@ export const atlasSepia = defineTheme({
|
|
|
53
53
|
'shadow-color': '#3B332A',
|
|
54
54
|
'vw-overlay-border': '1px solid rgba(var(--v-border-color), 0.12)',
|
|
55
55
|
'vw-overlay-shadow': '0 8px 28px rgba(var(--v-shadow-color), 0.14)',
|
|
56
|
+
// The same tinted band as the light variant, in the warm register.
|
|
57
|
+
'theme-code': '#F4EEE3',
|
|
58
|
+
'theme-on-code': '#241E16',
|
|
59
|
+
'theme-kbd': '#F4EEE3',
|
|
60
|
+
'theme-on-kbd': '#241E16',
|
|
56
61
|
...atlasVariables,
|
|
57
62
|
},
|
|
58
63
|
},
|
package/src/themes/aurora.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bars, fields, icons } from '../util/defaults.js'
|
|
1
|
+
import { bars, fields, icons, overlays } from '../util/defaults.js'
|
|
2
2
|
import { defineTheme } from '../util/defineTheme.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -86,6 +86,19 @@ export const aurora = defineTheme({
|
|
|
86
86
|
'vw-pop-duration': '300ms',
|
|
87
87
|
'vw-theme-transition': '560ms',
|
|
88
88
|
|
|
89
|
+
// The showcase theme, so the overlays show off too.
|
|
90
|
+
'vw-overlay-duration': '300ms',
|
|
91
|
+
'vw-overlay-exit': '200ms',
|
|
92
|
+
// Saturated ground, saturated states.
|
|
93
|
+
'focus-opacity': 0.18,
|
|
94
|
+
'activated-opacity': 0.16,
|
|
95
|
+
/**
|
|
96
|
+
* Vuetify tints a raised surface with plain white on a dark ground.
|
|
97
|
+
* Here the light in the room is violet, so the tint that stands for
|
|
98
|
+
* height is the theme's own hue rather than a neutral.
|
|
99
|
+
*/
|
|
100
|
+
'elevation-overlay-color': '#7C5CFF',
|
|
101
|
+
|
|
89
102
|
// The line is the theme's own gradient, top to bottom.
|
|
90
103
|
'vw-timeline-line': 'var(--v-vw-gradient)',
|
|
91
104
|
'vw-timeline-line-width': '2px',
|
|
@@ -110,5 +123,12 @@ export const aurora = defineTheme({
|
|
|
110
123
|
ratingFull: 'mdi-star',
|
|
111
124
|
ratingEmpty: 'mdi-star-outline',
|
|
112
125
|
}),
|
|
126
|
+
// Everything swells into place, at the length the rest of the theme
|
|
127
|
+
// moves on.
|
|
128
|
+
overlays({
|
|
129
|
+
dialog: 'scale-transition',
|
|
130
|
+
menu: 'scale-transition',
|
|
131
|
+
tooltip: 'scale-transition',
|
|
132
|
+
}),
|
|
113
133
|
],
|
|
114
134
|
})
|