@birdycom/omniacss 0.11.0 → 0.11.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 -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/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
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_typography_advanced.scss
|
|
3
|
-
// Map: smoothing/stretch/clamp/list-image/text-overflow/wrap/indent/overflow-wrap/hyphens/content/quotes/counters/line-height keywords
|
|
4
|
-
|
|
5
|
-
/* Font smoothing */
|
|
6
|
-
.antialiased {
|
|
7
|
-
-webkit-font-smoothing: antialiased;
|
|
8
|
-
-moz-osx-font-smoothing: grayscale;
|
|
9
|
-
}
|
|
10
|
-
.subpixel-antialiased {
|
|
11
|
-
-webkit-font-smoothing: auto;
|
|
12
|
-
-moz-osx-font-smoothing: auto;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/* Font stretch */
|
|
16
|
-
.font-stretch-ultra-condensed { font-stretch: ultra-condensed; }
|
|
17
|
-
.font-stretch-extra-condensed { font-stretch: extra-condensed; }
|
|
18
|
-
.font-stretch-condensed { font-stretch: condensed; }
|
|
19
|
-
.font-stretch-semi-condensed { font-stretch: semi-condensed; }
|
|
20
|
-
.font-stretch-normal { font-stretch: normal; }
|
|
21
|
-
.font-stretch-semi-expanded { font-stretch: semi-expanded; }
|
|
22
|
-
.font-stretch-expanded { font-stretch: expanded; }
|
|
23
|
-
.font-stretch-extra-expanded { font-stretch: extra-expanded; }
|
|
24
|
-
.font-stretch-ultra-expanded { font-stretch: ultra-expanded; }
|
|
25
|
-
|
|
26
|
-
/* Line clamp */
|
|
27
|
-
.line-clamp-none {
|
|
28
|
-
overflow: visible;
|
|
29
|
-
display: block;
|
|
30
|
-
-webkit-box-orient: horizontal;
|
|
31
|
-
-webkit-line-clamp: unset;
|
|
32
|
-
}
|
|
33
|
-
.line-clamp-1,
|
|
34
|
-
.line-clamp-2,
|
|
35
|
-
.line-clamp-3,
|
|
36
|
-
.line-clamp-4,
|
|
37
|
-
.line-clamp-5,
|
|
38
|
-
.line-clamp-6 {
|
|
39
|
-
overflow: hidden;
|
|
40
|
-
display: -webkit-box;
|
|
41
|
-
-webkit-box-orient: vertical;
|
|
42
|
-
}
|
|
43
|
-
.line-clamp-1 { -webkit-line-clamp: 1; }
|
|
44
|
-
.line-clamp-2 { -webkit-line-clamp: 2; }
|
|
45
|
-
.line-clamp-3 { -webkit-line-clamp: 3; }
|
|
46
|
-
.line-clamp-4 { -webkit-line-clamp: 4; }
|
|
47
|
-
.line-clamp-5 { -webkit-line-clamp: 5; }
|
|
48
|
-
.line-clamp-6 { -webkit-line-clamp: 6; }
|
|
49
|
-
|
|
50
|
-
/* List style image */
|
|
51
|
-
.list-image-none { list-style-image: none; }
|
|
52
|
-
.list-image-check { list-style-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpath fill='%23059669' d='M10.3 3.3 5 8.6 1.7 5.3l1.1-1.1L5 6.4l4.2-4.2z'/%3E%3C/svg%3E"); }
|
|
53
|
-
.list-image-dot { list-style-image: url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%228%22 height=%228%22%3E%3Ccircle cx=%224%22 cy=%224%22 r=%223%22 fill=%22%233b82f6%22/%3E%3C/svg%3E'); }
|
|
54
|
-
|
|
55
|
-
/* Text overflow */
|
|
56
|
-
.truncate {
|
|
57
|
-
overflow: hidden;
|
|
58
|
-
text-overflow: ellipsis;
|
|
59
|
-
white-space: nowrap;
|
|
60
|
-
}
|
|
61
|
-
.text-ellipsis { text-overflow: ellipsis; }
|
|
62
|
-
.text-clip { text-overflow: clip; }
|
|
63
|
-
|
|
64
|
-
/* Text wrap */
|
|
65
|
-
.text-wrap { text-wrap: wrap; }
|
|
66
|
-
.text-nowrap { text-wrap: nowrap; }
|
|
67
|
-
.text-balance { text-wrap: balance; }
|
|
68
|
-
.text-pretty { text-wrap: pretty; }
|
|
69
|
-
|
|
70
|
-
/* Text indent */
|
|
71
|
-
.indent-0 { text-indent: 0; }
|
|
72
|
-
.indent-1 { text-indent: 0.25rem; }
|
|
73
|
-
.indent-2 { text-indent: 0.5rem; }
|
|
74
|
-
.indent-4 { text-indent: 1rem; }
|
|
75
|
-
.indent-8 { text-indent: 2rem; }
|
|
76
|
-
|
|
77
|
-
/* Overflow wrap */
|
|
78
|
-
.wrap-normal { overflow-wrap: normal; }
|
|
79
|
-
.wrap-break-word { overflow-wrap: break-word; }
|
|
80
|
-
.wrap-anywhere { overflow-wrap: anywhere; }
|
|
81
|
-
|
|
82
|
-
/* Hyphens */
|
|
83
|
-
.hyphens-none { hyphens: none; }
|
|
84
|
-
.hyphens-manual { hyphens: manual; }
|
|
85
|
-
.hyphens-auto { hyphens: auto; }
|
|
86
|
-
|
|
87
|
-
/* Content helpers */
|
|
88
|
-
.content-none::before,
|
|
89
|
-
.content-none::after { content: none; }
|
|
90
|
-
.content-empty::before,
|
|
91
|
-
.content-empty::after { content: ""; }
|
|
92
|
-
.content-open-quote::before { content: open-quote; }
|
|
93
|
-
.content-close-quote::after { content: close-quote; }
|
|
94
|
-
.content-attr::before { content: attr(data-oc-content); }
|
|
95
|
-
|
|
96
|
-
/* Quotes */
|
|
97
|
-
.quotes-none { quotes: none; }
|
|
98
|
-
.quotes-auto { quotes: auto; }
|
|
99
|
-
.quotes-french { quotes: "\00AB" "\00BB" "\2039" "\203A"; }
|
|
100
|
-
.quotes-german { quotes: "\201E" "\201C" "\201A" "\2018"; }
|
|
101
|
-
.quotes-english { quotes: "\201C" "\201D" "\2018" "\2019"; }
|
|
102
|
-
|
|
103
|
-
/* Counters — reset/increment the "oc" counter and print it with ::before */
|
|
104
|
-
.counter-reset { counter-reset: oc; }
|
|
105
|
-
.counter-reset-none { counter-reset: none; }
|
|
106
|
-
.counter-increment { counter-increment: oc; }
|
|
107
|
-
.counter-increment-none { counter-increment: none; }
|
|
108
|
-
.counter-set-0 { counter-set: oc 0; }
|
|
109
|
-
.content-counter::before { content: counter(oc) ". "; }
|
|
110
|
-
.content-counters::before { content: counters(oc, ".") " "; }
|
|
111
|
-
|
|
112
|
-
/* List style type — newer predefined counter styles */
|
|
113
|
-
.list-disclosure-open { list-style-type: disclosure-open; }
|
|
114
|
-
.list-disclosure-closed { list-style-type: disclosure-closed; }
|
|
115
|
-
.list-l-armenian { list-style-type: lower-armenian; }
|
|
116
|
-
.list-cjk-decimal { list-style-type: cjk-decimal; }
|
|
117
|
-
|
|
118
|
-
/* Line height keywords — unitless, scale with the font size (the .lineheight-{n} classes are fixed rem values) */
|
|
119
|
-
.lineheight-none { line-height: 1; }
|
|
120
|
-
.lineheight-tight { line-height: 1.25; }
|
|
121
|
-
.lineheight-snug { line-height: 1.375; }
|
|
122
|
-
.lineheight-relaxed { line-height: 1.625; }
|
|
123
|
-
.lineheight-loose { line-height: 2; }
|
|
124
|
-
.lineheight-normal { line-height: normal; }
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_typography_advanced.scss
|
|
3
|
+
// Map: smoothing/stretch/clamp/list-image/text-overflow/wrap/indent/overflow-wrap/hyphens/content/quotes/counters/line-height keywords
|
|
4
|
+
|
|
5
|
+
/* Font smoothing */
|
|
6
|
+
.antialiased {
|
|
7
|
+
-webkit-font-smoothing: antialiased;
|
|
8
|
+
-moz-osx-font-smoothing: grayscale;
|
|
9
|
+
}
|
|
10
|
+
.subpixel-antialiased {
|
|
11
|
+
-webkit-font-smoothing: auto;
|
|
12
|
+
-moz-osx-font-smoothing: auto;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Font stretch */
|
|
16
|
+
.font-stretch-ultra-condensed { font-stretch: ultra-condensed; }
|
|
17
|
+
.font-stretch-extra-condensed { font-stretch: extra-condensed; }
|
|
18
|
+
.font-stretch-condensed { font-stretch: condensed; }
|
|
19
|
+
.font-stretch-semi-condensed { font-stretch: semi-condensed; }
|
|
20
|
+
.font-stretch-normal { font-stretch: normal; }
|
|
21
|
+
.font-stretch-semi-expanded { font-stretch: semi-expanded; }
|
|
22
|
+
.font-stretch-expanded { font-stretch: expanded; }
|
|
23
|
+
.font-stretch-extra-expanded { font-stretch: extra-expanded; }
|
|
24
|
+
.font-stretch-ultra-expanded { font-stretch: ultra-expanded; }
|
|
25
|
+
|
|
26
|
+
/* Line clamp */
|
|
27
|
+
.line-clamp-none {
|
|
28
|
+
overflow: visible;
|
|
29
|
+
display: block;
|
|
30
|
+
-webkit-box-orient: horizontal;
|
|
31
|
+
-webkit-line-clamp: unset;
|
|
32
|
+
}
|
|
33
|
+
.line-clamp-1,
|
|
34
|
+
.line-clamp-2,
|
|
35
|
+
.line-clamp-3,
|
|
36
|
+
.line-clamp-4,
|
|
37
|
+
.line-clamp-5,
|
|
38
|
+
.line-clamp-6 {
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
display: -webkit-box;
|
|
41
|
+
-webkit-box-orient: vertical;
|
|
42
|
+
}
|
|
43
|
+
.line-clamp-1 { -webkit-line-clamp: 1; }
|
|
44
|
+
.line-clamp-2 { -webkit-line-clamp: 2; }
|
|
45
|
+
.line-clamp-3 { -webkit-line-clamp: 3; }
|
|
46
|
+
.line-clamp-4 { -webkit-line-clamp: 4; }
|
|
47
|
+
.line-clamp-5 { -webkit-line-clamp: 5; }
|
|
48
|
+
.line-clamp-6 { -webkit-line-clamp: 6; }
|
|
49
|
+
|
|
50
|
+
/* List style image */
|
|
51
|
+
.list-image-none { list-style-image: none; }
|
|
52
|
+
.list-image-check { list-style-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12'%3E%3Cpath fill='%23059669' d='M10.3 3.3 5 8.6 1.7 5.3l1.1-1.1L5 6.4l4.2-4.2z'/%3E%3C/svg%3E"); }
|
|
53
|
+
.list-image-dot { list-style-image: url('data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%228%22 height=%228%22%3E%3Ccircle cx=%224%22 cy=%224%22 r=%223%22 fill=%22%233b82f6%22/%3E%3C/svg%3E'); }
|
|
54
|
+
|
|
55
|
+
/* Text overflow */
|
|
56
|
+
.truncate {
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
text-overflow: ellipsis;
|
|
59
|
+
white-space: nowrap;
|
|
60
|
+
}
|
|
61
|
+
.text-ellipsis { text-overflow: ellipsis; }
|
|
62
|
+
.text-clip { text-overflow: clip; }
|
|
63
|
+
|
|
64
|
+
/* Text wrap */
|
|
65
|
+
.text-wrap { text-wrap: wrap; }
|
|
66
|
+
.text-nowrap { text-wrap: nowrap; }
|
|
67
|
+
.text-balance { text-wrap: balance; }
|
|
68
|
+
.text-pretty { text-wrap: pretty; }
|
|
69
|
+
|
|
70
|
+
/* Text indent */
|
|
71
|
+
.indent-0 { text-indent: 0; }
|
|
72
|
+
.indent-1 { text-indent: 0.25rem; }
|
|
73
|
+
.indent-2 { text-indent: 0.5rem; }
|
|
74
|
+
.indent-4 { text-indent: 1rem; }
|
|
75
|
+
.indent-8 { text-indent: 2rem; }
|
|
76
|
+
|
|
77
|
+
/* Overflow wrap */
|
|
78
|
+
.wrap-normal { overflow-wrap: normal; }
|
|
79
|
+
.wrap-break-word { overflow-wrap: break-word; }
|
|
80
|
+
.wrap-anywhere { overflow-wrap: anywhere; }
|
|
81
|
+
|
|
82
|
+
/* Hyphens */
|
|
83
|
+
.hyphens-none { hyphens: none; }
|
|
84
|
+
.hyphens-manual { hyphens: manual; }
|
|
85
|
+
.hyphens-auto { hyphens: auto; }
|
|
86
|
+
|
|
87
|
+
/* Content helpers */
|
|
88
|
+
.content-none::before,
|
|
89
|
+
.content-none::after { content: none; }
|
|
90
|
+
.content-empty::before,
|
|
91
|
+
.content-empty::after { content: ""; }
|
|
92
|
+
.content-open-quote::before { content: open-quote; }
|
|
93
|
+
.content-close-quote::after { content: close-quote; }
|
|
94
|
+
.content-attr::before { content: attr(data-oc-content); }
|
|
95
|
+
|
|
96
|
+
/* Quotes */
|
|
97
|
+
.quotes-none { quotes: none; }
|
|
98
|
+
.quotes-auto { quotes: auto; }
|
|
99
|
+
.quotes-french { quotes: "\00AB" "\00BB" "\2039" "\203A"; }
|
|
100
|
+
.quotes-german { quotes: "\201E" "\201C" "\201A" "\2018"; }
|
|
101
|
+
.quotes-english { quotes: "\201C" "\201D" "\2018" "\2019"; }
|
|
102
|
+
|
|
103
|
+
/* Counters — reset/increment the "oc" counter and print it with ::before */
|
|
104
|
+
.counter-reset { counter-reset: oc; }
|
|
105
|
+
.counter-reset-none { counter-reset: none; }
|
|
106
|
+
.counter-increment { counter-increment: oc; }
|
|
107
|
+
.counter-increment-none { counter-increment: none; }
|
|
108
|
+
.counter-set-0 { counter-set: oc 0; }
|
|
109
|
+
.content-counter::before { content: counter(oc) ". "; }
|
|
110
|
+
.content-counters::before { content: counters(oc, ".") " "; }
|
|
111
|
+
|
|
112
|
+
/* List style type — newer predefined counter styles */
|
|
113
|
+
.list-disclosure-open { list-style-type: disclosure-open; }
|
|
114
|
+
.list-disclosure-closed { list-style-type: disclosure-closed; }
|
|
115
|
+
.list-l-armenian { list-style-type: lower-armenian; }
|
|
116
|
+
.list-cjk-decimal { list-style-type: cjk-decimal; }
|
|
117
|
+
|
|
118
|
+
/* Line height keywords — unitless, scale with the font size (the .lineheight-{n} classes are fixed rem values) */
|
|
119
|
+
.lineheight-none { line-height: 1; }
|
|
120
|
+
.lineheight-tight { line-height: 1.25; }
|
|
121
|
+
.lineheight-snug { line-height: 1.375; }
|
|
122
|
+
.lineheight-relaxed { line-height: 1.625; }
|
|
123
|
+
.lineheight-loose { line-height: 2; }
|
|
124
|
+
.lineheight-normal { line-height: normal; }
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_typography_modern.scss
|
|
3
|
-
// Description: Modern typography utilities — text-box trimming, whitespace collapsing, CJK spacing,
|
|
4
|
-
// initial letters, emphasis marks and font rendering controls.
|
|
5
|
-
// Copyright: 2021-2026 Birdycom
|
|
6
|
-
// Author: Serge Cools
|
|
7
|
-
// Version: 0.3.0
|
|
8
|
-
// Framework: OmniaCSS
|
|
9
|
-
// Purpose: Generate .text-box-*, .text-stable, .whitespace-collapse-*, .text-spacing-trim-*, .text-autospace-*,
|
|
10
|
-
// .hanging-*, .initial-letter-*, .emphasis-*, .font-optical-*, .font-kerning-*, .tab-* and .break-auto-phrase.
|
|
11
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/text-box
|
|
12
|
-
// Note: complements _typography_advanced.scss (text-wrap, line-clamp, hyphens, ...).
|
|
13
|
-
// Map: text-box -> text-wrap-style -> white-space-collapse -> CJK spacing -> hanging punctuation
|
|
14
|
-
// -> initial-letter -> text-emphasis -> font rendering -> tab-size -> word-break
|
|
15
|
-
|
|
16
|
-
/* Text box — trim the space above cap height and below the baseline */
|
|
17
|
-
.text-box-normal { text-box: normal; }
|
|
18
|
-
.text-box-trim { text-box: trim-both cap alphabetic; }
|
|
19
|
-
.text-box-trim-start { text-box-trim: trim-start; text-box-edge: cap alphabetic; }
|
|
20
|
-
.text-box-trim-end { text-box-trim: trim-end; text-box-edge: cap alphabetic; }
|
|
21
|
-
.text-box-trim-ex { text-box: trim-both ex alphabetic; }
|
|
22
|
-
|
|
23
|
-
/* Text wrap style */
|
|
24
|
-
.text-stable { text-wrap-style: stable; }
|
|
25
|
-
.text-wrap-auto { text-wrap-style: auto; }
|
|
26
|
-
|
|
27
|
-
/* White space collapse */
|
|
28
|
-
.whitespace-collapse { white-space-collapse: collapse; }
|
|
29
|
-
.whitespace-preserve { white-space-collapse: preserve; }
|
|
30
|
-
.whitespace-preserve-breaks { white-space-collapse: preserve-breaks; }
|
|
31
|
-
.whitespace-preserve-spaces { white-space-collapse: preserve-spaces; }
|
|
32
|
-
.whitespace-break-spaces { white-space-collapse: break-spaces; }
|
|
33
|
-
|
|
34
|
-
/* Text spacing trim (CJK punctuation) */
|
|
35
|
-
.text-spacing-trim-normal { text-spacing-trim: normal; }
|
|
36
|
-
.text-spacing-trim-auto { text-spacing-trim: auto; }
|
|
37
|
-
.text-spacing-trim-space-all { text-spacing-trim: space-all; }
|
|
38
|
-
.text-spacing-trim-space-first { text-spacing-trim: space-first; }
|
|
39
|
-
|
|
40
|
-
/* Text autospace (space between CJK and Latin/numbers) */
|
|
41
|
-
.text-autospace-normal { text-autospace: normal; }
|
|
42
|
-
.text-autospace-auto { text-autospace: auto; }
|
|
43
|
-
.text-autospace-none { text-autospace: no-autospace; }
|
|
44
|
-
|
|
45
|
-
/* Hanging punctuation */
|
|
46
|
-
.hanging-none { hanging-punctuation: none; }
|
|
47
|
-
.hanging-first { hanging-punctuation: first; }
|
|
48
|
-
.hanging-last { hanging-punctuation: last; }
|
|
49
|
-
.hanging-first-last { hanging-punctuation: first allow-end last; }
|
|
50
|
-
|
|
51
|
-
/* Initial letter (drop caps) — applied to ::first-letter */
|
|
52
|
-
.initial-letter-normal::first-letter { initial-letter: normal; }
|
|
53
|
-
.initial-letter-2::first-letter { initial-letter: 2; }
|
|
54
|
-
.initial-letter-3::first-letter { initial-letter: 3; }
|
|
55
|
-
.initial-letter-3-2::first-letter { initial-letter: 3 2; }
|
|
56
|
-
|
|
57
|
-
/* Text emphasis */
|
|
58
|
-
.emphasis-none { text-emphasis: none; }
|
|
59
|
-
.emphasis-dot { text-emphasis: filled dot; }
|
|
60
|
-
.emphasis-circle { text-emphasis: filled circle; }
|
|
61
|
-
.emphasis-open-circle { text-emphasis: open circle; }
|
|
62
|
-
.emphasis-sesame { text-emphasis: filled sesame; }
|
|
63
|
-
.emphasis-triangle { text-emphasis: filled triangle; }
|
|
64
|
-
.emphasis-over { text-emphasis-position: over right; }
|
|
65
|
-
.emphasis-under { text-emphasis-position: under right; }
|
|
66
|
-
|
|
67
|
-
/* Font rendering */
|
|
68
|
-
.font-optical-auto { font-optical-sizing: auto; }
|
|
69
|
-
.font-optical-none { font-optical-sizing: none; }
|
|
70
|
-
.font-kerning-auto { font-kerning: auto; }
|
|
71
|
-
.font-kerning-normal { font-kerning: normal; }
|
|
72
|
-
.font-kerning-none { font-kerning: none; }
|
|
73
|
-
.font-synthesis-none { font-synthesis: none; }
|
|
74
|
-
.font-palette-light { font-palette: light; }
|
|
75
|
-
.font-palette-dark { font-palette: dark; }
|
|
76
|
-
|
|
77
|
-
/* Tab size */
|
|
78
|
-
.tab-2 { tab-size: 2; }
|
|
79
|
-
.tab-4 { tab-size: 4; }
|
|
80
|
-
.tab-8 { tab-size: 8; }
|
|
81
|
-
|
|
82
|
-
/* Word break — phrase-aware line breaking (Japanese) */
|
|
83
|
-
.break-auto-phrase { word-break: auto-phrase; }
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_typography_modern.scss
|
|
3
|
+
// Description: Modern typography utilities — text-box trimming, whitespace collapsing, CJK spacing,
|
|
4
|
+
// initial letters, emphasis marks and font rendering controls.
|
|
5
|
+
// Copyright: 2021-2026 Birdycom
|
|
6
|
+
// Author: Serge Cools
|
|
7
|
+
// Version: 0.3.0
|
|
8
|
+
// Framework: OmniaCSS
|
|
9
|
+
// Purpose: Generate .text-box-*, .text-stable, .whitespace-collapse-*, .text-spacing-trim-*, .text-autospace-*,
|
|
10
|
+
// .hanging-*, .initial-letter-*, .emphasis-*, .font-optical-*, .font-kerning-*, .tab-* and .break-auto-phrase.
|
|
11
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/CSS/text-box
|
|
12
|
+
// Note: complements _typography_advanced.scss (text-wrap, line-clamp, hyphens, ...).
|
|
13
|
+
// Map: text-box -> text-wrap-style -> white-space-collapse -> CJK spacing -> hanging punctuation
|
|
14
|
+
// -> initial-letter -> text-emphasis -> font rendering -> tab-size -> word-break
|
|
15
|
+
|
|
16
|
+
/* Text box — trim the space above cap height and below the baseline */
|
|
17
|
+
.text-box-normal { text-box: normal; }
|
|
18
|
+
.text-box-trim { text-box: trim-both cap alphabetic; }
|
|
19
|
+
.text-box-trim-start { text-box-trim: trim-start; text-box-edge: cap alphabetic; }
|
|
20
|
+
.text-box-trim-end { text-box-trim: trim-end; text-box-edge: cap alphabetic; }
|
|
21
|
+
.text-box-trim-ex { text-box: trim-both ex alphabetic; }
|
|
22
|
+
|
|
23
|
+
/* Text wrap style */
|
|
24
|
+
.text-stable { text-wrap-style: stable; }
|
|
25
|
+
.text-wrap-auto { text-wrap-style: auto; }
|
|
26
|
+
|
|
27
|
+
/* White space collapse */
|
|
28
|
+
.whitespace-collapse { white-space-collapse: collapse; }
|
|
29
|
+
.whitespace-preserve { white-space-collapse: preserve; }
|
|
30
|
+
.whitespace-preserve-breaks { white-space-collapse: preserve-breaks; }
|
|
31
|
+
.whitespace-preserve-spaces { white-space-collapse: preserve-spaces; }
|
|
32
|
+
.whitespace-break-spaces { white-space-collapse: break-spaces; }
|
|
33
|
+
|
|
34
|
+
/* Text spacing trim (CJK punctuation) */
|
|
35
|
+
.text-spacing-trim-normal { text-spacing-trim: normal; }
|
|
36
|
+
.text-spacing-trim-auto { text-spacing-trim: auto; }
|
|
37
|
+
.text-spacing-trim-space-all { text-spacing-trim: space-all; }
|
|
38
|
+
.text-spacing-trim-space-first { text-spacing-trim: space-first; }
|
|
39
|
+
|
|
40
|
+
/* Text autospace (space between CJK and Latin/numbers) */
|
|
41
|
+
.text-autospace-normal { text-autospace: normal; }
|
|
42
|
+
.text-autospace-auto { text-autospace: auto; }
|
|
43
|
+
.text-autospace-none { text-autospace: no-autospace; }
|
|
44
|
+
|
|
45
|
+
/* Hanging punctuation */
|
|
46
|
+
.hanging-none { hanging-punctuation: none; }
|
|
47
|
+
.hanging-first { hanging-punctuation: first; }
|
|
48
|
+
.hanging-last { hanging-punctuation: last; }
|
|
49
|
+
.hanging-first-last { hanging-punctuation: first allow-end last; }
|
|
50
|
+
|
|
51
|
+
/* Initial letter (drop caps) — applied to ::first-letter */
|
|
52
|
+
.initial-letter-normal::first-letter { initial-letter: normal; }
|
|
53
|
+
.initial-letter-2::first-letter { initial-letter: 2; }
|
|
54
|
+
.initial-letter-3::first-letter { initial-letter: 3; }
|
|
55
|
+
.initial-letter-3-2::first-letter { initial-letter: 3 2; }
|
|
56
|
+
|
|
57
|
+
/* Text emphasis */
|
|
58
|
+
.emphasis-none { text-emphasis: none; }
|
|
59
|
+
.emphasis-dot { text-emphasis: filled dot; }
|
|
60
|
+
.emphasis-circle { text-emphasis: filled circle; }
|
|
61
|
+
.emphasis-open-circle { text-emphasis: open circle; }
|
|
62
|
+
.emphasis-sesame { text-emphasis: filled sesame; }
|
|
63
|
+
.emphasis-triangle { text-emphasis: filled triangle; }
|
|
64
|
+
.emphasis-over { text-emphasis-position: over right; }
|
|
65
|
+
.emphasis-under { text-emphasis-position: under right; }
|
|
66
|
+
|
|
67
|
+
/* Font rendering */
|
|
68
|
+
.font-optical-auto { font-optical-sizing: auto; }
|
|
69
|
+
.font-optical-none { font-optical-sizing: none; }
|
|
70
|
+
.font-kerning-auto { font-kerning: auto; }
|
|
71
|
+
.font-kerning-normal { font-kerning: normal; }
|
|
72
|
+
.font-kerning-none { font-kerning: none; }
|
|
73
|
+
.font-synthesis-none { font-synthesis: none; }
|
|
74
|
+
.font-palette-light { font-palette: light; }
|
|
75
|
+
.font-palette-dark { font-palette: dark; }
|
|
76
|
+
|
|
77
|
+
/* Tab size */
|
|
78
|
+
.tab-2 { tab-size: 2; }
|
|
79
|
+
.tab-4 { tab-size: 4; }
|
|
80
|
+
.tab-8 { tab-size: 8; }
|
|
81
|
+
|
|
82
|
+
/* Word break — phrase-aware line breaking (Japanese) */
|
|
83
|
+
.break-auto-phrase { word-break: auto-phrase; }
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
// SCSS Document
|
|
2
|
-
// File: src/scss/utilities/_view_transitions.scss
|
|
3
|
-
// Description: View Transitions utilities — name and group elements for animated view changes.
|
|
4
|
-
// Copyright: 2021-2026 Birdycom
|
|
5
|
-
// Author: Serge Cools
|
|
6
|
-
// Version: 0.3.0
|
|
7
|
-
// Framework: OmniaCSS
|
|
8
|
-
// Purpose: Generate .vt-name-*, .vt-class-* classes and the opt-in mixin for cross-document transitions.
|
|
9
|
-
// Reference: https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API
|
|
10
|
-
// Note: @view-transition { navigation: auto; } is a global at-rule. It is NOT emitted by default;
|
|
11
|
-
// include the mixin view-transition-navigation() in your own stylesheet to opt in.
|
|
12
|
-
// Map: view-transition-name -> view-transition-class -> pseudo-element animations -> opt-in mixin
|
|
13
|
-
|
|
14
|
-
/* View transition name — each name must be unique on the page */
|
|
15
|
-
.vt-name-none { view-transition-name: none; }
|
|
16
|
-
.vt-name-auto { view-transition-name: auto; }
|
|
17
|
-
.vt-name-match-element { view-transition-name: match-element; }
|
|
18
|
-
.vt-name-hero { view-transition-name: hero; }
|
|
19
|
-
.vt-name-header { view-transition-name: header; }
|
|
20
|
-
.vt-name-main { view-transition-name: main; }
|
|
21
|
-
.vt-name-media { view-transition-name: media; }
|
|
22
|
-
|
|
23
|
-
/* View transition class — share transition styles between named elements */
|
|
24
|
-
.vt-class-card { view-transition-class: card; }
|
|
25
|
-
.vt-class-fade { view-transition-class: fade; }
|
|
26
|
-
.vt-class-slide { view-transition-class: slide; }
|
|
27
|
-
|
|
28
|
-
/* Preset animations for the classes above */
|
|
29
|
-
::view-transition-group(*.fade) {
|
|
30
|
-
animation-duration: 200ms;
|
|
31
|
-
}
|
|
32
|
-
::view-transition-old(*.slide) {
|
|
33
|
-
animation: oc-vt-slide-out 250ms ease-in both;
|
|
34
|
-
}
|
|
35
|
-
::view-transition-new(*.slide) {
|
|
36
|
-
animation: oc-vt-slide-in 250ms ease-out both;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@keyframes oc-vt-slide-out {
|
|
40
|
-
to { opacity: 0; transform: translateX(-2rem); }
|
|
41
|
-
}
|
|
42
|
-
@keyframes oc-vt-slide-in {
|
|
43
|
-
from { opacity: 0; transform: translateX(2rem); }
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/* Respect reduced motion */
|
|
47
|
-
@media (prefers-reduced-motion: reduce) {
|
|
48
|
-
::view-transition-group(*),
|
|
49
|
-
::view-transition-old(*),
|
|
50
|
-
::view-transition-new(*) {
|
|
51
|
-
animation: none !important;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/// Opt in to cross-document (MPA) view transitions.
|
|
56
|
-
/// @group ViewTransitions
|
|
57
|
-
/// @example scss
|
|
58
|
-
/// @use 'utilities/view_transitions' as vt;
|
|
59
|
-
/// @include vt.view-transition-navigation;
|
|
60
|
-
@mixin view-transition-navigation {
|
|
61
|
-
@view-transition {
|
|
62
|
-
navigation: auto;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
// SCSS Document
|
|
2
|
+
// File: src/scss/utilities/_view_transitions.scss
|
|
3
|
+
// Description: View Transitions utilities — name and group elements for animated view changes.
|
|
4
|
+
// Copyright: 2021-2026 Birdycom
|
|
5
|
+
// Author: Serge Cools
|
|
6
|
+
// Version: 0.3.0
|
|
7
|
+
// Framework: OmniaCSS
|
|
8
|
+
// Purpose: Generate .vt-name-*, .vt-class-* classes and the opt-in mixin for cross-document transitions.
|
|
9
|
+
// Reference: https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API
|
|
10
|
+
// Note: @view-transition { navigation: auto; } is a global at-rule. It is NOT emitted by default;
|
|
11
|
+
// include the mixin view-transition-navigation() in your own stylesheet to opt in.
|
|
12
|
+
// Map: view-transition-name -> view-transition-class -> pseudo-element animations -> opt-in mixin
|
|
13
|
+
|
|
14
|
+
/* View transition name — each name must be unique on the page */
|
|
15
|
+
.vt-name-none { view-transition-name: none; }
|
|
16
|
+
.vt-name-auto { view-transition-name: auto; }
|
|
17
|
+
.vt-name-match-element { view-transition-name: match-element; }
|
|
18
|
+
.vt-name-hero { view-transition-name: hero; }
|
|
19
|
+
.vt-name-header { view-transition-name: header; }
|
|
20
|
+
.vt-name-main { view-transition-name: main; }
|
|
21
|
+
.vt-name-media { view-transition-name: media; }
|
|
22
|
+
|
|
23
|
+
/* View transition class — share transition styles between named elements */
|
|
24
|
+
.vt-class-card { view-transition-class: card; }
|
|
25
|
+
.vt-class-fade { view-transition-class: fade; }
|
|
26
|
+
.vt-class-slide { view-transition-class: slide; }
|
|
27
|
+
|
|
28
|
+
/* Preset animations for the classes above */
|
|
29
|
+
::view-transition-group(*.fade) {
|
|
30
|
+
animation-duration: 200ms;
|
|
31
|
+
}
|
|
32
|
+
::view-transition-old(*.slide) {
|
|
33
|
+
animation: oc-vt-slide-out 250ms ease-in both;
|
|
34
|
+
}
|
|
35
|
+
::view-transition-new(*.slide) {
|
|
36
|
+
animation: oc-vt-slide-in 250ms ease-out both;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@keyframes oc-vt-slide-out {
|
|
40
|
+
to { opacity: 0; transform: translateX(-2rem); }
|
|
41
|
+
}
|
|
42
|
+
@keyframes oc-vt-slide-in {
|
|
43
|
+
from { opacity: 0; transform: translateX(2rem); }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Respect reduced motion */
|
|
47
|
+
@media (prefers-reduced-motion: reduce) {
|
|
48
|
+
::view-transition-group(*),
|
|
49
|
+
::view-transition-old(*),
|
|
50
|
+
::view-transition-new(*) {
|
|
51
|
+
animation: none !important;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Opt in to cross-document (MPA) view transitions.
|
|
56
|
+
/// @group ViewTransitions
|
|
57
|
+
/// @example scss
|
|
58
|
+
/// @use 'utilities/view_transitions' as vt;
|
|
59
|
+
/// @include vt.view-transition-navigation;
|
|
60
|
+
@mixin view-transition-navigation {
|
|
61
|
+
@view-transition {
|
|
62
|
+
navigation: auto;
|
|
63
|
+
}
|
|
64
|
+
}
|