@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,34 @@
|
|
|
1
|
+
// Query utilities: container and media helpers with shared breakpoints
|
|
2
|
+
|
|
3
|
+
$breakpoints: (
|
|
4
|
+
"sm": 480px,
|
|
5
|
+
"md": 640px,
|
|
6
|
+
"lg": 768px,
|
|
7
|
+
"xl": 1024px,
|
|
8
|
+
"2xl": 1280px
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
@mixin mq($cond) {
|
|
12
|
+
@media #{$cond} { @content; }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@mixin mq-up($key) {
|
|
16
|
+
$val: map-get($breakpoints, $key);
|
|
17
|
+
@media (min-width: $val) { @content; }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@mixin mq-down($key) {
|
|
21
|
+
$val: map-get($breakpoints, $key);
|
|
22
|
+
@media (max-width: $val) { @content; }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@mixin cq($cond) {
|
|
26
|
+
@container #{$cond} { @content; }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@mixin cq-size($min: null, $max: null) {
|
|
30
|
+
$parts: ();
|
|
31
|
+
@if $min != null { $parts: append($parts, '(min-inline-size: ' + $min + ')'); }
|
|
32
|
+
@if $max != null { $parts: append($parts, '(max-inline-size: ' + $max + ')'); }
|
|
33
|
+
@container #{join($parts, ' and ')} { @content; }
|
|
34
|
+
}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Veela CSS - Core Shared Utilities
|
|
3
|
+
*
|
|
4
|
+
* Reusable mixins, placeholders, and common patterns for core layout styles.
|
|
5
|
+
* Reduces duplication across normalize, states, layout, and gridbox modules.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/* ========================================================================
|
|
9
|
+
Meta-level: Placeholders for zero-specificity selector groups
|
|
10
|
+
======================================================================== */
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Reset border and outline styles (transparent, none, 0px)
|
|
14
|
+
* Use: @extend %reset-borders; or include in selectors
|
|
15
|
+
*/
|
|
16
|
+
%reset-borders {
|
|
17
|
+
border: none 0px transparent;
|
|
18
|
+
outline: none 0px transparent;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Disable user interaction (pointer-events, touch-action, user-select)
|
|
23
|
+
* Use: @extend %disable-interaction;
|
|
24
|
+
*/
|
|
25
|
+
%disable-interaction {
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
touch-action: none;
|
|
28
|
+
user-select: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Lock interaction (pointer-events: none + touch + select disabled)
|
|
33
|
+
* Stronger version with explicit !important for state overrides
|
|
34
|
+
*/
|
|
35
|
+
%lock-interaction {
|
|
36
|
+
pointer-events: none !important;
|
|
37
|
+
touch-action: none !important;
|
|
38
|
+
user-select: none !important;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Basic box-model reset: margin, padding, box-sizing
|
|
43
|
+
*/
|
|
44
|
+
%reset-box-model {
|
|
45
|
+
margin: 0;
|
|
46
|
+
padding: 0;
|
|
47
|
+
box-sizing: border-box;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* ========================================================================
|
|
51
|
+
Mixins: Common property/style groups
|
|
52
|
+
======================================================================== */
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Reset box model (margin, padding, sizing)
|
|
56
|
+
* @usage: @include reset-box-model();
|
|
57
|
+
*/
|
|
58
|
+
@mixin reset-box-model {
|
|
59
|
+
/*margin: 0;
|
|
60
|
+
padding: 0;*/
|
|
61
|
+
box-sizing: border-box;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Reset borders and outlines
|
|
66
|
+
* @usage: @include reset-borders();
|
|
67
|
+
*/
|
|
68
|
+
@mixin reset-borders {
|
|
69
|
+
border: none 0px transparent;
|
|
70
|
+
outline: none 0px transparent;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Disable interaction via pointer-events, touch-action, user-select
|
|
75
|
+
* @param $importance [false] - if true, use !important
|
|
76
|
+
* @usage: @include disable-interaction(); or @include disable-interaction(true);
|
|
77
|
+
*/
|
|
78
|
+
@mixin disable-interaction($importance: false) {
|
|
79
|
+
$imp: if(sass($importance): !important; else: null);
|
|
80
|
+
pointer-events: none if(sass($imp != null): #{$imp}; else: null);
|
|
81
|
+
touch-action: none if(sass($imp != null): #{$imp}; else: null);
|
|
82
|
+
user-select: none if(sass($imp != null): #{$imp}; else: null);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Reset form element appearance (font, line-height, margin, text-transform)
|
|
87
|
+
* @usage: @include reset-form-appearance();
|
|
88
|
+
*/
|
|
89
|
+
@mixin reset-form-appearance {
|
|
90
|
+
font: inherit;
|
|
91
|
+
color: inherit;
|
|
92
|
+
letter-spacing: inherit;
|
|
93
|
+
margin: 0;
|
|
94
|
+
border: none;
|
|
95
|
+
outline: none;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Scrollbar styling for webkit browsers
|
|
100
|
+
* @param $size [8px] - scrollbar width/height
|
|
101
|
+
* @param $color [var(--color-scrollbar, currentColor)] - thumb color
|
|
102
|
+
* @param $radius [var(--border-radius, 4px)] - thumb border-radius
|
|
103
|
+
* @usage: @include scrollbar-webkit(8px, var(--color-scrollbar));
|
|
104
|
+
*/
|
|
105
|
+
@mixin scrollbar-webkit($size: 8px, $color: var(--color-scrollbar, currentColor), $radius: var(--border-radius, 4px)) {
|
|
106
|
+
&::-webkit-scrollbar {
|
|
107
|
+
inline-size: $size;
|
|
108
|
+
block-size: $size;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&::-webkit-scrollbar-track {
|
|
112
|
+
background: transparent;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&::-webkit-scrollbar-thumb {
|
|
116
|
+
background-color: $color;
|
|
117
|
+
border-radius: $radius;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&::-webkit-scrollbar-thumb:hover {
|
|
121
|
+
background: var(--color-outline, #9ca3af);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Scrollbar styling (both webkit and Firefox)
|
|
127
|
+
* @param $color [var(--color-scrollbar, currentColor)] - scrollbar color
|
|
128
|
+
* @usage: @include scrollbar-styling(var(--color-scrollbar));
|
|
129
|
+
*/
|
|
130
|
+
@mixin scrollbar-styling($color: var(--color-scrollbar, currentColor)) {
|
|
131
|
+
scrollbar-width: thin;
|
|
132
|
+
scrollbar-color: $color transparent;
|
|
133
|
+
|
|
134
|
+
@include scrollbar-webkit(var(--scrollbar-size, 8px), $color);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Flex row layout with space-between and wrap
|
|
139
|
+
* Used for nav-like layouts
|
|
140
|
+
* @usage: @include flex-row-wrap();
|
|
141
|
+
*/
|
|
142
|
+
@mixin flex-row-wrap {
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: center;
|
|
145
|
+
justify-content: space-between;
|
|
146
|
+
flex-wrap: wrap;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Flex column centered (used for labels, stacked content)
|
|
151
|
+
* @usage: @include flex-column-center();
|
|
152
|
+
*/
|
|
153
|
+
@mixin flex-column-center {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
align-items: center;
|
|
157
|
+
justify-content: flex-start;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Stretch to viewport size (used for root/body containers)
|
|
162
|
+
* Combines inline-size, block-size with min/max constraints
|
|
163
|
+
* @usage: @include stretch-viewport();
|
|
164
|
+
*/
|
|
165
|
+
@mixin stretch-viewport {
|
|
166
|
+
inline-size: stretch;
|
|
167
|
+
block-size: stretch;
|
|
168
|
+
min-inline-size: 0px;
|
|
169
|
+
min-block-size: 0px;
|
|
170
|
+
max-inline-size: min(100%, min(100cqi, 100dvi));
|
|
171
|
+
max-block-size: min(100%, min(100cqb, 100dvb));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Hidden state: display none + pointer/touch disabled
|
|
176
|
+
* @param $opacity [false] - if true, also apply opacity: 0
|
|
177
|
+
* @usage: @include hidden-state(); or @include hidden-state(true);
|
|
178
|
+
*/
|
|
179
|
+
@mixin hidden-state($opacity: false) {
|
|
180
|
+
display: none !important;
|
|
181
|
+
pointer-events: none !important;
|
|
182
|
+
touch-action: none !important;
|
|
183
|
+
@if $opacity {
|
|
184
|
+
opacity: 0;
|
|
185
|
+
visibility: collapse;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Prevent dragging of element
|
|
191
|
+
* @usage: @include no-drag();
|
|
192
|
+
*/
|
|
193
|
+
@mixin no-drag {
|
|
194
|
+
-webkit-user-drag: none;
|
|
195
|
+
-moz-user-drag: none;
|
|
196
|
+
user-select: none;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Focus ring without outline (M3-style)
|
|
201
|
+
* @param $color [var(--color-primary, #0066cc)] - focus color
|
|
202
|
+
* @param $radius [var(--radius-sm, 8px)] - border radius
|
|
203
|
+
* @usage: @include focus-ring(var(--color-primary));
|
|
204
|
+
*/
|
|
205
|
+
@mixin focus-ring($color: var(--color-primary, #0066cc), $radius: var(--radius-sm, 8px)) {
|
|
206
|
+
outline: none;
|
|
207
|
+
box-shadow: 0 0 0 3px color-mix(in oklab, $color 35%, transparent);
|
|
208
|
+
border-radius: $radius;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Media element sizing (img, video, canvas, svg)
|
|
213
|
+
* @usage: @include media-sizing();
|
|
214
|
+
*/
|
|
215
|
+
@mixin media-sizing {
|
|
216
|
+
display: block;
|
|
217
|
+
max-inline-size: 100%;
|
|
218
|
+
block-size: auto;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Code element font and sizing
|
|
223
|
+
* @param $font [var(--font-family-mono, 'SF Mono', 'Monaco', 'Roboto Mono', monospace)] - monospace font
|
|
224
|
+
* @usage: @include code-styling();
|
|
225
|
+
*/
|
|
226
|
+
@mixin code-styling($font: var(--font-family-mono, 'SF Mono', 'Monaco', 'Roboto Mono', monospace)) {
|
|
227
|
+
font-family: $font;
|
|
228
|
+
background-color: var(--bgColor-muted);
|
|
229
|
+
border-radius: 0.3em;
|
|
230
|
+
padding: 0.2em 0.4em;
|
|
231
|
+
font-size: 85%;
|
|
232
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
@use "./shared" as *;
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
@layer ux-existence {
|
|
5
|
+
//
|
|
6
|
+
*[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
|
|
7
|
+
&, * {
|
|
8
|
+
display: none !important;
|
|
9
|
+
pointer-events: none !important;
|
|
10
|
+
touch-action: none !important;
|
|
11
|
+
content-visibility: auto !important;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//
|
|
16
|
+
:host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
|
|
17
|
+
&, *, ::slotted(*) {
|
|
18
|
+
display: none !important;
|
|
19
|
+
pointer-events: none !important;
|
|
20
|
+
touch-action: none !important;
|
|
21
|
+
content-visibility: auto !important;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//
|
|
26
|
+
:host([data-hidden]:not([data-hidden="false"])) {
|
|
27
|
+
&, *, ::slotted(*) {
|
|
28
|
+
pointer-events: none !important;
|
|
29
|
+
touch-action: none !important;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//
|
|
34
|
+
*[data-hidden]:not([data-hidden="false"]) {
|
|
35
|
+
&, * {
|
|
36
|
+
pointer-events: none !important;
|
|
37
|
+
touch-action: none !important;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//
|
|
42
|
+
*[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
|
|
43
|
+
&, * {
|
|
44
|
+
@include hidden-state(true);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//
|
|
49
|
+
:host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
|
|
50
|
+
&, *, ::slotted(*) {
|
|
51
|
+
@include hidden-state(true);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//
|
|
56
|
+
:host([data-hidden]:not([data-hidden="false"])) {
|
|
57
|
+
&, *, ::slotted(*) {
|
|
58
|
+
@include disable-interaction(true);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//
|
|
63
|
+
*[data-hidden]:not([data-hidden="false"]) {
|
|
64
|
+
&, * {
|
|
65
|
+
@include disable-interaction(true);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//
|
|
70
|
+
*[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
|
|
71
|
+
&, * {
|
|
72
|
+
display: none !important;
|
|
73
|
+
pointer-events: none !important;
|
|
74
|
+
touch-action: none !important;
|
|
75
|
+
content-visibility: auto !important;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//
|
|
80
|
+
:host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
|
|
81
|
+
&, *, ::slotted(*) {
|
|
82
|
+
display: none !important;
|
|
83
|
+
pointer-events: none !important;
|
|
84
|
+
touch-action: none !important;
|
|
85
|
+
content-visibility: auto !important;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//
|
|
90
|
+
:host([data-hidden]:not([data-hidden="false"])) {
|
|
91
|
+
&, *, ::slotted(*) {
|
|
92
|
+
pointer-events: none !important;
|
|
93
|
+
touch-action: none !important;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//
|
|
98
|
+
*[data-hidden]:not([data-hidden="false"]) {
|
|
99
|
+
&, * {
|
|
100
|
+
pointer-events: none !important;
|
|
101
|
+
touch-action: none !important;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//
|
|
107
|
+
@layer ux-existence {
|
|
108
|
+
//
|
|
109
|
+
*[data-hidden]:not([data-hidden="false"]):not([data-opacity-animation]) {
|
|
110
|
+
&, * {
|
|
111
|
+
@include hidden-state(true);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//
|
|
116
|
+
:host([data-hidden]:not([data-hidden="false"]:not([data-opacity-animation]))) {
|
|
117
|
+
&, *, ::slotted(*) {
|
|
118
|
+
@include hidden-state(true);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//
|
|
123
|
+
:host([data-hidden]:not([data-hidden="false"])) {
|
|
124
|
+
&, *, ::slotted(*) {
|
|
125
|
+
@include disable-interaction(true);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//
|
|
130
|
+
*[data-hidden]:not([data-hidden="false"]) {
|
|
131
|
+
&, * {
|
|
132
|
+
@include disable-interaction(true);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Filename: _tokens.scss
|
|
3
|
+
* FullPath: modules/projects/veela.css/src/scss/basic/misc/_tokens.scss
|
|
4
|
+
* Change date and time: 12.30.00_06.08.2026
|
|
5
|
+
* Reason for changes: Document canonical SoT for color tokens.
|
|
6
|
+
*/
|
|
7
|
+
/*
|
|
8
|
+
* INVARIANT: Intentional per-bundle SCSS alias shim for the vl-basic bundle.
|
|
9
|
+
* Produces NO CSS output — only `$color-*` / `$space-*` / `$radius-*` / `$font-*` SCSS aliases.
|
|
10
|
+
* Canonical color-token source of truth: `core/misc/_tokens.scss` (full bundle).
|
|
11
|
+
* Do NOT `@forward` canonical here — would emit the full `@layer tokens` CSS into the
|
|
12
|
+
* lightweight vl-basic bundle and break its size semantics.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// Design tokens: SCSS aliases for CSS custom properties
|
|
16
|
+
// Keep aliases small and meaningful to encourage reuse
|
|
17
|
+
|
|
18
|
+
$space-2xs: var(--space-2xs);
|
|
19
|
+
$space-xs: var(--space-xs);
|
|
20
|
+
$space-sm: var(--space-sm);
|
|
21
|
+
$space-md: var(--space-md);
|
|
22
|
+
$space-lg: var(--space-lg);
|
|
23
|
+
$space-xl: var(--space-xl);
|
|
24
|
+
$space-2xl: var(--space-2xl);
|
|
25
|
+
|
|
26
|
+
$radius-xs: var(--radius-xs);
|
|
27
|
+
$radius-sm: var(--radius-sm);
|
|
28
|
+
$radius-md: var(--radius-md);
|
|
29
|
+
$radius-lg: var(--radius-lg);
|
|
30
|
+
$radius-xl: var(--radius-xl);
|
|
31
|
+
$radius-full: var(--radius-full);
|
|
32
|
+
|
|
33
|
+
$font-xs: var(--font-xs);
|
|
34
|
+
$font-sm: var(--font-sm);
|
|
35
|
+
$font-base: var(--font-base);
|
|
36
|
+
$font-md: var(--font-md);
|
|
37
|
+
$font-lg: var(--font-lg);
|
|
38
|
+
$font-xl: var(--font-xl);
|
|
39
|
+
$font-2xl: var(--font-2xl);
|
|
40
|
+
|
|
41
|
+
$font-weight-normal: var(--font-weight-normal);
|
|
42
|
+
$font-weight-medium: var(--font-weight-medium);
|
|
43
|
+
$font-weight-semibold: var(--font-weight-semibold);
|
|
44
|
+
$font-weight-bold: var(--font-weight-bold);
|
|
45
|
+
$font-weight-extrabold: var(--font-weight-extrabold);
|
|
46
|
+
|
|
47
|
+
$font-family-base: var(--font-family-base);
|
|
48
|
+
$font-family-mono: var(--font-family-mono);
|
|
49
|
+
|
|
50
|
+
$color-primary: var(--md3-primary);
|
|
51
|
+
$color-primary-container: var(--md3-primary-container);
|
|
52
|
+
$color-secondary: var(--md3-secondary);
|
|
53
|
+
$color-tertiary: var(--md3-tertiary);
|
|
54
|
+
$color-surface: var(--md3-surface);
|
|
55
|
+
$color-surface-variant: var(--md3-surface-variant);
|
|
56
|
+
$color-surface-container: var(--md3-surface-container);
|
|
57
|
+
$color-outline: var(--md3-outline);
|
|
58
|
+
$color-outline-variant: var(--md3-outline-variant);
|
|
59
|
+
$color-error: var(--md3-error);
|
|
60
|
+
$color-inverse-surface: var(--md3-inverse-surface);
|
|
61
|
+
$color-inverse-on-surface: var(--md3-inverse-on-surface);
|
|
62
|
+
$color-scrim: var(--md3-scrim);
|
|
63
|
+
|
|
64
|
+
// Common color variables (compat layer for reducing --c2-* usage)
|
|
65
|
+
$on-surface: var(--on-surface, currentColor);
|
|
66
|
+
$text-secondary: var(--text-secondary, color-mix(in oklch, var(--on-surface, currentColor) 74%, transparent));
|
|
67
|
+
$border-color: var(--border-color, color-mix(in oklch, var(--on-surface, currentColor) 18%, transparent));
|
|
68
|
+
$backdrop: var(--backdrop, oklch(from black l c h / 0.22));
|
|
69
|
+
|
|
70
|
+
// Scrollbar
|
|
71
|
+
$scrollbar-opacity: var(--scrollbar-opacity, 0.56);
|
|
72
|
+
$scrollbar-tint: var(--scrollbar-tint, 86%);
|
|
73
|
+
|
|
74
|
+
// Stacking (use with lib/basic/_position.scss — overlays, modals)
|
|
75
|
+
$z-modal-backdrop: var(--z-modal-backdrop);
|
|
76
|
+
$z-modal: var(--z-modal);
|
|
77
|
+
|
|
78
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// FL.UI Lib - Veela integration
|
|
2
|
+
// This file provides full veela integration when available
|
|
3
|
+
//
|
|
4
|
+
// Usage: @use "fl-ui-lib" as m;
|
|
5
|
+
//
|
|
6
|
+
// Note: This requires veela.css to be installed and configured
|
|
7
|
+
|
|
8
|
+
// Import and forward veela-lib
|
|
9
|
+
@use "veela-lib" as *;
|
|
10
|
+
@forward "veela-lib";
|
|
11
|
+
|
|
12
|
+
// All veela mixins are now available through this facade
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@forward "misc/index.scss";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Draggable component mixins - veela-independent fallbacks
|
|
2
|
+
|
|
3
|
+
@mixin draggable-element {
|
|
4
|
+
cursor: grab;
|
|
5
|
+
user-select: none;
|
|
6
|
+
touch-action: none;
|
|
7
|
+
-webkit-user-drag: none;
|
|
8
|
+
|
|
9
|
+
&:active, &[data-dragging] {
|
|
10
|
+
cursor: grabbing;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@mixin drag-handle {
|
|
15
|
+
cursor: grab;
|
|
16
|
+
pointer-events: auto;
|
|
17
|
+
user-select: none;
|
|
18
|
+
|
|
19
|
+
&:active {
|
|
20
|
+
cursor: grabbing;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin dragging-state {
|
|
25
|
+
cursor: grabbing;
|
|
26
|
+
user-select: none;
|
|
27
|
+
|
|
28
|
+
* {
|
|
29
|
+
user-select: none;
|
|
30
|
+
pointer-events: none;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Position, inset & stacking-context helpers (veela-independent)
|
|
2
|
+
// Forwarded via lib/basic/_index.scss as part of the public veela-lib surface.
|
|
3
|
+
|
|
4
|
+
@mixin center-absolute {
|
|
5
|
+
position: absolute;
|
|
6
|
+
top: 50%;
|
|
7
|
+
left: 50%;
|
|
8
|
+
transform: translate(-50%, -50%);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@mixin absolute-fill {
|
|
12
|
+
position: absolute;
|
|
13
|
+
inset: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@mixin fixed-fill {
|
|
17
|
+
position: fixed;
|
|
18
|
+
inset: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@mixin position($type: "relative", $inset: null) {
|
|
22
|
+
position: #{$type};
|
|
23
|
+
|
|
24
|
+
@if $inset {
|
|
25
|
+
inset: $inset;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@mixin sticky($top: 0) {
|
|
30
|
+
position: sticky;
|
|
31
|
+
inset-block-start: $top;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/// Screen-reader only: visually hidden but still exposed to accessibility APIs
|
|
35
|
+
@mixin visually-hidden {
|
|
36
|
+
position: absolute;
|
|
37
|
+
inline-size: 1px;
|
|
38
|
+
block-size: 1px;
|
|
39
|
+
padding: 0;
|
|
40
|
+
margin: -1px;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
clip: rect(0, 0, 0, 0);
|
|
43
|
+
white-space: nowrap;
|
|
44
|
+
border: 0;
|
|
45
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@mixin ps-anchor {
|
|
2
|
+
// fallback
|
|
3
|
+
& {
|
|
4
|
+
inset-inline-start: max(var(--client-x, 0px), 0px);
|
|
5
|
+
inset-block-start: max(var(--client-y, 0px), 0px);
|
|
6
|
+
inset-inline-end: auto;
|
|
7
|
+
inset-block-end: auto;
|
|
8
|
+
|
|
9
|
+
direction: ltr;
|
|
10
|
+
writing-mode: horizontal-tb;
|
|
11
|
+
translate: 0% 0% 0%;
|
|
12
|
+
transform: none;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//
|
|
16
|
+
& {
|
|
17
|
+
--translate-x: round(nearest, min(0px, calc(100cqi - (100% + var(--client-x, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
|
|
18
|
+
--translate-y: round(nearest, min(0px, calc(100cqb - (100% + var(--client-y, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// from bottom side (without gap), by default
|
|
22
|
+
@supports(position-anchor: --example) {
|
|
23
|
+
position-anchor: var(--anchor-group);
|
|
24
|
+
inset-inline-start: anchor(var(--anchor-group) start);
|
|
25
|
+
inset-block-start: anchor(var(--anchor-group) end);
|
|
26
|
+
inline-size: anchor-size(var(--anchor-group) self-inline);
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
@mixin ps-centered {
|
|
2
|
+
& {
|
|
3
|
+
--shift-x: 50%;
|
|
4
|
+
--shift-y: 50%;
|
|
5
|
+
--drag-x: 0px;
|
|
6
|
+
--drag-y: 0px;
|
|
7
|
+
--translate-x: 0px;
|
|
8
|
+
--translate-y: 0px;
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
inset-inline-start: max(var(--shift-x), 0px);
|
|
12
|
+
inset-block-start: max(var(--shift-y), 0px);
|
|
13
|
+
inset-inline-end: auto;
|
|
14
|
+
inset-block-end: auto;
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
direction: ltr;
|
|
18
|
+
translate: 0% 0% 0%;
|
|
19
|
+
transform:
|
|
20
|
+
scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
|
|
21
|
+
translate3d(
|
|
22
|
+
round(nearest, -50%, calc(1px / var(--pixel-ratio, 1))),
|
|
23
|
+
round(nearest, -50%, calc(1px / var(--pixel-ratio, 1)))
|
|
24
|
+
, 0%);
|
|
25
|
+
transform-origin: 0% 0%;
|
|
26
|
+
writing-mode: horizontal-tb;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@mixin ps-cursor {
|
|
2
|
+
& {
|
|
3
|
+
--shift-x: var(--client-x, 0px);
|
|
4
|
+
--shift-y: var(--client-y, 0px);
|
|
5
|
+
--translate-x: round(nearest, min(0px, calc(100cqi - (100% + var(--shift-x, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
|
|
6
|
+
--translate-y: round(nearest, min(0px, calc(100cqb - (100% + var(--shift-y, 0px)))), calc(1px / var(--pixel-ratio, 1))) !important;
|
|
7
|
+
|
|
8
|
+
inset-inline-start: max(var(--shift-x), 0px);
|
|
9
|
+
inset-block-start: max(var(--shift-y), var(--status-bar-padding, 0px));
|
|
10
|
+
inset-inline-end: auto;
|
|
11
|
+
inset-block-end: auto;
|
|
12
|
+
|
|
13
|
+
direction: ltr;
|
|
14
|
+
translate: 0% 0% 0%;
|
|
15
|
+
writing-mode: horizontal-tb;
|
|
16
|
+
transform: none;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@mixin ps-draggable {
|
|
2
|
+
& {
|
|
3
|
+
--shift-x: 0px;
|
|
4
|
+
--shift-y: 0px;
|
|
5
|
+
--drag-x: 0px;
|
|
6
|
+
--drag-y: 0px;
|
|
7
|
+
--translate-x: var(--drag-x, 0px);
|
|
8
|
+
--translate-y: var(--drag-y, 0px);
|
|
9
|
+
|
|
10
|
+
inset-inline-start: var(--shift-x, 0px);
|
|
11
|
+
inset-block-start : var(--shift-y, 0px);
|
|
12
|
+
transform-origin : 0% 0%;
|
|
13
|
+
inset-inline-end : auto;
|
|
14
|
+
inset-block-end : auto;
|
|
15
|
+
touch-action: none;
|
|
16
|
+
writing-mode: horizontal-tb;
|
|
17
|
+
translate: 0% 0% 0%;
|
|
18
|
+
direction: ltr;
|
|
19
|
+
position: fixed;
|
|
20
|
+
|
|
21
|
+
transform:
|
|
22
|
+
scale3d(var(--scale, 1), var(--scale, 1), var(--scale, 1))
|
|
23
|
+
translate3d(var(--drag-x, 0px), var(--drag-y, 0px), 0px);
|
|
24
|
+
};
|
|
25
|
+
};
|
|
File without changes
|