@fest-lib/veela 0.1.1
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/LICENSE +21 -0
- package/README.md +533 -0
- package/dist/veela.js +878 -0
- package/package.json +83 -0
- package/src/scss/_layers.scss +16 -0
- package/src/scss/advanced/_index.scss +0 -0
- package/src/scss/advanced/animation/_motion.scss +317 -0
- package/src/scss/advanced/color/_color.scss +328 -0
- package/src/scss/advanced/color/_colorize.scss +325 -0
- package/src/scss/advanced/design/_design-tokens.scss +118 -0
- package/src/scss/advanced/design/_effects.scss +275 -0
- package/src/scss/advanced/design/_shadow.scss +359 -0
- package/src/scss/advanced/design/_surfaces.scss +76 -0
- package/src/scss/advanced/effects/_animations.scss +124 -0
- package/src/scss/advanced/effects/_shadows.scss +50 -0
- package/src/scss/advanced/font/_typography.scss +600 -0
- package/src/scss/advanced/index.scss +11 -0
- package/src/scss/advanced/index.ts +35 -0
- package/src/scss/advanced/layout/_content.scss +170 -0
- package/src/scss/advanced/layout/_index.scss +5 -0
- package/src/scss/advanced/layout/_normalize.scss +541 -0
- package/src/scss/advanced/layout/_shared-overlays.scss +162 -0
- package/src/scss/advanced/md3/_md3.scss +596 -0
- package/src/scss/advanced/md3/_utils.scss +114 -0
- package/src/scss/advanced/misc/_config.scss +119 -0
- package/src/scss/advanced/misc/_initials.scss +298 -0
- package/src/scss/advanced/misc/_mixins.scss +179 -0
- package/src/scss/advanced/misc/_queries.scss +34 -0
- package/src/scss/advanced/misc/_rendering.scss +82 -0
- package/src/scss/advanced/misc/_tokens.scss +74 -0
- package/src/scss/advanced/theme/_shared.scss +232 -0
- package/src/scss/advanced/theme/_states.scss +332 -0
- package/src/scss/advanced/theme/_variants.scss +354 -0
- package/src/scss/advanced/tokens/_material-color.scss +120 -0
- package/src/scss/advanced/tokens/_variables.scss +171 -0
- package/src/scss/basic/_layers.scss +0 -0
- package/src/scss/basic/design/_index.scss +3 -0
- package/src/scss/basic/design/_keyframes.scss +163 -0
- package/src/scss/basic/design/_shapes.scss +266 -0
- package/src/scss/basic/design/_wavy-runtime.scss +50 -0
- package/src/scss/basic/index.scss +19 -0
- package/src/scss/basic/index.ts +29 -0
- package/src/scss/basic/misc/_core-layout.scss +272 -0
- package/src/scss/basic/misc/_index.scss +18 -0
- package/src/scss/basic/misc/_layout.scss +1040 -0
- package/src/scss/basic/misc/_mixins.scss +179 -0
- package/src/scss/basic/misc/_motion.scss +28 -0
- package/src/scss/basic/misc/_normalize.scss +765 -0
- package/src/scss/basic/misc/_queries.scss +34 -0
- package/src/scss/basic/misc/_shared.scss +232 -0
- package/src/scss/basic/misc/_states.scss +135 -0
- package/src/scss/basic/misc/_tokens.scss +78 -0
- package/src/scss/basic/misc/_veela.scss +12 -0
- package/src/scss/core/index.scss +1 -0
- package/src/scss/core/interact/_draggable.scss +32 -0
- package/src/scss/core/interact/_position.scss +45 -0
- package/src/scss/core/interact/_ps-anchor.scss +28 -0
- package/src/scss/core/interact/_ps-centered.scss +28 -0
- package/src/scss/core/interact/_ps-cursor.scss +18 -0
- package/src/scss/core/interact/_ps-draggable.scss +25 -0
- package/src/scss/core/interact/_ps-mechanic.scss +0 -0
- package/src/scss/core/interact/_ps-properties.scss +54 -0
- package/src/scss/core/interact/_ps-resizable.scss +61 -0
- package/src/scss/core/interact/_resizable.scss +69 -0
- package/src/scss/core/interact/_viewport.scss +469 -0
- package/src/scss/core/misc/_color-properties.scss +64 -0
- package/src/scss/core/misc/_config.scss +110 -0
- package/src/scss/core/misc/_functions.scss +530 -0
- package/src/scss/core/misc/_icons.scss +109 -0
- package/src/scss/core/misc/_index.scss +6 -0
- package/src/scss/core/misc/_layout.scss +49 -0
- package/src/scss/core/misc/_mixins.scss +744 -0
- package/src/scss/core/misc/_properties.scss +245 -0
- package/src/scss/core/misc/_tokens.scss +947 -0
- package/src/scss/core/misc/_utilities.scss +941 -0
- package/src/scss/core/misc/_utils.scss +17 -0
- package/src/scss/index.scss +18 -0
- package/src/scss/index.ts +105 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Shared mixins to unify common property blocks
|
|
2
|
+
// Do not @use "veela-lib" here: this file is part of veela-lib (via @forward) and that would create a Sass module loop.
|
|
3
|
+
@use "sass:map";
|
|
4
|
+
@use "sass:meta";
|
|
5
|
+
@use "./tokens" as t;
|
|
6
|
+
|
|
7
|
+
// Layout stacks
|
|
8
|
+
@mixin stack($gap, $display: grid) {
|
|
9
|
+
display: $display;
|
|
10
|
+
gap: $gap;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@mixin hstack($gap) { @include stack($gap, inline-flex); }
|
|
14
|
+
@mixin vstack($gap) { @include stack($gap, grid); }
|
|
15
|
+
|
|
16
|
+
// Container helpers
|
|
17
|
+
@mixin container-inline { container-type: inline-size; }
|
|
18
|
+
@mixin container-size { container-type: size; contain: content; }
|
|
19
|
+
|
|
20
|
+
// Typography helpers based on MD3 tokens
|
|
21
|
+
@mixin text-heading($token: "title-large", $align: null) {
|
|
22
|
+
@if meta.mixin-exists("md3-typography") {
|
|
23
|
+
@include md3-typography($token);
|
|
24
|
+
}
|
|
25
|
+
font-family: t.$font-family-base;
|
|
26
|
+
@if $align != null { text-align: $align; }
|
|
27
|
+
|
|
28
|
+
&:where(:-webkit-autofill, :autofill, :-webkit-autofill:hover, :-webkit-autofill:focus, :-webkit-autofill:active) {
|
|
29
|
+
font-family: t.$font-family-base;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@mixin text-body($token: "body-medium") {
|
|
34
|
+
@if meta.mixin-exists("md3-typography") {
|
|
35
|
+
@include md3-typography($token);
|
|
36
|
+
}
|
|
37
|
+
font-family: t.$font-family-base;
|
|
38
|
+
|
|
39
|
+
&:where(:-webkit-autofill, :autofill, :-webkit-autofill:hover, :-webkit-autofill:focus, :-webkit-autofill:active) {
|
|
40
|
+
font-family: t.$font-family-base;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@mixin text-label($token: "label-large", $uppercase: false) {
|
|
45
|
+
@if meta.mixin-exists("md3-typography") {
|
|
46
|
+
@include md3-typography($token);
|
|
47
|
+
}
|
|
48
|
+
font-family: t.$font-family-base;
|
|
49
|
+
@if $uppercase { text-transform: uppercase; }
|
|
50
|
+
|
|
51
|
+
&:where(:-webkit-autofill, :autofill, :-webkit-autofill:hover, :-webkit-autofill:focus, :-webkit-autofill:active) {
|
|
52
|
+
font-family: t.$font-family-base;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@mixin font-nums-tabular { font-variant-numeric: tabular-nums; }
|
|
57
|
+
|
|
58
|
+
// Tonal surfaces & elevation helpers
|
|
59
|
+
@mixin tonal-surface(
|
|
60
|
+
$role: surface,
|
|
61
|
+
$tone: var(--surface-opacity-default),
|
|
62
|
+
$radius: null,
|
|
63
|
+
$padding: null,
|
|
64
|
+
$elevation: null,
|
|
65
|
+
$border: false
|
|
66
|
+
) {
|
|
67
|
+
@if meta.mixin-exists("solid-colorize") {
|
|
68
|
+
@include solid-colorize("&", ("shade": $tone, "role": $role, "scope": "selector"));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@if $radius != null { border-radius: $radius; }
|
|
72
|
+
@if $padding != null { padding: $padding; }
|
|
73
|
+
@if $elevation != null {
|
|
74
|
+
--md3-elevation-level: #{$elevation};
|
|
75
|
+
}
|
|
76
|
+
@if $border {
|
|
77
|
+
border: 0.5px solid color-mix(in oklch, var(--md3-outline) 42%, transparent);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@mixin interactive-surface(
|
|
82
|
+
$role: surface,
|
|
83
|
+
$tone: var(--surface-opacity-default),
|
|
84
|
+
$state: hover,
|
|
85
|
+
$selector: "&::after"
|
|
86
|
+
) {
|
|
87
|
+
@include tonal-surface($role, $tone);
|
|
88
|
+
@if meta.mixin-exists("md3-state-layer") {
|
|
89
|
+
@include md3-state-layer($role, $state, $selector);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@mixin card-surface(
|
|
94
|
+
$role: surface-container,
|
|
95
|
+
$tone: var(--surface-opacity-subtle),
|
|
96
|
+
$radius: var(--radius-lg),
|
|
97
|
+
$padding: var(--padding-lg),
|
|
98
|
+
$elevation: 2
|
|
99
|
+
) {
|
|
100
|
+
@include tonal-surface($role, $tone, $radius, $padding, $elevation, true);
|
|
101
|
+
backdrop-filter: blur(10px) saturate(115%);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Structured blocks
|
|
105
|
+
@mixin section-stack($gap: var(--gap-sm)) {
|
|
106
|
+
display: grid;
|
|
107
|
+
gap: $gap;
|
|
108
|
+
inline-size: stretch;
|
|
109
|
+
min-inline-size: 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@mixin inline-toolbar($gap: var(--gap-sm)) {
|
|
113
|
+
display: inline-flex;
|
|
114
|
+
align-items: center;
|
|
115
|
+
gap: $gap;
|
|
116
|
+
flex-wrap: wrap;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Input helpers
|
|
120
|
+
@mixin input-padding-trailing($logical-size) {
|
|
121
|
+
padding-inline-end: calc(#{$logical-size} * 2);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@mixin field-stack($gap: var(--gap-xs)) {
|
|
125
|
+
display: grid;
|
|
126
|
+
gap: $gap;
|
|
127
|
+
inline-size: stretch;
|
|
128
|
+
min-inline-size: 0;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// List helpers
|
|
132
|
+
@mixin tonal-list(
|
|
133
|
+
$role: surface,
|
|
134
|
+
$tone: var(--surface-opacity-subtle),
|
|
135
|
+
$radius: var(--radius-sm),
|
|
136
|
+
$padding: var(--padding-xs)
|
|
137
|
+
) {
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-direction: column;
|
|
140
|
+
gap: 0;
|
|
141
|
+
list-style: none;
|
|
142
|
+
margin: 0;
|
|
143
|
+
padding: $padding;
|
|
144
|
+
@include tonal-surface($role, $tone, $radius);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// State blocks (flex row with gaps and radius)
|
|
148
|
+
@mixin state-inline($gap, $padding-y, $padding-x, $radius) {
|
|
149
|
+
display: flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
gap: $gap;
|
|
152
|
+
padding-block: $padding-y;
|
|
153
|
+
padding-inline: $padding-x;
|
|
154
|
+
border-radius: $radius;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Scrollbar styling (modern and webkit)
|
|
158
|
+
@mixin scrollbars($size: 6px, $tone: var(--surface-opacity-emphasis)) {
|
|
159
|
+
scrollbar-width: thin;
|
|
160
|
+
& { scrollbar-color: color-mix(in oklch, var(--on-surface, currentColor) var(--scrollbar-tint, 86%), transparent) transparent; }
|
|
161
|
+
|
|
162
|
+
&::-webkit-scrollbar { inline-size: $size; block-size: $size; }
|
|
163
|
+
&::-webkit-scrollbar-thumb {
|
|
164
|
+
border-radius: 999px;
|
|
165
|
+
@include solid-colorize("&", ("shade": $tone, "scope": "selector"));
|
|
166
|
+
}
|
|
167
|
+
&::-webkit-scrollbar-track { background: transparent; }
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Overlay + elevation utilities
|
|
171
|
+
@mixin glass-backdrop($blur: 18px, $opacity: 0.22) {
|
|
172
|
+
background: color-mix(in oklch, var(--color-inverse-surface) #{$opacity * 100%}, transparent);
|
|
173
|
+
backdrop-filter: blur($blur) saturate(120%);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Accessibility helpers
|
|
177
|
+
@mixin reduced-motion-zero { transition-duration: 0ms; }
|
|
178
|
+
@mixin high-contrast-border($color: var(--border-color)) { border: 2px solid $color; }
|
|
179
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Motion/transition mixins - veela-independent fallbacks
|
|
2
|
+
|
|
3
|
+
@mixin transition($properties, $duration: 0.15s, $timing: ease) {
|
|
4
|
+
$transitions: ();
|
|
5
|
+
@each $prop in $properties {
|
|
6
|
+
$transitions: append($transitions, #{$prop} #{$duration} #{$timing}, comma);
|
|
7
|
+
}
|
|
8
|
+
transition: $transitions;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@mixin no-transition {
|
|
12
|
+
transition: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@mixin reduced-motion-disable {
|
|
16
|
+
@media (prefers-reduced-motion: reduce) {
|
|
17
|
+
transition: none;
|
|
18
|
+
animation: none;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@mixin animate($name, $duration: 0.3s, $timing: ease, $fill: forwards) {
|
|
23
|
+
animation: $name $duration $timing $fill;
|
|
24
|
+
|
|
25
|
+
@media (prefers-reduced-motion: reduce) {
|
|
26
|
+
animation: none;
|
|
27
|
+
}
|
|
28
|
+
}
|