@birdycom/omniacss 0.11.0 → 0.11.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/LICENSE +21 -21
- package/README.md +44 -44
- package/dist/oc-theme.css +1 -1
- package/dist/omnia.css +2 -1
- package/dist/omnia.min.css +1 -1
- package/dist/omnia.starter.css +2 -0
- package/dist/omnia.starter.min.css +1 -1
- package/dist/tokens/omnia.dtcg.json +2 -2
- package/dist/tokens/omnia.tokens.json +1 -1
- package/dist/tokens/omnia_tokens.py +2 -2
- package/package.json +63 -63
- package/scss/utilities/_anchor_positioning.scss +65 -65
- package/scss/utilities/_animation_properties.scss +143 -143
- package/scss/utilities/_borders_extended.scss +97 -97
- package/scss/utilities/_borders_outlines.scss +161 -161
- package/scss/utilities/_containment.scss +82 -82
- package/scss/utilities/_css_functions.scss +34 -34
- package/scss/utilities/_dark_mode.scss +117 -117
- package/scss/utilities/_drop_shadow_colors.scss +26 -26
- package/scss/utilities/_experimental_css.scss +149 -149
- package/scss/utilities/_flexbox.scss +317 -317
- package/scss/utilities/_font_variants.scss +139 -139
- package/scss/utilities/_gap.scss +103 -103
- package/scss/utilities/_gradient_stops.scss +48 -48
- package/scss/utilities/_grid.scss +672 -672
- package/scss/utilities/_layout_extras.scss +171 -171
- package/scss/utilities/_layout_flow.scss +210 -210
- package/scss/utilities/_mask_extras.scss +62 -62
- package/scss/utilities/_motion_transforms.scss +167 -167
- package/scss/utilities/_scroll_animations.scss +80 -80
- package/scss/utilities/_scrollbar.scss +2 -1
- package/scss/utilities/_shadow_tokens.scss +21 -21
- package/scss/utilities/_shapes.scss +72 -72
- package/scss/utilities/_sizing_logical.scss +99 -99
- package/scss/utilities/_starting_style.scss +53 -53
- package/scss/utilities/_state_variants.scss +196 -196
- package/scss/utilities/_svg.scss +100 -100
- package/scss/utilities/_table_advanced.scss +19 -19
- package/scss/utilities/_typography_advanced.scss +124 -124
- package/scss/utilities/_typography_modern.scss +83 -83
- package/scss/utilities/_view_transitions.scss +64 -64
- package/scss/utilities/_writing_modes.scss +72 -72
- package/scss/variables/_hulp.scss +107 -107
- package/scss/variables/_variables_effects.scss +108 -108
- package/src/postcss.mjs +43 -43
- package/src/tokens.mjs +377 -377
- package/src/variants.mjs +278 -278
- package/tokens/semantic.json +80 -80
package/package.json
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@birdycom/omniacss",
|
|
3
|
-
"version": "0.11.
|
|
4
|
-
"description": "OmniaCSS utilities: modern CSS (anchor positioning, container queries, view transitions, light-dark()) as utility classes, generated on demand.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"author": "Serge Cools (Birdycom)",
|
|
8
|
-
"homepage": "https://omniacss.eu",
|
|
9
|
-
"repository": {
|
|
10
|
-
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/Birdycom/
|
|
12
|
-
"directory": "packages/core"
|
|
13
|
-
},
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/Birdycom/
|
|
16
|
-
},
|
|
17
|
-
"keywords": [
|
|
18
|
-
"css",
|
|
19
|
-
"utility-first",
|
|
20
|
-
"design-system",
|
|
21
|
-
"light-dark",
|
|
22
|
-
"container-queries",
|
|
23
|
-
"anchor-positioning",
|
|
24
|
-
"omniacss"
|
|
25
|
-
],
|
|
26
|
-
"engines": {
|
|
27
|
-
"node": ">=22"
|
|
28
|
-
},
|
|
29
|
-
"exports": {
|
|
30
|
-
".": "./dist/omnia.css",
|
|
31
|
-
"./min": "./dist/omnia.min.css",
|
|
32
|
-
"./starter": "./dist/omnia.starter.min.css",
|
|
33
|
-
"./tokens": "./dist/oc-colors.css",
|
|
34
|
-
"./theme": "./dist/oc-theme.css",
|
|
35
|
-
"./tokens/semantic.json": "./tokens/semantic.json",
|
|
36
|
-
"./tokens/export": "./src/tokens.mjs",
|
|
37
|
-
"./engine": "./src/engine.mjs",
|
|
38
|
-
"./postcss": "./src/postcss.mjs",
|
|
39
|
-
"./scss/*": "./scss/*",
|
|
40
|
-
"./dist/*": "./dist/*",
|
|
41
|
-
"./package.json": "./package.json"
|
|
42
|
-
},
|
|
43
|
-
"style": "./dist/omnia.css",
|
|
44
|
-
"files": [
|
|
45
|
-
"dist",
|
|
46
|
-
"scss",
|
|
47
|
-
"src",
|
|
48
|
-
"tokens",
|
|
49
|
-
"README.md",
|
|
50
|
-
"LICENSE"
|
|
51
|
-
],
|
|
52
|
-
"dependencies": {
|
|
53
|
-
"postcss": "^8.5.3"
|
|
54
|
-
},
|
|
55
|
-
"unpkg": "./dist/omnia.starter.min.css",
|
|
56
|
-
"jsdelivr": "./dist/omnia.starter.min.css",
|
|
57
|
-
"sideEffects": [
|
|
58
|
-
"*.css"
|
|
59
|
-
],
|
|
60
|
-
"publishConfig": {
|
|
61
|
-
"access": "public"
|
|
62
|
-
}
|
|
63
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@birdycom/omniacss",
|
|
3
|
+
"version": "0.11.2",
|
|
4
|
+
"description": "OmniaCSS utilities: modern CSS (anchor positioning, container queries, view transitions, light-dark()) as utility classes, generated on demand.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Serge Cools (Birdycom)",
|
|
8
|
+
"homepage": "https://omniacss.eu",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Birdycom/OmniaCSS.git",
|
|
12
|
+
"directory": "packages/core"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/Birdycom/OmniaCSS/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"css",
|
|
19
|
+
"utility-first",
|
|
20
|
+
"design-system",
|
|
21
|
+
"light-dark",
|
|
22
|
+
"container-queries",
|
|
23
|
+
"anchor-positioning",
|
|
24
|
+
"omniacss"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=22"
|
|
28
|
+
},
|
|
29
|
+
"exports": {
|
|
30
|
+
".": "./dist/omnia.css",
|
|
31
|
+
"./min": "./dist/omnia.min.css",
|
|
32
|
+
"./starter": "./dist/omnia.starter.min.css",
|
|
33
|
+
"./tokens": "./dist/oc-colors.css",
|
|
34
|
+
"./theme": "./dist/oc-theme.css",
|
|
35
|
+
"./tokens/semantic.json": "./tokens/semantic.json",
|
|
36
|
+
"./tokens/export": "./src/tokens.mjs",
|
|
37
|
+
"./engine": "./src/engine.mjs",
|
|
38
|
+
"./postcss": "./src/postcss.mjs",
|
|
39
|
+
"./scss/*": "./scss/*",
|
|
40
|
+
"./dist/*": "./dist/*",
|
|
41
|
+
"./package.json": "./package.json"
|
|
42
|
+
},
|
|
43
|
+
"style": "./dist/omnia.css",
|
|
44
|
+
"files": [
|
|
45
|
+
"dist",
|
|
46
|
+
"scss",
|
|
47
|
+
"src",
|
|
48
|
+
"tokens",
|
|
49
|
+
"README.md",
|
|
50
|
+
"LICENSE"
|
|
51
|
+
],
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"postcss": "^8.5.3"
|
|
54
|
+
},
|
|
55
|
+
"unpkg": "./dist/omnia.starter.min.css",
|
|
56
|
+
"jsdelivr": "./dist/omnia.starter.min.css",
|
|
57
|
+
"sideEffects": [
|
|
58
|
+
"*.css"
|
|
59
|
+
],
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_anchor_positioning.scss
|
|
3
|
-
// Description: CSS Anchor Positioning utilities — tether an element to an anchor without JavaScript.
|
|
4
|
-
// Copyright: 2021-2026 Birdycom
|
|
5
|
-
// Author: Serge Cools
|
|
6
|
-
// Version: 0.3.0
|
|
7
|
-
// Framework: OmniaCSS
|
|
8
|
-
// Purpose: Generate .anchor-*, .anchored-*, .anchor-area-*, .anchor-try-* and .anchor-visibility-* classes.
|
|
9
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning
|
|
10
|
-
// Note: the anchored element needs position: absolute or fixed (.absolute / .fixed).
|
|
11
|
-
// Pair .anchor-{name} on the trigger with .anchored-{name} on the positioned element.
|
|
12
|
-
// Map: anchor-name -> position-anchor -> anchor-scope -> position-area -> position-try -> position-visibility
|
|
13
|
-
|
|
14
|
-
$_anchor-names: ('oc', 'trigger', 'menu', 'tooltip');
|
|
15
|
-
|
|
16
|
-
/* Anchor name — register an element as anchor */
|
|
17
|
-
@each $name in $_anchor-names {
|
|
18
|
-
.anchor-#{$name} { anchor-name: --#{$name}; }
|
|
19
|
-
}
|
|
20
|
-
.anchor-none { anchor-name: none; }
|
|
21
|
-
|
|
22
|
-
/* Position anchor — attach a positioned element to a named anchor */
|
|
23
|
-
@each $name in $_anchor-names {
|
|
24
|
-
.anchored-#{$name} { position-anchor: --#{$name}; }
|
|
25
|
-
}
|
|
26
|
-
.anchored-auto { position-anchor: auto; }
|
|
27
|
-
|
|
28
|
-
/* Anchor scope — limit anchor name lookup to a subtree (repeated components) */
|
|
29
|
-
.anchor-scope-all { anchor-scope: all; }
|
|
30
|
-
.anchor-scope-none { anchor-scope: none; }
|
|
31
|
-
|
|
32
|
-
/* Position area — place the element in a region of the 3×3 grid around the anchor */
|
|
33
|
-
.anchor-area-top { position-area: top; }
|
|
34
|
-
.anchor-area-bottom { position-area: bottom; }
|
|
35
|
-
.anchor-area-left { position-area: left; }
|
|
36
|
-
.anchor-area-right { position-area: right; }
|
|
37
|
-
.anchor-area-center { position-area: center; }
|
|
38
|
-
.anchor-area-top-left { position-area: top left; }
|
|
39
|
-
.anchor-area-top-right { position-area: top right; }
|
|
40
|
-
.anchor-area-bottom-left { position-area: bottom left; }
|
|
41
|
-
.anchor-area-bottom-right { position-area: bottom right; }
|
|
42
|
-
.anchor-area-top-span-right { position-area: top span-right; }
|
|
43
|
-
.anchor-area-bottom-span-right { position-area: bottom span-right; }
|
|
44
|
-
.anchor-area-block-start { position-area: block-start; }
|
|
45
|
-
.anchor-area-block-end { position-area: block-end; }
|
|
46
|
-
.anchor-area-inline-start { position-area: inline-start; }
|
|
47
|
-
.anchor-area-inline-end { position-area: inline-end; }
|
|
48
|
-
|
|
49
|
-
/* Position try fallbacks — alternatives when the element overflows */
|
|
50
|
-
.anchor-try-none { position-try-fallbacks: none; }
|
|
51
|
-
.anchor-try-flip-block { position-try-fallbacks: flip-block; }
|
|
52
|
-
.anchor-try-flip-inline { position-try-fallbacks: flip-inline; }
|
|
53
|
-
.anchor-try-flip-both { position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; }
|
|
54
|
-
.anchor-try-order-normal { position-try-order: normal; }
|
|
55
|
-
.anchor-try-order-most-width { position-try-order: most-width; }
|
|
56
|
-
.anchor-try-order-most-height { position-try-order: most-height; }
|
|
57
|
-
|
|
58
|
-
/* Position visibility — hide the element when its anchor is hidden or it overflows */
|
|
59
|
-
.anchor-visibility-always { position-visibility: always; }
|
|
60
|
-
.anchor-visibility-anchors-visible { position-visibility: anchors-visible; }
|
|
61
|
-
.anchor-visibility-no-overflow { position-visibility: no-overflow; }
|
|
62
|
-
|
|
63
|
-
/* Anchor size — match the anchor's width (dropdown menus) */
|
|
64
|
-
.w-anchor { width: anchor-size(width); }
|
|
65
|
-
.min-w-anchor { min-width: anchor-size(width); }
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_anchor_positioning.scss
|
|
3
|
+
// Description: CSS Anchor Positioning utilities — tether an element to an anchor without JavaScript.
|
|
4
|
+
// Copyright: 2021-2026 Birdycom
|
|
5
|
+
// Author: Serge Cools
|
|
6
|
+
// Version: 0.3.0
|
|
7
|
+
// Framework: OmniaCSS
|
|
8
|
+
// Purpose: Generate .anchor-*, .anchored-*, .anchor-area-*, .anchor-try-* and .anchor-visibility-* classes.
|
|
9
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning
|
|
10
|
+
// Note: the anchored element needs position: absolute or fixed (.absolute / .fixed).
|
|
11
|
+
// Pair .anchor-{name} on the trigger with .anchored-{name} on the positioned element.
|
|
12
|
+
// Map: anchor-name -> position-anchor -> anchor-scope -> position-area -> position-try -> position-visibility
|
|
13
|
+
|
|
14
|
+
$_anchor-names: ('oc', 'trigger', 'menu', 'tooltip');
|
|
15
|
+
|
|
16
|
+
/* Anchor name — register an element as anchor */
|
|
17
|
+
@each $name in $_anchor-names {
|
|
18
|
+
.anchor-#{$name} { anchor-name: --#{$name}; }
|
|
19
|
+
}
|
|
20
|
+
.anchor-none { anchor-name: none; }
|
|
21
|
+
|
|
22
|
+
/* Position anchor — attach a positioned element to a named anchor */
|
|
23
|
+
@each $name in $_anchor-names {
|
|
24
|
+
.anchored-#{$name} { position-anchor: --#{$name}; }
|
|
25
|
+
}
|
|
26
|
+
.anchored-auto { position-anchor: auto; }
|
|
27
|
+
|
|
28
|
+
/* Anchor scope — limit anchor name lookup to a subtree (repeated components) */
|
|
29
|
+
.anchor-scope-all { anchor-scope: all; }
|
|
30
|
+
.anchor-scope-none { anchor-scope: none; }
|
|
31
|
+
|
|
32
|
+
/* Position area — place the element in a region of the 3×3 grid around the anchor */
|
|
33
|
+
.anchor-area-top { position-area: top; }
|
|
34
|
+
.anchor-area-bottom { position-area: bottom; }
|
|
35
|
+
.anchor-area-left { position-area: left; }
|
|
36
|
+
.anchor-area-right { position-area: right; }
|
|
37
|
+
.anchor-area-center { position-area: center; }
|
|
38
|
+
.anchor-area-top-left { position-area: top left; }
|
|
39
|
+
.anchor-area-top-right { position-area: top right; }
|
|
40
|
+
.anchor-area-bottom-left { position-area: bottom left; }
|
|
41
|
+
.anchor-area-bottom-right { position-area: bottom right; }
|
|
42
|
+
.anchor-area-top-span-right { position-area: top span-right; }
|
|
43
|
+
.anchor-area-bottom-span-right { position-area: bottom span-right; }
|
|
44
|
+
.anchor-area-block-start { position-area: block-start; }
|
|
45
|
+
.anchor-area-block-end { position-area: block-end; }
|
|
46
|
+
.anchor-area-inline-start { position-area: inline-start; }
|
|
47
|
+
.anchor-area-inline-end { position-area: inline-end; }
|
|
48
|
+
|
|
49
|
+
/* Position try fallbacks — alternatives when the element overflows */
|
|
50
|
+
.anchor-try-none { position-try-fallbacks: none; }
|
|
51
|
+
.anchor-try-flip-block { position-try-fallbacks: flip-block; }
|
|
52
|
+
.anchor-try-flip-inline { position-try-fallbacks: flip-inline; }
|
|
53
|
+
.anchor-try-flip-both { position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; }
|
|
54
|
+
.anchor-try-order-normal { position-try-order: normal; }
|
|
55
|
+
.anchor-try-order-most-width { position-try-order: most-width; }
|
|
56
|
+
.anchor-try-order-most-height { position-try-order: most-height; }
|
|
57
|
+
|
|
58
|
+
/* Position visibility — hide the element when its anchor is hidden or it overflows */
|
|
59
|
+
.anchor-visibility-always { position-visibility: always; }
|
|
60
|
+
.anchor-visibility-anchors-visible { position-visibility: anchors-visible; }
|
|
61
|
+
.anchor-visibility-no-overflow { position-visibility: no-overflow; }
|
|
62
|
+
|
|
63
|
+
/* Anchor size — match the anchor's width (dropdown menus) */
|
|
64
|
+
.w-anchor { width: anchor-size(width); }
|
|
65
|
+
.min-w-anchor { min-width: anchor-size(width); }
|
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_animation_properties.scss
|
|
3
|
-
// Description: Animation longhand utilities, easing functions, motion path (offset-*), the individual
|
|
4
|
-
// rotate property, transform-box and scroll/view timeline longhands.
|
|
5
|
-
// Copyright: 2021-2026 Birdycom
|
|
6
|
-
// Author: Serge Cools
|
|
7
|
-
// Version: 0.3.0
|
|
8
|
-
// Framework: OmniaCSS
|
|
9
|
-
// Purpose: Generate .animate-delay-*, .animate-duration-*, .animate-direction-*, .animate-fill-*, .animate-play-*,
|
|
10
|
-
// .animate-repeat-*, .animate-compose-*, .animate-ease-*, .animate-name-*, .ease-spring/.ease-bounce/.ease-steps-*,
|
|
11
|
-
// .offset-*, .rotate-prop-*, .transform-box-*, .animate-range-start-*/-end-*, .scroll-timeline-axis-*,
|
|
12
|
-
// .view-timeline-axis-*, .view-timeline-inset-*.
|
|
13
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations
|
|
14
|
-
// Note: complements _motion_transforms.scss (transition-*, .animate-spin, transform utilities).
|
|
15
|
-
// Map: duration -> delay -> iteration -> direction -> fill-mode -> play-state -> composition -> name
|
|
16
|
-
// -> easing -> motion path -> rotate property -> transform-box -> timeline longhands
|
|
17
|
-
|
|
18
|
-
/* Animation duration */
|
|
19
|
-
@each $ms in (75, 150, 300, 500, 700, 1000, 2000) {
|
|
20
|
-
.animate-duration-#{$ms} { animation-duration: #{$ms}ms; }
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* Animation delay */
|
|
24
|
-
@each $ms in (0, 75, 150, 300, 500, 1000) {
|
|
25
|
-
.animate-delay-#{$ms} { animation-delay: #{$ms}ms; }
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/* Animation iteration count */
|
|
29
|
-
.animate-repeat-1 { animation-iteration-count: 1; }
|
|
30
|
-
.animate-repeat-2 { animation-iteration-count: 2; }
|
|
31
|
-
.animate-repeat-3 { animation-iteration-count: 3; }
|
|
32
|
-
.animate-repeat-infinite { animation-iteration-count: infinite; }
|
|
33
|
-
|
|
34
|
-
/* Animation direction */
|
|
35
|
-
.animate-direction-normal { animation-direction: normal; }
|
|
36
|
-
.animate-direction-reverse { animation-direction: reverse; }
|
|
37
|
-
.animate-direction-alternate { animation-direction: alternate; }
|
|
38
|
-
.animate-direction-alternate-reverse { animation-direction: alternate-reverse; }
|
|
39
|
-
|
|
40
|
-
/* Animation fill mode */
|
|
41
|
-
.animate-fill-none { animation-fill-mode: none; }
|
|
42
|
-
.animate-fill-forwards { animation-fill-mode: forwards; }
|
|
43
|
-
.animate-fill-backwards { animation-fill-mode: backwards; }
|
|
44
|
-
.animate-fill-both { animation-fill-mode: both; }
|
|
45
|
-
|
|
46
|
-
/* Animation play state (e.g. pause on hover with hover:animate-paused in your own CSS) */
|
|
47
|
-
.animate-running { animation-play-state: running; }
|
|
48
|
-
.animate-paused { animation-play-state: paused; }
|
|
49
|
-
|
|
50
|
-
/* Animation composition */
|
|
51
|
-
.animate-compose-replace { animation-composition: replace; }
|
|
52
|
-
.animate-compose-add { animation-composition: add; }
|
|
53
|
-
.animate-compose-accumulate { animation-composition: accumulate; }
|
|
54
|
-
|
|
55
|
-
/* Animation name — pair with .animate-duration-* (keyframes from _motion_transforms.scss) */
|
|
56
|
-
.animate-name-none { animation-name: none; }
|
|
57
|
-
.animate-name-spin { animation-name: oc-spin; }
|
|
58
|
-
.animate-name-pulse { animation-name: oc-pulse; }
|
|
59
|
-
.animate-name-bounce { animation-name: oc-bounce; }
|
|
60
|
-
.animate-name-ping { animation-name: oc-ping; }
|
|
61
|
-
|
|
62
|
-
/* Easing functions — animations (transitions use .ease-*) */
|
|
63
|
-
.animate-ease-linear { animation-timing-function: linear; }
|
|
64
|
-
.animate-ease-in { animation-timing-function: ease-in; }
|
|
65
|
-
.animate-ease-out { animation-timing-function: ease-out; }
|
|
66
|
-
.animate-ease-in-out { animation-timing-function: ease-in-out; }
|
|
67
|
-
.animate-ease-steps-4 { animation-timing-function: steps(4, end); }
|
|
68
|
-
.animate-ease-spring {
|
|
69
|
-
animation-timing-function: linear(0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%, 1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%, 0.997 69.8%, 1.003 76.9%, 1);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/* Easing functions — transitions: spring/bounce via linear(), stepped */
|
|
73
|
-
.ease-spring {
|
|
74
|
-
transition-timing-function: linear(0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%, 1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%, 0.997 69.8%, 1.003 76.9%, 1);
|
|
75
|
-
}
|
|
76
|
-
.ease-bounce {
|
|
77
|
-
transition-timing-function: linear(0, 0.063, 0.25, 0.563, 1 36.4%, 0.812, 0.75, 0.813, 1 72.7%, 0.953, 0.938, 0.953, 1 90.9%, 0.984, 1);
|
|
78
|
-
}
|
|
79
|
-
.ease-steps-4 { transition-timing-function: steps(4, end); }
|
|
80
|
-
.ease-step-start { transition-timing-function: step-start; }
|
|
81
|
-
.ease-step-end { transition-timing-function: step-end; }
|
|
82
|
-
|
|
83
|
-
/* Motion path — move an element along a path */
|
|
84
|
-
.offset-path-none { offset-path: none; }
|
|
85
|
-
.offset-path-circle { offset-path: circle(40% at 50% 50%); }
|
|
86
|
-
.offset-path-ellipse { offset-path: ellipse(45% 35% at 50% 50%); }
|
|
87
|
-
.offset-path-inset { offset-path: inset(10% round 1rem); }
|
|
88
|
-
.offset-path-wave { offset-path: path("M 0 40 C 40 0, 80 80, 120 40 S 200 0, 240 40"); }
|
|
89
|
-
.offset-path-ray { offset-path: ray(45deg closest-side); }
|
|
90
|
-
@each $p in (0, 25, 50, 75, 100) {
|
|
91
|
-
.offset-distance-#{$p} { offset-distance: #{$p * 1%}; }
|
|
92
|
-
}
|
|
93
|
-
.offset-rotate-auto { offset-rotate: auto; }
|
|
94
|
-
.offset-rotate-reverse { offset-rotate: reverse; }
|
|
95
|
-
.offset-rotate-0 { offset-rotate: 0deg; }
|
|
96
|
-
.offset-anchor-center { offset-anchor: center; }
|
|
97
|
-
.offset-anchor-auto { offset-anchor: auto; }
|
|
98
|
-
.offset-position-normal { offset-position: normal; }
|
|
99
|
-
.offset-position-center { offset-position: center; }
|
|
100
|
-
.offset-none { offset: none; }
|
|
101
|
-
|
|
102
|
-
/* Follow the path from 0% to 100% */
|
|
103
|
-
@keyframes oc-follow-path {
|
|
104
|
-
from { offset-distance: 0%; }
|
|
105
|
-
to { offset-distance: 100%; }
|
|
106
|
-
}
|
|
107
|
-
.animate-follow-path { animation: oc-follow-path 3s ease-in-out infinite alternate; }
|
|
108
|
-
|
|
109
|
-
@media (prefers-reduced-motion: reduce) {
|
|
110
|
-
.animate-follow-path { animation: none; }
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/* Individual rotate property (independent from transform) */
|
|
114
|
-
@each $deg in (0, 45, 90, 180, -45, -90) {
|
|
115
|
-
$name: '#{$deg}';
|
|
116
|
-
@if $deg < 0 {
|
|
117
|
-
$name: 'n#{-$deg}';
|
|
118
|
-
}
|
|
119
|
-
.rotate-prop-#{$name} { rotate: #{$deg}deg; }
|
|
120
|
-
}
|
|
121
|
-
.rotate-prop-x-180 { rotate: x 180deg; }
|
|
122
|
-
.rotate-prop-y-180 { rotate: y 180deg; }
|
|
123
|
-
|
|
124
|
-
/* Transform box — reference box for transform-origin (SVG) */
|
|
125
|
-
.transform-box-content { transform-box: content-box; }
|
|
126
|
-
.transform-box-border { transform-box: border-box; }
|
|
127
|
-
.transform-box-fill { transform-box: fill-box; }
|
|
128
|
-
.transform-box-stroke { transform-box: stroke-box; }
|
|
129
|
-
.transform-box-view { transform-box: view-box; }
|
|
130
|
-
|
|
131
|
-
/* Timeline longhands */
|
|
132
|
-
.animate-range-start-entry { animation-range-start: entry; }
|
|
133
|
-
.animate-range-start-contain { animation-range-start: contain; }
|
|
134
|
-
.animate-range-end-exit { animation-range-end: exit; }
|
|
135
|
-
.animate-range-end-contain { animation-range-end: contain; }
|
|
136
|
-
.scroll-timeline-axis-block { scroll-timeline-axis: block; }
|
|
137
|
-
.scroll-timeline-axis-inline { scroll-timeline-axis: inline; }
|
|
138
|
-
.scroll-timeline-name-oc { scroll-timeline-name: --oc-timeline; }
|
|
139
|
-
.view-timeline-axis-block { view-timeline-axis: block; }
|
|
140
|
-
.view-timeline-axis-inline { view-timeline-axis: inline; }
|
|
141
|
-
.view-timeline-name-oc { view-timeline-name: --oc-timeline; }
|
|
142
|
-
.view-timeline-inset-auto { view-timeline-inset: auto; }
|
|
143
|
-
.view-timeline-inset-10 { view-timeline-inset: 10%; }
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_animation_properties.scss
|
|
3
|
+
// Description: Animation longhand utilities, easing functions, motion path (offset-*), the individual
|
|
4
|
+
// rotate property, transform-box and scroll/view timeline longhands.
|
|
5
|
+
// Copyright: 2021-2026 Birdycom
|
|
6
|
+
// Author: Serge Cools
|
|
7
|
+
// Version: 0.3.0
|
|
8
|
+
// Framework: OmniaCSS
|
|
9
|
+
// Purpose: Generate .animate-delay-*, .animate-duration-*, .animate-direction-*, .animate-fill-*, .animate-play-*,
|
|
10
|
+
// .animate-repeat-*, .animate-compose-*, .animate-ease-*, .animate-name-*, .ease-spring/.ease-bounce/.ease-steps-*,
|
|
11
|
+
// .offset-*, .rotate-prop-*, .transform-box-*, .animate-range-start-*/-end-*, .scroll-timeline-axis-*,
|
|
12
|
+
// .view-timeline-axis-*, .view-timeline-inset-*.
|
|
13
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animations
|
|
14
|
+
// Note: complements _motion_transforms.scss (transition-*, .animate-spin, transform utilities).
|
|
15
|
+
// Map: duration -> delay -> iteration -> direction -> fill-mode -> play-state -> composition -> name
|
|
16
|
+
// -> easing -> motion path -> rotate property -> transform-box -> timeline longhands
|
|
17
|
+
|
|
18
|
+
/* Animation duration */
|
|
19
|
+
@each $ms in (75, 150, 300, 500, 700, 1000, 2000) {
|
|
20
|
+
.animate-duration-#{$ms} { animation-duration: #{$ms}ms; }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Animation delay */
|
|
24
|
+
@each $ms in (0, 75, 150, 300, 500, 1000) {
|
|
25
|
+
.animate-delay-#{$ms} { animation-delay: #{$ms}ms; }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Animation iteration count */
|
|
29
|
+
.animate-repeat-1 { animation-iteration-count: 1; }
|
|
30
|
+
.animate-repeat-2 { animation-iteration-count: 2; }
|
|
31
|
+
.animate-repeat-3 { animation-iteration-count: 3; }
|
|
32
|
+
.animate-repeat-infinite { animation-iteration-count: infinite; }
|
|
33
|
+
|
|
34
|
+
/* Animation direction */
|
|
35
|
+
.animate-direction-normal { animation-direction: normal; }
|
|
36
|
+
.animate-direction-reverse { animation-direction: reverse; }
|
|
37
|
+
.animate-direction-alternate { animation-direction: alternate; }
|
|
38
|
+
.animate-direction-alternate-reverse { animation-direction: alternate-reverse; }
|
|
39
|
+
|
|
40
|
+
/* Animation fill mode */
|
|
41
|
+
.animate-fill-none { animation-fill-mode: none; }
|
|
42
|
+
.animate-fill-forwards { animation-fill-mode: forwards; }
|
|
43
|
+
.animate-fill-backwards { animation-fill-mode: backwards; }
|
|
44
|
+
.animate-fill-both { animation-fill-mode: both; }
|
|
45
|
+
|
|
46
|
+
/* Animation play state (e.g. pause on hover with hover:animate-paused in your own CSS) */
|
|
47
|
+
.animate-running { animation-play-state: running; }
|
|
48
|
+
.animate-paused { animation-play-state: paused; }
|
|
49
|
+
|
|
50
|
+
/* Animation composition */
|
|
51
|
+
.animate-compose-replace { animation-composition: replace; }
|
|
52
|
+
.animate-compose-add { animation-composition: add; }
|
|
53
|
+
.animate-compose-accumulate { animation-composition: accumulate; }
|
|
54
|
+
|
|
55
|
+
/* Animation name — pair with .animate-duration-* (keyframes from _motion_transforms.scss) */
|
|
56
|
+
.animate-name-none { animation-name: none; }
|
|
57
|
+
.animate-name-spin { animation-name: oc-spin; }
|
|
58
|
+
.animate-name-pulse { animation-name: oc-pulse; }
|
|
59
|
+
.animate-name-bounce { animation-name: oc-bounce; }
|
|
60
|
+
.animate-name-ping { animation-name: oc-ping; }
|
|
61
|
+
|
|
62
|
+
/* Easing functions — animations (transitions use .ease-*) */
|
|
63
|
+
.animate-ease-linear { animation-timing-function: linear; }
|
|
64
|
+
.animate-ease-in { animation-timing-function: ease-in; }
|
|
65
|
+
.animate-ease-out { animation-timing-function: ease-out; }
|
|
66
|
+
.animate-ease-in-out { animation-timing-function: ease-in-out; }
|
|
67
|
+
.animate-ease-steps-4 { animation-timing-function: steps(4, end); }
|
|
68
|
+
.animate-ease-spring {
|
|
69
|
+
animation-timing-function: linear(0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%, 1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%, 0.997 69.8%, 1.003 76.9%, 1);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Easing functions — transitions: spring/bounce via linear(), stepped */
|
|
73
|
+
.ease-spring {
|
|
74
|
+
transition-timing-function: linear(0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%, 1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%, 0.997 69.8%, 1.003 76.9%, 1);
|
|
75
|
+
}
|
|
76
|
+
.ease-bounce {
|
|
77
|
+
transition-timing-function: linear(0, 0.063, 0.25, 0.563, 1 36.4%, 0.812, 0.75, 0.813, 1 72.7%, 0.953, 0.938, 0.953, 1 90.9%, 0.984, 1);
|
|
78
|
+
}
|
|
79
|
+
.ease-steps-4 { transition-timing-function: steps(4, end); }
|
|
80
|
+
.ease-step-start { transition-timing-function: step-start; }
|
|
81
|
+
.ease-step-end { transition-timing-function: step-end; }
|
|
82
|
+
|
|
83
|
+
/* Motion path — move an element along a path */
|
|
84
|
+
.offset-path-none { offset-path: none; }
|
|
85
|
+
.offset-path-circle { offset-path: circle(40% at 50% 50%); }
|
|
86
|
+
.offset-path-ellipse { offset-path: ellipse(45% 35% at 50% 50%); }
|
|
87
|
+
.offset-path-inset { offset-path: inset(10% round 1rem); }
|
|
88
|
+
.offset-path-wave { offset-path: path("M 0 40 C 40 0, 80 80, 120 40 S 200 0, 240 40"); }
|
|
89
|
+
.offset-path-ray { offset-path: ray(45deg closest-side); }
|
|
90
|
+
@each $p in (0, 25, 50, 75, 100) {
|
|
91
|
+
.offset-distance-#{$p} { offset-distance: #{$p * 1%}; }
|
|
92
|
+
}
|
|
93
|
+
.offset-rotate-auto { offset-rotate: auto; }
|
|
94
|
+
.offset-rotate-reverse { offset-rotate: reverse; }
|
|
95
|
+
.offset-rotate-0 { offset-rotate: 0deg; }
|
|
96
|
+
.offset-anchor-center { offset-anchor: center; }
|
|
97
|
+
.offset-anchor-auto { offset-anchor: auto; }
|
|
98
|
+
.offset-position-normal { offset-position: normal; }
|
|
99
|
+
.offset-position-center { offset-position: center; }
|
|
100
|
+
.offset-none { offset: none; }
|
|
101
|
+
|
|
102
|
+
/* Follow the path from 0% to 100% */
|
|
103
|
+
@keyframes oc-follow-path {
|
|
104
|
+
from { offset-distance: 0%; }
|
|
105
|
+
to { offset-distance: 100%; }
|
|
106
|
+
}
|
|
107
|
+
.animate-follow-path { animation: oc-follow-path 3s ease-in-out infinite alternate; }
|
|
108
|
+
|
|
109
|
+
@media (prefers-reduced-motion: reduce) {
|
|
110
|
+
.animate-follow-path { animation: none; }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Individual rotate property (independent from transform) */
|
|
114
|
+
@each $deg in (0, 45, 90, 180, -45, -90) {
|
|
115
|
+
$name: '#{$deg}';
|
|
116
|
+
@if $deg < 0 {
|
|
117
|
+
$name: 'n#{-$deg}';
|
|
118
|
+
}
|
|
119
|
+
.rotate-prop-#{$name} { rotate: #{$deg}deg; }
|
|
120
|
+
}
|
|
121
|
+
.rotate-prop-x-180 { rotate: x 180deg; }
|
|
122
|
+
.rotate-prop-y-180 { rotate: y 180deg; }
|
|
123
|
+
|
|
124
|
+
/* Transform box — reference box for transform-origin (SVG) */
|
|
125
|
+
.transform-box-content { transform-box: content-box; }
|
|
126
|
+
.transform-box-border { transform-box: border-box; }
|
|
127
|
+
.transform-box-fill { transform-box: fill-box; }
|
|
128
|
+
.transform-box-stroke { transform-box: stroke-box; }
|
|
129
|
+
.transform-box-view { transform-box: view-box; }
|
|
130
|
+
|
|
131
|
+
/* Timeline longhands */
|
|
132
|
+
.animate-range-start-entry { animation-range-start: entry; }
|
|
133
|
+
.animate-range-start-contain { animation-range-start: contain; }
|
|
134
|
+
.animate-range-end-exit { animation-range-end: exit; }
|
|
135
|
+
.animate-range-end-contain { animation-range-end: contain; }
|
|
136
|
+
.scroll-timeline-axis-block { scroll-timeline-axis: block; }
|
|
137
|
+
.scroll-timeline-axis-inline { scroll-timeline-axis: inline; }
|
|
138
|
+
.scroll-timeline-name-oc { scroll-timeline-name: --oc-timeline; }
|
|
139
|
+
.view-timeline-axis-block { view-timeline-axis: block; }
|
|
140
|
+
.view-timeline-axis-inline { view-timeline-axis: inline; }
|
|
141
|
+
.view-timeline-name-oc { view-timeline-name: --oc-timeline; }
|
|
142
|
+
.view-timeline-inset-auto { view-timeline-inset: auto; }
|
|
143
|
+
.view-timeline-inset-10 { view-timeline-inset: 10%; }
|