@nuvoui/core 1.1.8 → 1.2.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 (39) hide show
  1. package/README.md +90 -35
  2. package/dist/nuvoui.css +28531 -0
  3. package/dist/nuvoui.css.map +1 -0
  4. package/dist/nuvoui.min.css +2 -1
  5. package/dist/nuvoui.min.css.map +1 -0
  6. package/package.json +48 -27
  7. package/src/styles/abstracts/_config.scss +157 -0
  8. package/src/styles/abstracts/_functions.scss +81 -0
  9. package/src/styles/abstracts/_index.scss +2 -0
  10. package/src/styles/base/_base.scss +2 -2
  11. package/src/styles/base/_index.scss +2 -0
  12. package/src/styles/base/_reset.scss +8 -6
  13. package/src/styles/index.scss +11 -30
  14. package/src/styles/layouts/_container.scss +7 -23
  15. package/src/styles/layouts/_flex.scss +116 -113
  16. package/src/styles/layouts/_grid.scss +70 -100
  17. package/src/styles/layouts/_index.scss +3 -0
  18. package/src/styles/mixins-map.scss +1 -1515
  19. package/src/styles/themes/_index.scss +1 -0
  20. package/src/styles/themes/_theme.scss +175 -55
  21. package/src/styles/utilities/_alignment.scss +9 -7
  22. package/src/styles/utilities/_animations.scss +65 -61
  23. package/src/styles/utilities/_borders.scss +283 -18
  24. package/src/styles/utilities/_colors.scss +68 -49
  25. package/src/styles/utilities/_container-queries.scss +19 -18
  26. package/src/styles/utilities/_display.scss +59 -57
  27. package/src/styles/utilities/_helpers.scss +110 -108
  28. package/src/styles/utilities/_index.scss +19 -0
  29. package/src/styles/utilities/_media-queries.scss +68 -15
  30. package/src/styles/utilities/_opacity.scss +51 -27
  31. package/src/styles/utilities/_position.scss +38 -37
  32. package/src/styles/utilities/_shadows.scss +195 -137
  33. package/src/styles/utilities/_sizing.scss +74 -71
  34. package/src/styles/utilities/_spacing.scss +117 -99
  35. package/src/styles/utilities/_tooltips.scss +153 -105
  36. package/src/styles/utilities/_transitions.scss +77 -73
  37. package/src/styles/utilities/_typography.scss +23 -26
  38. package/src/styles/utilities/_functions.scss +0 -84
  39. package/src/styles/utilities/_variables.scss +0 -126
@@ -1,128 +1,130 @@
1
- @use 'sass:string';
2
- @use 'sass:math';
3
- @use 'sass:map';
4
- @use 'sass:list';
5
- @use 'sass:meta';
6
- @use 'variables' as *;
1
+ @use "sass:string";
2
+ @use "sass:math";
3
+ @use "sass:map";
4
+ @use "sass:list";
5
+ @use "sass:meta";
6
+
7
+ @use "../abstracts/config" as *;
7
8
 
8
9
  @if $enable-debuger {
9
- .NuvoUI-Debugger-Wrapper {
10
- color: #fff;
11
- font-family: Arial, sans-serif;
12
- position: fixed;
13
- z-index: 999999;
14
- inset: 10px auto auto 10px;
15
- pointer-events: none;
16
-
17
- &.top-left {
18
- inset: 10px auto auto 10px;
19
- text-align: left;
20
- }
10
+ .NuvoUI-Debugger-Wrapper {
11
+ color: #fff;
12
+ font-family: Arial, sans-serif;
13
+ position: fixed;
14
+ z-index: 999999;
15
+ inset: 10px auto auto 10px;
16
+ pointer-events: none;
17
+
18
+ &.top-left {
19
+ inset: 10px auto auto 10px;
20
+ text-align: left;
21
+ }
21
22
 
22
- &.top-right {
23
- inset: 10px 10px auto auto;
24
- text-align: right;
25
- }
23
+ &.top-right {
24
+ inset: 10px 10px auto auto;
25
+ text-align: right;
26
+ }
26
27
 
27
- &.bottom-left {
28
- inset: auto auto 10px 10px;
29
- text-align: left;
30
- }
28
+ &.bottom-left {
29
+ inset: auto auto 10px 10px;
30
+ text-align: left;
31
+ }
31
32
 
32
- &.bottom-right {
33
- inset: auto 10px 10px auto;
34
- text-align: right;
35
- }
33
+ &.bottom-right {
34
+ inset: auto 10px 10px auto;
35
+ text-align: right;
36
+ }
36
37
 
37
- .NuvoUI-Debugger-Main, .NuvoUI-Debugger{
38
- padding: 10px;
39
- background-color: rgb(0 0 0 / 80%);
40
- border-radius: 5px;
41
- border: 1px solid green;
42
- box-shadow: 0 0 2px 0 #fff;
43
- pointer-events: none;
44
- }
38
+ .NuvoUI-Debugger-Main,
39
+ .NuvoUI-Debugger {
40
+ padding: 10px;
41
+ background-color: rgb(0 0 0 / 80%);
42
+ border-radius: 5px;
43
+ border: 1px solid green;
44
+ box-shadow: 0 0 2px 0 #fff;
45
+ pointer-events: none;
46
+ }
45
47
 
46
- .NuvoUI-Debugger-Main {
47
- $breakpoint-keys: map.keys($breakpoints);
48
- $total: list.length($breakpoint-keys);
48
+ .NuvoUI-Debugger-Main {
49
+ $breakpoint-keys: map.keys($breakpoints);
50
+ $total: list.length($breakpoint-keys);
49
51
 
50
- &::before,
51
- &::after {
52
- font-family: 'Courier New', Courier, monospace;
53
- font-size: 0.8em;
54
- display: block;
55
- }
52
+ &::before,
53
+ &::after {
54
+ font-family: "Courier New", Courier, monospace;
55
+ font-size: 0.8em;
56
+ display: block;
57
+ }
56
58
 
57
- &::before {
58
- font-weight: bold;
59
- }
59
+ &::before {
60
+ font-weight: bold;
61
+ }
60
62
 
61
- @for $i from 1 through $total {
62
- $current: list.nth($breakpoint-keys, $i);
63
- $current-width: map.get($breakpoints, $current);
64
-
65
- @if $i == 1 {
66
- @media (max-width: #{$current-width}) {
67
- &::before {
68
- content: "Screen: #{$current}";
69
- }
70
- }
71
- } @else {
72
- $prev: list.nth($breakpoint-keys, $i - 1);
73
- $prev-width: map.get($breakpoints, $prev);
74
-
75
- @media (min-width: #{$prev-width}) and (max-width: (#{$current-width} - 1)) {
76
- &::before {
77
- content: "Screen: #{$current}";
78
- }
79
- }
80
- }
63
+ @for $i from 1 through $total {
64
+ $current: list.nth($breakpoint-keys, $i);
65
+ $current-width: map.get($breakpoints, $current);
66
+
67
+ @if $i == 1 {
68
+ @media (max-width: #{$current-width}) {
69
+ &::before {
70
+ content: "Screen: #{$current}";
81
71
  }
72
+ }
73
+ } @else {
74
+ $prev: list.nth($breakpoint-keys, $i - 1);
75
+ $prev-width: map.get($breakpoints, $prev);
82
76
 
83
- &::after {
84
- content: attr(data-size);
77
+ @media (min-width: #{$prev-width}) and (max-width: (#{$current-width} - 1)) {
78
+ &::before {
79
+ content: "Screen: #{$current}";
85
80
  }
81
+ }
86
82
  }
83
+ }
87
84
 
88
- .NuvoUI-Debugger {
89
- margin-top: 10px;
85
+ &::after {
86
+ content: attr(data-size);
87
+ }
88
+ }
90
89
 
91
- &::before,
92
- &::after {
93
- font-family: 'Courier New', Courier, monospace;
94
- font-size: 0.8em;
95
- display: block;
96
- }
90
+ .NuvoUI-Debugger {
91
+ margin-top: 10px;
97
92
 
98
- &::before {
99
- font-weight: bold;
100
- content: attr(data-element);
101
- }
93
+ &::before,
94
+ &::after {
95
+ font-family: "Courier New", Courier, monospace;
96
+ font-size: 0.8em;
97
+ display: block;
98
+ }
102
99
 
103
- &::after {
104
- content: attr(data-size);
105
- }
106
- }
100
+ &::before {
101
+ font-weight: bold;
102
+ content: attr(data-element);
103
+ }
107
104
 
108
- .NuvoUI-Debugger-Close {
109
- color: #fff;
110
- cursor: pointer;
111
- font-size: 14px;
112
- pointer-events: auto;
113
- position: absolute;
114
- right: 0;
115
- top: 0;
116
- background: #00800199;
117
- border-radius: 20px;
118
- height: 14px;
119
- width: 14px;
120
- line-height: 14px;
121
- text-align: center;
122
-
123
- &:hover {
124
- background: #008001;
125
- }
126
- }
105
+ &::after {
106
+ content: attr(data-size);
107
+ }
108
+ }
109
+
110
+ .NuvoUI-Debugger-Close {
111
+ color: #fff;
112
+ cursor: pointer;
113
+ font-size: 14px;
114
+ pointer-events: auto;
115
+ position: absolute;
116
+ right: 0;
117
+ top: 0;
118
+ background: #00800199;
119
+ border-radius: 20px;
120
+ height: 14px;
121
+ width: 14px;
122
+ line-height: 14px;
123
+ text-align: center;
124
+
125
+ &:hover {
126
+ background: #008001;
127
+ }
127
128
  }
128
- }
129
+ }
130
+ }
@@ -0,0 +1,19 @@
1
+ @use "../abstracts/config" as cfg;
2
+
3
+ // Forward all utility files
4
+ @forward "alignment";
5
+ @forward "animations";
6
+ @forward "borders";
7
+ @forward "colors";
8
+ @forward "container-queries";
9
+ @forward "display";
10
+ @forward "helpers";
11
+ @forward "media-queries";
12
+ @forward "opacity";
13
+ @forward "position";
14
+ @forward "shadows";
15
+ @forward "sizing";
16
+ @forward "spacing";
17
+ @forward "tooltips";
18
+ @forward "transitions";
19
+ @forward "typography";
@@ -1,11 +1,11 @@
1
1
  // Section: Utilities
2
2
  // Module: Media Queries
3
3
 
4
- @use 'sass:map';
5
- @use 'sass:meta';
6
- @use './variables' as *;
7
- @use './functions' as FN;
8
-
4
+ @use "sass:map";
5
+ @use "sass:math";
6
+ @use "sass:meta";
7
+ @use "../abstracts" as *;
8
+ @use "../abstracts/functions" as FN;
9
9
 
10
10
  /**
11
11
  * @description Media query mixins.
@@ -13,13 +13,25 @@
13
13
  * @param {string} $type - The media query type (e.g. 'lg', 'md').
14
14
  */
15
15
  @mixin media-up($breakpoint) {
16
- @media screen and (min-width: FN.get-breakpoint-value($breakpoint)) {
16
+ $blueprint-value: FN.get-breakpoint-value($breakpoint);
17
+ $unit: math.unit($blueprint-value);
18
+ @if $unit == '' {
19
+ $blueprint-value: $blueprint-value * 1px;
20
+ $unit: 'px';
21
+ }
22
+
23
+ @media screen and (min-width: FN.get-breakpoint-value($blueprint-value)) {
17
24
  @content;
18
25
  }
19
26
  }
20
27
 
21
28
  @mixin media-down($breakpoint) {
22
- $val: FN.get-breakpoint-value($breakpoint) - 0.02px;
29
+ $blueprint-value: FN.get-breakpoint-value($breakpoint);
30
+ $unit: math.unit($blueprint-value);
31
+ @if $unit == '' {
32
+ $blueprint-value: $blueprint-value * 1px;
33
+ }
34
+ $val: $blueprint-value - 0.01;
23
35
  @media screen and (max-width: #{$val}) {
24
36
  @content;
25
37
  }
@@ -27,7 +39,13 @@
27
39
 
28
40
  @mixin media-between($lower, $upper) {
29
41
  $lower-val: FN.get-breakpoint-value($lower);
30
- $upper-val: FN.get-breakpoint-value($upper) - 0.02px;
42
+ $upper-val: FN.get-breakpoint-value($upper);
43
+ $unit: math.unit($upper-val);
44
+ @if $unit == '' {
45
+ $upper-val: $upper-val * 1px;
46
+ }
47
+ $upper-val: $blueprint-value - 0.01;
48
+
31
49
  @media screen and (min-width: #{$lower-val}) and (max-width: #{$upper-val}) {
32
50
  @content;
33
51
  }
@@ -37,13 +55,13 @@
37
55
  @mixin media-only($breakpoint) {
38
56
  $min: FN.get-breakpoint-value($breakpoint);
39
57
  $next-breakpoint: null;
40
-
58
+
41
59
  @each $name, $width in $breakpoints {
42
- @if $width > $min and (meta.type-of($next-breakpoint) == 'null' or $width < $next-breakpoint) {
60
+ @if $width > $min and (meta.type-of($next-breakpoint) == "null" or $width < $next-breakpoint) {
43
61
  $next-breakpoint: $width;
44
62
  }
45
63
  }
46
-
64
+
47
65
  @if $next-breakpoint {
48
66
  @media (min-width: #{$min}) and (max-width: #{$next-breakpoint - 0.02px}) {
49
67
  @content;
@@ -76,12 +94,26 @@
76
94
  }
77
95
  }
78
96
 
79
- // Mixin: Dark Mode
80
- // Applies styles when the user prefers a dark color scheme.
97
+ // System preference only
98
+ @mixin prefers-dark {
99
+ @media (prefers-color-scheme: dark) {
100
+ @content;
101
+ }
102
+ }
103
+
104
+ // User preference takes precedence
81
105
  @mixin dark-mode {
82
- [data-theme='dark'] & {
106
+ // Apply when user explicitly chooses dark
107
+ [data-theme="dark"] & {
83
108
  @content;
84
109
  }
110
+
111
+ // Apply when system is dark AND user hasn't made a choice
112
+ @media (prefers-color-scheme: dark) {
113
+ [data-theme="system"] & {
114
+ @content;
115
+ }
116
+ }
85
117
  }
86
118
 
87
119
  // Device orientation
@@ -124,9 +156,30 @@
124
156
  }
125
157
  }
126
158
 
159
+ // Data-saving mode
160
+ @mixin save-data {
161
+ @media (prefers-reduced-data: reduce) {
162
+ @content;
163
+ }
164
+ }
165
+
166
+ // Mouse precision detection
167
+ @mixin fine-pointer {
168
+ @media (pointer: fine) {
169
+ @content;
170
+ }
171
+ }
172
+
173
+ // Display mode for PWAs
174
+ @mixin display-mode($mode: "standalone") {
175
+ @media (display-mode: #{$mode}) {
176
+ @content;
177
+ }
178
+ }
179
+
127
180
  // High contrast mode
128
181
  @mixin high-contrast {
129
182
  @media (forced-colors: active) {
130
183
  @content;
131
184
  }
132
- }
185
+ }
@@ -1,10 +1,8 @@
1
1
  // Section: Presentation
2
2
  // Module: Opacity
3
3
 
4
- @use 'sass:math';
5
- @use './variables' as *;
6
-
7
-
4
+ @use "sass:math";
5
+ @use "../abstracts" as *;
8
6
 
9
7
  /**
10
8
  * @component Opacity
@@ -73,32 +71,58 @@
73
71
  * @see transitions
74
72
  */
75
73
 
76
- // Opacity Utilities
77
- @each $i in $percentages {
78
- .opacity-#{$i} { opacity: math.div($i, 100); }
79
- .hover\:opacity-#{$i}:hover { opacity: math.div($i, 100); }
80
- .focus\:opacity-#{$i}:focus { opacity: math.div($i, 100); }
81
- .active\:opacity-#{$i}:active { opacity: math.div($i, 100); }
82
- .group:hover .group-hover\:opacity-#{$i} { opacity: math.div($i, 100); }
74
+ @mixin opacity($value) {
75
+ opacity: math.div($value, 100);
83
76
  }
84
77
 
85
- // Responsive Variants for Opacity
86
- @each $breakpoint, $width in $breakpoints {
87
- @media (min-width: #{$width}) {
88
- @each $i in $percentages {
89
- .opacity-#{$i}\@#{$breakpoint} { opacity: math.div($i, 100); }
90
- .hover\:opacity-#{$i}\@#{$breakpoint}:hover { opacity: math.div($i, 100); }
91
- .focus\:opacity-#{$i}\@#{$breakpoint}:focus { opacity: math.div($i, 100); }
92
- .active\:opacity-#{$i}\@#{$breakpoint}:active { opacity: math.div($i, 100); }
93
- .group:hover .group-hover\:opacity-#{$i}\@#{$breakpoint} { opacity: math.div($i, 100); }
78
+ @if $generate-utility-classes {
79
+ // Opacity Utilities
80
+ @each $i in $percentages {
81
+ .opacity-#{$i} {
82
+ @include opacity ($i);
83
+ }
84
+ .hover\:opacity-#{$i}:hover {
85
+ @include opacity ($i);
86
+ }
87
+ .focus\:opacity-#{$i}:focus {
88
+ @include opacity ($i);
89
+ }
90
+ .active\:opacity-#{$i}:active {
91
+ @include opacity ($i);
92
+ }
93
+ .group:hover .group-hover\:opacity-#{$i} {
94
+ @include opacity ($i);
94
95
  }
95
96
  }
96
- }
97
97
 
98
- // Transition Opacity
99
- // TODO move to transitons may be?
100
- .transition-opacity {
101
- transition-property: opacity;
102
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
103
- transition-duration: 150ms;
98
+ // Responsive Variants for Opacity
99
+ @each $breakpoint, $width in $breakpoints {
100
+ @media (min-width: #{$width}) {
101
+ @each $i in $percentages {
102
+ .opacity-#{$i}\@#{$breakpoint} {
103
+ @include opacity ($i);
104
+ }
105
+ .hover\:opacity-#{$i}\@#{$breakpoint}:hover {
106
+ @include opacity ($i);
107
+ }
108
+ .focus\:opacity-#{$i}\@#{$breakpoint}:focus {
109
+ @include opacity ($i);
110
+ }
111
+ .active\:opacity-#{$i}\@#{$breakpoint}:active {
112
+ @include opacity ($i);
113
+ }
114
+ .group:hover .group-hover\:opacity-#{$i}\@#{$breakpoint} {
115
+ @include opacity ($i);
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ // Transition Opacity
122
+ // TODO move to transitons may be?
123
+ .transition-opacity {
124
+ transition-property: opacity;
125
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
126
+ transition-duration: 150ms;
127
+ }
104
128
  }
@@ -1,4 +1,4 @@
1
- @use './variables' as *;
1
+ @use '../abstracts' as *;
2
2
 
3
3
  /**
4
4
  * @component Position
@@ -49,9 +49,9 @@
49
49
  */
50
50
 
51
51
 
52
- //-----------------------------------------------
52
+ // -----------------------------------------------
53
53
  // MIXINS
54
- //-----------------------------------------------
54
+ // -----------------------------------------------
55
55
 
56
56
 
57
57
  /**
@@ -171,42 +171,43 @@
171
171
 
172
172
 
173
173
 
174
- //-----------------------------------------------
174
+ // -----------------------------------------------
175
175
  // UTILITY CLASSES
176
- //-----------------------------------------------
177
-
178
- // Position Classes
179
- .static { @include static; }
180
- .relative { @include relative; }
181
- .absolute { @include absolute; }
182
- .fixed { @include fixed; }
183
- .sticky { @include sticky; }
184
-
185
- // Placement Classes
186
- @each $key, $value in $spacings {
187
- .top-#{$key} { @include top($value); }
188
- .right-#{$key} { @include right($value); }
189
- .bottom-#{$key} { @include bottom($value); }
190
- .left-#{$key} { @include left($value); }
191
- }
176
+ // -----------------------------------------------
177
+ @if $generate-utility-classes {
178
+ // Position Classes
179
+ .static { @include static; }
180
+ .relative { @include relative; }
181
+ .absolute { @include absolute; }
182
+ .fixed { @include fixed; }
183
+ .sticky { @include sticky; }
184
+
185
+ // Placement Classes
186
+ @each $key, $value in $spacings {
187
+ .top-#{$key} { @include top($value); }
188
+ .right-#{$key} { @include right($value); }
189
+ .bottom-#{$key} { @include bottom($value); }
190
+ .left-#{$key} { @include left($value); }
191
+ }
192
192
 
193
- //-----------------------------------------------
194
- // RESPONSIVE CLASSES
195
- //-----------------------------------------------
196
-
197
- // Responsive Position Classes
198
- @each $breakpoint, $width in $breakpoints {
199
- @media (min-width: #{$width}) {
200
- .static\@#{$breakpoint} {@include static;}
201
- .relative\@#{$breakpoint} {@include relative;}
202
- .absolute\@#{$breakpoint} {@include absolute;}
203
- .fixed\@#{$breakpoint} {@include fixed;}
204
- .sticky\@#{$breakpoint} {@include sticky;}
205
- @each $key, $value in $spacings {
206
- .top-#{$key}\@#{$breakpoint} {@include top($value);}
207
- .right-#{$key}\@#{$breakpoint} {@include right($value);}
208
- .bottom-#{$key}\@#{$breakpoint} {@include bottom($value);}
209
- .left-#{$key}\@#{$breakpoint} {@include left($value);}
193
+ // -----------------------------------------------
194
+ // RESPONSIVE CLASSES
195
+ // -----------------------------------------------
196
+
197
+ // Responsive Position Classes
198
+ @each $breakpoint, $width in $breakpoints {
199
+ @media (min-width: #{$width}) {
200
+ .static\@#{$breakpoint} {@include static;}
201
+ .relative\@#{$breakpoint} {@include relative;}
202
+ .absolute\@#{$breakpoint} {@include absolute;}
203
+ .fixed\@#{$breakpoint} {@include fixed;}
204
+ .sticky\@#{$breakpoint} {@include sticky;}
205
+ @each $key, $value in $spacings {
206
+ .top-#{$key}\@#{$breakpoint} {@include top($value);}
207
+ .right-#{$key}\@#{$breakpoint} {@include right($value);}
208
+ .bottom-#{$key}\@#{$breakpoint} {@include bottom($value);}
209
+ .left-#{$key}\@#{$breakpoint} {@include left($value);}
210
+ }
210
211
  }
211
212
  }
212
213
  }