@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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +533 -0
  3. package/dist/veela.js +878 -0
  4. package/package.json +83 -0
  5. package/src/scss/_layers.scss +16 -0
  6. package/src/scss/advanced/_index.scss +0 -0
  7. package/src/scss/advanced/animation/_motion.scss +317 -0
  8. package/src/scss/advanced/color/_color.scss +328 -0
  9. package/src/scss/advanced/color/_colorize.scss +325 -0
  10. package/src/scss/advanced/design/_design-tokens.scss +118 -0
  11. package/src/scss/advanced/design/_effects.scss +275 -0
  12. package/src/scss/advanced/design/_shadow.scss +359 -0
  13. package/src/scss/advanced/design/_surfaces.scss +76 -0
  14. package/src/scss/advanced/effects/_animations.scss +124 -0
  15. package/src/scss/advanced/effects/_shadows.scss +50 -0
  16. package/src/scss/advanced/font/_typography.scss +600 -0
  17. package/src/scss/advanced/index.scss +11 -0
  18. package/src/scss/advanced/index.ts +35 -0
  19. package/src/scss/advanced/layout/_content.scss +170 -0
  20. package/src/scss/advanced/layout/_index.scss +5 -0
  21. package/src/scss/advanced/layout/_normalize.scss +541 -0
  22. package/src/scss/advanced/layout/_shared-overlays.scss +162 -0
  23. package/src/scss/advanced/md3/_md3.scss +596 -0
  24. package/src/scss/advanced/md3/_utils.scss +114 -0
  25. package/src/scss/advanced/misc/_config.scss +119 -0
  26. package/src/scss/advanced/misc/_initials.scss +298 -0
  27. package/src/scss/advanced/misc/_mixins.scss +179 -0
  28. package/src/scss/advanced/misc/_queries.scss +34 -0
  29. package/src/scss/advanced/misc/_rendering.scss +82 -0
  30. package/src/scss/advanced/misc/_tokens.scss +74 -0
  31. package/src/scss/advanced/theme/_shared.scss +232 -0
  32. package/src/scss/advanced/theme/_states.scss +332 -0
  33. package/src/scss/advanced/theme/_variants.scss +354 -0
  34. package/src/scss/advanced/tokens/_material-color.scss +120 -0
  35. package/src/scss/advanced/tokens/_variables.scss +171 -0
  36. package/src/scss/basic/_layers.scss +0 -0
  37. package/src/scss/basic/design/_index.scss +3 -0
  38. package/src/scss/basic/design/_keyframes.scss +163 -0
  39. package/src/scss/basic/design/_shapes.scss +266 -0
  40. package/src/scss/basic/design/_wavy-runtime.scss +50 -0
  41. package/src/scss/basic/index.scss +19 -0
  42. package/src/scss/basic/index.ts +29 -0
  43. package/src/scss/basic/misc/_core-layout.scss +272 -0
  44. package/src/scss/basic/misc/_index.scss +18 -0
  45. package/src/scss/basic/misc/_layout.scss +1040 -0
  46. package/src/scss/basic/misc/_mixins.scss +179 -0
  47. package/src/scss/basic/misc/_motion.scss +28 -0
  48. package/src/scss/basic/misc/_normalize.scss +765 -0
  49. package/src/scss/basic/misc/_queries.scss +34 -0
  50. package/src/scss/basic/misc/_shared.scss +232 -0
  51. package/src/scss/basic/misc/_states.scss +135 -0
  52. package/src/scss/basic/misc/_tokens.scss +78 -0
  53. package/src/scss/basic/misc/_veela.scss +12 -0
  54. package/src/scss/core/index.scss +1 -0
  55. package/src/scss/core/interact/_draggable.scss +32 -0
  56. package/src/scss/core/interact/_position.scss +45 -0
  57. package/src/scss/core/interact/_ps-anchor.scss +28 -0
  58. package/src/scss/core/interact/_ps-centered.scss +28 -0
  59. package/src/scss/core/interact/_ps-cursor.scss +18 -0
  60. package/src/scss/core/interact/_ps-draggable.scss +25 -0
  61. package/src/scss/core/interact/_ps-mechanic.scss +0 -0
  62. package/src/scss/core/interact/_ps-properties.scss +54 -0
  63. package/src/scss/core/interact/_ps-resizable.scss +61 -0
  64. package/src/scss/core/interact/_resizable.scss +69 -0
  65. package/src/scss/core/interact/_viewport.scss +469 -0
  66. package/src/scss/core/misc/_color-properties.scss +64 -0
  67. package/src/scss/core/misc/_config.scss +110 -0
  68. package/src/scss/core/misc/_functions.scss +530 -0
  69. package/src/scss/core/misc/_icons.scss +109 -0
  70. package/src/scss/core/misc/_index.scss +6 -0
  71. package/src/scss/core/misc/_layout.scss +49 -0
  72. package/src/scss/core/misc/_mixins.scss +744 -0
  73. package/src/scss/core/misc/_properties.scss +245 -0
  74. package/src/scss/core/misc/_tokens.scss +947 -0
  75. package/src/scss/core/misc/_utilities.scss +941 -0
  76. package/src/scss/core/misc/_utils.scss +17 -0
  77. package/src/scss/index.scss +18 -0
  78. package/src/scss/index.ts +105 -0
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@fest-lib/veela",
3
+ "description": "Veela CSS framework and runtime loaders (fest-lib)",
4
+ "version": "0.1.1",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": true,
8
+ "engines": {
9
+ "node": ">=20"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/fest-live/veela.css.git"
17
+ },
18
+ "bugs": {
19
+ "url": "https://github.com/fest-live/veela.css/issues"
20
+ },
21
+ "homepage": "https://github.com/fest-live/veela.css#readme",
22
+ "keywords": [
23
+ "fest",
24
+ "fest-lib",
25
+ "css",
26
+ "scss",
27
+ "design-system"
28
+ ],
29
+ "files": [
30
+ "dist",
31
+ "src/scss",
32
+ "LICENSE"
33
+ ],
34
+ "main": "./dist/veela.js",
35
+ "module": "./dist/veela.js",
36
+ "exports": {
37
+ ".": {
38
+ "import": "./dist/veela.js",
39
+ "default": "./dist/veela.js"
40
+ },
41
+ "./scss/*": "./src/scss/*",
42
+ "./package.json": "./package.json"
43
+ },
44
+ "peerDependencies": {
45
+ "@fest-lib/core": "^0.1.0",
46
+ "@fest-lib/dom": "^0.1.0"
47
+ },
48
+ "scripts": {
49
+ "test": "npm run test:puppeteer",
50
+ "test:puppeteer": "node test/puppeteer/run.mjs",
51
+ "test:browser": "npm run demo",
52
+ "dev": "vite --host 0.0.0.0",
53
+ "demo": "vite",
54
+ "watch": "vite build --watch",
55
+ "build": "vite build --config vite.config.js && npm run docs && npm run docs:md",
56
+ "build:publish": "FEST_NPM_IMPORTS=1 vite build --config vite.config.js",
57
+ "prepack": "npm run build:publish",
58
+ "docs": "typedoc ./src/scss/index.ts --options ./typedoc.json --out ./docs --tsconfig ./tsconfig.json --excludeExternals --excludePrivate --excludeProtected --skipErrorChecking",
59
+ "docs:clean": "rm -rf ./docs && typedoc --options ./typedoc.json",
60
+ "docs:md": "typedoc --options ./typedoc.md.json",
61
+ "docs:md:clean": "rm -rf ./docs-md && typedoc --options ./typedoc.md.json",
62
+ "preview": "vite preview",
63
+ "release": "PUPPETEER_SKIP_DOWNLOAD=1 npm run build:publish && npm publish --access public --ignore-scripts",
64
+ "publish": "npm run release"
65
+ },
66
+ "devDependencies": {
67
+ "cssnano": ">=7.1.0",
68
+ "cssnano-preset-advanced": ">=7.0.7",
69
+ "culori": ">=4.0.2",
70
+ "postcss": ">=8.5.6",
71
+ "postcss-discard-duplicates": ">=7.0.2",
72
+ "postcss-preset-env": ">=10.2.4",
73
+ "puppeteer": ">=24.42.0",
74
+ "sass": ">=1.93.3",
75
+ "typedoc": "^0.28.20",
76
+ "typedoc-plugin-markdown": "^4.12.0",
77
+ "typescript": ">=6.0.0-beta",
78
+ "vite": ">=8.0.7",
79
+ "vite-plugin-dynamic-import": ">=1.6.0",
80
+ "vite-plugin-external": ">=6.2.2",
81
+ "vite-plugin-optimizer": ">=1.4.3"
82
+ }
83
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Veela CSS Layer Order
3
+ *
4
+ * Defines the cascade layer order for all veela style variants.
5
+ * Imported by core/basic/advanced/beercss entry points.
6
+ */
7
+
8
+ @layer
9
+ ux-normalize,
10
+ ux-tokens,
11
+ ux-base,
12
+ ux-layout,
13
+ ux-components,
14
+ ux-utilities,
15
+ ux-theme,
16
+ ux-overrides;
File without changes
@@ -0,0 +1,317 @@
1
+ @use "sass:list";
2
+ @use "sass:map";
3
+ @use "sass:math";
4
+ @use "sass:meta";
5
+ @use "sass:string";
6
+
7
+ //
8
+ @use "utils" as _;
9
+
10
+ //
11
+ // Motion durations
12
+ $md3-motion-durations: (
13
+ fast: 120ms,
14
+ normal: 160ms,
15
+ slow: 220ms,
16
+ long: 320ms,
17
+ extra-long: 420ms,
18
+ );
19
+
20
+
21
+ //
22
+ // Motion easing
23
+ $md3-motion-easing: (
24
+ standard: cubic-bezier(0.4, 0, 0.2, 1),
25
+ emphasized: cubic-bezier(0.2, 0, 0, 1),
26
+ decelerate: cubic-bezier(0, 0, 0.2, 1),
27
+ accelerate: cubic-bezier(0.4, 0, 1, 1),
28
+ bounce: cubic-bezier(0.34, 1.56, 0.64, 1),
29
+ );
30
+
31
+ $md3-easing-aliases: (
32
+ out: standard,
33
+ "in-out": decelerate,
34
+ "in": accelerate,
35
+ );
36
+
37
+ $md3-transition-definitions: (
38
+ colors: (
39
+ properties: (color, background-color, border-color),
40
+ duration: normal,
41
+ easing: out,
42
+ ),
43
+ transform: (
44
+ properties: transform,
45
+ duration: slow,
46
+ easing: "in-out",
47
+ ),
48
+ opacity: (
49
+ properties: opacity,
50
+ duration: fast,
51
+ easing: out,
52
+ ),
53
+ all: (
54
+ properties: all,
55
+ duration: normal,
56
+ easing: out,
57
+ ),
58
+ );
59
+
60
+ $md3-transition-aliases: (
61
+ fast: opacity,
62
+ normal: colors,
63
+ slow: transform,
64
+ );
65
+
66
+
67
+ //
68
+ // Easing function
69
+ @function md3-easing($token: standard) {
70
+ @return _.md3-fetch($md3-motion-easing, $token, "easing token");
71
+ }
72
+
73
+
74
+ //
75
+ // Duration function
76
+ @function md3-duration($token: normal) {
77
+ @return _.md3-fetch($md3-motion-durations, $token, "duration token");
78
+ }
79
+
80
+ //
81
+ // Motion helper functions
82
+ @function duration-var($token: normal) {
83
+ $value: _.md3-fetch($md3-motion-durations, $token, "duration token");
84
+ @return var(--duration-#{$token}, #{$value});
85
+ }
86
+
87
+ @function easing-var($token: standard) {
88
+ @if map.has-key($md3-motion-easing, $token) {
89
+ $value: _.md3-fetch($md3-motion-easing, $token, "easing token");
90
+ @return var(--ease-#{$token}, #{$value});
91
+ }
92
+
93
+ @if map.has-key($md3-easing-aliases, $token) {
94
+ $resolved: map.get($md3-easing-aliases, $token);
95
+ $value: _.md3-fetch($md3-motion-easing, $resolved, "easing token");
96
+ @return var(--ease-#{$token}, var(--ease-#{$resolved}, #{$value}));
97
+ }
98
+
99
+ @error "Unknown easing token `#{$token}`.";
100
+ }
101
+
102
+ @function _transition-props($properties) {
103
+ @return sass(if(sass(meta.type-of($properties) == "list"): list.join($properties, ", "); else: $properties));
104
+ }
105
+
106
+ @function _transition-definition($config) {
107
+ $properties: map.get($config, properties);
108
+ $duration-token: map.get($config, duration);
109
+ $easing-token: map.get($config, easing);
110
+ $delay: map.get($config, delay);
111
+
112
+ @if $properties == null {
113
+ $properties: all;
114
+ }
115
+
116
+ @if $duration-token == null {
117
+ $duration-token: normal;
118
+ }
119
+
120
+ @if $easing-token == null {
121
+ $easing-token: standard;
122
+ }
123
+
124
+ $sequence: ();
125
+ $sequence: list.append($sequence, _transition-props($properties), "space");
126
+ $sequence: list.append($sequence, duration-var($duration-token), "space");
127
+ $sequence: list.append($sequence, easing-var($easing-token), "space");
128
+
129
+ @if $delay != null {
130
+ $sequence: list.append($sequence, $delay, "space");
131
+ }
132
+
133
+ @return list.join($sequence, " ");
134
+ }
135
+
136
+ @mixin _export-duration-vars($durations) {
137
+ @each $token, $value in $durations {
138
+ --duration-#{$token}: #{$value};
139
+ }
140
+ }
141
+
142
+ @mixin _export-easing-vars($easing, $aliases) {
143
+ @each $token, $value in $easing {
144
+ --ease-#{$token}: #{$value};
145
+ }
146
+
147
+ @each $alias, $target in $aliases {
148
+ @if map.has-key($easing, $target) {
149
+ --ease-#{$alias}: var(--ease-#{$target});
150
+ }
151
+ }
152
+ }
153
+
154
+ @mixin _export-transition-vars($definitions, $aliases) {
155
+ @each $name, $config in $definitions {
156
+ --transition-#{$name}: #{_transition-definition($config)};
157
+ }
158
+
159
+ @each $alias, $target in $aliases {
160
+ @if map.has-key($definitions, $target) {
161
+ --transition-#{$alias}: var(--transition-#{$target});
162
+ }
163
+ }
164
+ }
165
+
166
+ //
167
+ // Transition variables
168
+ $transition-fast: md3-duration(fast);
169
+ $transition-base: md3-duration(normal);
170
+ $transition-slow: md3-duration(slow);
171
+ $transition-bounce: md3-easing(bounce);
172
+
173
+ //
174
+ // UI duration variables
175
+ $ui-duration-fast: md3-duration(fast) !default;
176
+ $ui-duration-standard: md3-duration(normal) !default;
177
+ $ui-ease-standard: md3-easing(standard) !default;
178
+
179
+ //
180
+ // Export motion vars mixin
181
+ @mixin md3-export-motion-vars(
182
+ $durations: $md3-motion-durations,
183
+ $easing: $md3-motion-easing,
184
+ $easing-aliases: $md3-easing-aliases,
185
+ $transition-definitions: $md3-transition-definitions,
186
+ $transition-aliases: $md3-transition-aliases
187
+ ) {
188
+ // =============================================================================
189
+ // ANIMATIONS & TRANSITIONS
190
+ // =============================================================================
191
+
192
+ @include _export-duration-vars($durations);
193
+ @include _export-easing-vars($easing, $easing-aliases);
194
+ @include _export-transition-vars($transition-definitions, $transition-aliases);
195
+
196
+ --transition-delay: 0s;
197
+ }
198
+
199
+ //
200
+ // Motion animation mixin
201
+ @mixin motion-animation(
202
+ $name,
203
+ $duration: duration-var(normal),
204
+ $timing: easing-var(out),
205
+ $delay: null,
206
+ $fill: null,
207
+ $iteration: null,
208
+ $direction: null,
209
+ $state: null
210
+ ) {
211
+ $sequence: ($name, $duration, $timing);
212
+
213
+ @if $delay != null {
214
+ $sequence: list.append($sequence, $delay, "space");
215
+ }
216
+
217
+ @if $iteration != null {
218
+ $sequence: list.append($sequence, $iteration, "space");
219
+ }
220
+
221
+ @if $direction != null {
222
+ $sequence: list.append($sequence, $direction, "space");
223
+ }
224
+
225
+ @if $fill != null {
226
+ $sequence: list.append($sequence, $fill, "space");
227
+ }
228
+
229
+ @if $state != null {
230
+ $sequence: list.append($sequence, $state, "space");
231
+ }
232
+
233
+ animation: $sequence;
234
+ }
235
+
236
+ //
237
+ // Fade in mixin
238
+ @mixin fade-in($duration: duration-var(normal), $timing: easing-var(out), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
239
+ @include motion-animation(fade-in, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
240
+ }
241
+
242
+ //
243
+ // Slide up mixin
244
+ @mixin slide-up($duration: duration-var(normal), $timing: easing-var(out), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
245
+ @include motion-animation(slide-up, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
246
+ }
247
+
248
+ //
249
+ // Scale in mixin
250
+ @mixin scale-in($duration: duration-var(fast), $timing: easing-var(bounce), $delay: null, $fill: null, $iteration: null, $direction: null, $state: null) {
251
+ @include motion-animation(scale-in, $duration, $timing, $delay, $fill, $iteration, $direction, $state);
252
+ }
253
+
254
+ //
255
+ // Focus ring mixin
256
+ @mixin focus-ring($tint: var(--outline-tint), $thickness: 2px, $offset: 2px) {
257
+ &:focus-visible {
258
+ outline: $thickness solid oklch(
259
+ from --c2-on-surface(
260
+ $tint,
261
+ var(--current, var(--color-on-surface, var(--md-on-surface, #1c1b1f)))
262
+ ) l c h / var(--outline-opacity)
263
+ );
264
+ outline-offset: $offset;
265
+ }
266
+ }
267
+
268
+ //
269
+ // Reduced motion mixin
270
+ @mixin reduced-motion($preference: reduce) {
271
+ @media (prefers-reduced-motion: #{$preference}) {
272
+ @content;
273
+ }
274
+ }
275
+
276
+ //
277
+ // High contrast mixin
278
+ @mixin high-contrast($preference: more) {
279
+ @media (prefers-contrast: #{$preference}) {
280
+ @content;
281
+ }
282
+ }
283
+
284
+ //
285
+ // Transition mixin
286
+ @mixin transition($properties: all, $duration: null, $timing: null, $delay: null) {
287
+ & {
288
+ $prop-list: _transition-props($properties);
289
+ --transition-props: #{$prop-list};
290
+
291
+ @if $duration != null {
292
+ @if map.has-key($md3-motion-durations, $duration) {
293
+ --transition-duration: #{duration-var($duration)};
294
+ } @else {
295
+ --transition-duration: #{$duration};
296
+ }
297
+ }
298
+
299
+ @if $timing != null {
300
+ @if map.has-key($md3-motion-easing, $timing) or map.has-key($md3-easing-aliases, $timing) {
301
+ --transition-timing: #{easing-var($timing)};
302
+ } @else {
303
+ --transition-timing: #{$timing};
304
+ }
305
+ }
306
+
307
+ @if $delay != null {
308
+ --transition-delay: #{$delay};
309
+ }
310
+
311
+ transition:
312
+ var(--transition-props)
313
+ var(--transition-duration, #{duration-var(normal)})
314
+ var(--transition-timing, #{easing-var(out)})
315
+ var(--transition-delay, 0s);
316
+ }
317
+ }