@nuvoui/core 1.1.7 → 1.2.0
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/README.md +90 -35
- package/dist/nuvoui.css +28531 -0
- package/dist/nuvoui.css.map +1 -0
- package/dist/nuvoui.min.css +2 -1
- package/dist/nuvoui.min.css.map +1 -0
- package/package.json +48 -27
- package/src/styles/abstracts/_config.scss +157 -0
- package/src/styles/abstracts/_functions.scss +81 -0
- package/src/styles/abstracts/_index.scss +2 -0
- package/src/styles/base/_base.scss +2 -2
- package/src/styles/base/_index.scss +2 -0
- package/src/styles/base/_reset.scss +8 -6
- package/src/styles/index.scss +11 -28
- package/src/styles/layouts/_container.scss +14 -22
- package/src/styles/layouts/_flex.scss +60 -18
- package/src/styles/layouts/_grid.scss +36 -28
- package/src/styles/layouts/_index.scss +3 -0
- package/src/styles/mixins-map.scss +877 -1225
- package/src/styles/themes/_index.scss +1 -0
- package/src/styles/themes/_theme.scss +175 -57
- package/src/styles/utilities/_alignment.scss +20 -0
- package/src/styles/utilities/_animations.scss +65 -61
- package/src/styles/utilities/_borders.scss +280 -16
- package/src/styles/utilities/_colors.scss +68 -49
- package/src/styles/utilities/_container-queries.scss +46 -7
- package/src/styles/utilities/_display.scss +57 -3
- package/src/styles/utilities/_helpers.scss +110 -108
- package/src/styles/utilities/_index.scss +19 -0
- package/src/styles/utilities/_media-queries.scss +54 -19
- package/src/styles/utilities/_opacity.scss +110 -8
- package/src/styles/utilities/_position.scss +177 -71
- package/src/styles/utilities/_shadows.scss +194 -67
- package/src/styles/utilities/_sizing.scss +62 -57
- package/src/styles/utilities/_spacing.scss +331 -64
- package/src/styles/utilities/_tooltips.scss +153 -105
- package/src/styles/utilities/_transitions.scss +152 -0
- package/src/styles/utilities/_typography.scss +113 -89
- package/src/styles/utilities/_functions.scss +0 -84
- package/src/styles/utilities/_variables.scss +0 -98
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
@use "sass:map";
|
|
2
|
+
@use "sass:math";
|
|
3
|
+
|
|
4
|
+
// Framework Configuration Options
|
|
5
|
+
$generate-utility-classes: true !default;
|
|
6
|
+
$enable-dark-mode: true !default;
|
|
7
|
+
$enable-rtl: true !default;
|
|
8
|
+
$enable-reduced-motion: true !default;
|
|
9
|
+
$enable-container-queries: false !default;
|
|
10
|
+
|
|
11
|
+
$base-size: 16;
|
|
12
|
+
|
|
13
|
+
@function rem($px) {
|
|
14
|
+
@if $px == 0 {
|
|
15
|
+
@return 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Strip units if $px has any
|
|
19
|
+
$value: if(math.unit($px) == "", $px, math.div($px, math.unit($px)));
|
|
20
|
+
|
|
21
|
+
@return math.div($value, $base-size) * 1rem;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Global variables that might be used across different modules
|
|
25
|
+
$enable-debuger: false !default;
|
|
26
|
+
$enable-dark-mode: true !default;
|
|
27
|
+
$enable-rtl: true !default;
|
|
28
|
+
$enable-reduced-motion: true !default;
|
|
29
|
+
$column-count: 12 !default;
|
|
30
|
+
|
|
31
|
+
$default-container-name: nuvoui-container !default;
|
|
32
|
+
$nuvoui-container-queries: false !default;
|
|
33
|
+
|
|
34
|
+
$primary: #007bff !default;
|
|
35
|
+
$secondary: #6c757d !default;
|
|
36
|
+
$success: #28a745 !default;
|
|
37
|
+
$danger: #dc3545 !default;
|
|
38
|
+
$warning: #ffc107 !default;
|
|
39
|
+
$info: #17a2b8 !default;
|
|
40
|
+
|
|
41
|
+
$color-primitives: (
|
|
42
|
+
"gray": #6b7280,
|
|
43
|
+
"red": #ef4444,
|
|
44
|
+
"blue": #3b82f6,
|
|
45
|
+
"green": #22c55e,
|
|
46
|
+
"yellow": #eab308,
|
|
47
|
+
"purple": #a855f7,
|
|
48
|
+
"pink": #ec4899,
|
|
49
|
+
) !default;
|
|
50
|
+
|
|
51
|
+
$theme-tokens: ("background", "foreground", "surface", "border", "text-primary", "text-secondary") !default;
|
|
52
|
+
|
|
53
|
+
// Default theme config (can be overridden)
|
|
54
|
+
$light-theme: (
|
|
55
|
+
"background": #fafafa,
|
|
56
|
+
"foreground": #1a1a1a,
|
|
57
|
+
"surface": #fff,
|
|
58
|
+
"border": #e5e7eb,
|
|
59
|
+
"text-primary": #1a1a1a,
|
|
60
|
+
"text-secondary": #4b5563,
|
|
61
|
+
) !default;
|
|
62
|
+
|
|
63
|
+
$dark-theme: (
|
|
64
|
+
"background": #1a1a1a,
|
|
65
|
+
"foreground": #f1f1f1,
|
|
66
|
+
"surface": #2e2e2e,
|
|
67
|
+
"border": #2e2e2e,
|
|
68
|
+
"text-primary": #f1f1f1,
|
|
69
|
+
"text-secondary": #a3a3a3,
|
|
70
|
+
) !default;
|
|
71
|
+
|
|
72
|
+
$shadow-colors: (
|
|
73
|
+
"default": rgb(0 0 0 / 10%),
|
|
74
|
+
"dark": rgb(0 0 0 / 20%),
|
|
75
|
+
"darker": rgb(0 0 0 / 35%),
|
|
76
|
+
"darkest": rgb(0 0 0 / 50%),
|
|
77
|
+
) !default;
|
|
78
|
+
|
|
79
|
+
// Breakpoints
|
|
80
|
+
$breakpoints: (
|
|
81
|
+
"xs": 480px,
|
|
82
|
+
"sm": 640px,
|
|
83
|
+
"md": 768px,
|
|
84
|
+
"lg": 1024px,
|
|
85
|
+
"xl": 1280px,
|
|
86
|
+
"2xl": 1536px,
|
|
87
|
+
) !default;
|
|
88
|
+
|
|
89
|
+
$grid-item-sizes: (
|
|
90
|
+
"xs": 200px,
|
|
91
|
+
"sm": 250px,
|
|
92
|
+
"md": 300px,
|
|
93
|
+
"lg": 350px,
|
|
94
|
+
"xl": 400px,
|
|
95
|
+
) !default;
|
|
96
|
+
|
|
97
|
+
// _variables.scss
|
|
98
|
+
$font-sizes: (
|
|
99
|
+
// 12px
|
|
100
|
+
"xs": 0.75rem,
|
|
101
|
+
// 14px
|
|
102
|
+
"sm": 0.875rem,
|
|
103
|
+
// 16px
|
|
104
|
+
"md": 1rem,
|
|
105
|
+
// 20px
|
|
106
|
+
"lg": 1.25rem,
|
|
107
|
+
// 24px
|
|
108
|
+
"xl": 1.5rem,
|
|
109
|
+
// 28px
|
|
110
|
+
"2xl": 1.75rem,
|
|
111
|
+
// 32px
|
|
112
|
+
"3xl": 2rem,
|
|
113
|
+
// 40px
|
|
114
|
+
"4xl": 2.5rem
|
|
115
|
+
) !default;
|
|
116
|
+
|
|
117
|
+
// Updated spacing map
|
|
118
|
+
$spacings: (
|
|
119
|
+
// 0rem
|
|
120
|
+
0: 0,
|
|
121
|
+
// 0.25rem
|
|
122
|
+
1: rem(4),
|
|
123
|
+
// 0.5rem
|
|
124
|
+
2: rem(8),
|
|
125
|
+
// 0.75rem
|
|
126
|
+
3: rem(12),
|
|
127
|
+
// 1rem
|
|
128
|
+
4: rem(16),
|
|
129
|
+
// 1.25rem
|
|
130
|
+
5: rem(20),
|
|
131
|
+
// 1.5rem
|
|
132
|
+
6: rem(24),
|
|
133
|
+
// 2rem
|
|
134
|
+
8: rem(32),
|
|
135
|
+
// 2.5rem
|
|
136
|
+
10: rem(40),
|
|
137
|
+
// 3rem
|
|
138
|
+
12: rem(48),
|
|
139
|
+
// 4rem
|
|
140
|
+
16: rem(64),
|
|
141
|
+
// 5rem
|
|
142
|
+
20: rem(80),
|
|
143
|
+
// 6rem
|
|
144
|
+
24: rem(96),
|
|
145
|
+
// 8rem
|
|
146
|
+
32: rem(128),
|
|
147
|
+
// 10rem
|
|
148
|
+
40: rem(160),
|
|
149
|
+
// 12rem
|
|
150
|
+
48: rem(192),
|
|
151
|
+
// 14rem
|
|
152
|
+
56: rem(224),
|
|
153
|
+
// 16rem
|
|
154
|
+
64: rem(256)
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
$percentages: (0, 5, 10, 20, 25, 30, 40, 50, 60, 70, 75, 80, 90, 100) !default;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
@use "sass:string";
|
|
2
|
+
@use "sass:math";
|
|
3
|
+
@use "sass:map";
|
|
4
|
+
@use "sass:list";
|
|
5
|
+
@use "sass:meta";
|
|
6
|
+
@use "config" as *;
|
|
7
|
+
|
|
8
|
+
@function str-replace($string, $search, $replace: " ") {
|
|
9
|
+
$index: string.index($string, $search);
|
|
10
|
+
@if $index {
|
|
11
|
+
@return string.slice($string, 1, $index - 1) + $replace + str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
|
|
12
|
+
}
|
|
13
|
+
@return $string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@function get-breakpoint-value($bp) {
|
|
17
|
+
@if map.has-key($breakpoints, $bp) {
|
|
18
|
+
@return map.get($breakpoints, $bp);
|
|
19
|
+
} @else if meta.type-of($bp) == number {
|
|
20
|
+
@return $bp;
|
|
21
|
+
} @else {
|
|
22
|
+
@warn 'Invalid breakpoint: #{$bp}';
|
|
23
|
+
@return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@function strip-unit($value) {
|
|
28
|
+
@return math.div($value, ($value * 0 + 1));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@function safe-unit-name($unit) {
|
|
32
|
+
@if $unit == "%" {
|
|
33
|
+
@return "per";
|
|
34
|
+
} @else if $unit == "." {
|
|
35
|
+
@return "dot";
|
|
36
|
+
} @else {
|
|
37
|
+
@return $unit;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@function get-unit($value) {
|
|
42
|
+
$value-str: #{$value};
|
|
43
|
+
|
|
44
|
+
// Relative length units
|
|
45
|
+
@if string.index($value-str, "em") {
|
|
46
|
+
@return "em";
|
|
47
|
+
} @else if string.index($value-str, "rem") {
|
|
48
|
+
@return "rem";
|
|
49
|
+
} @else if string.index($value-str, "%") {
|
|
50
|
+
@return "%";
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Viewport units
|
|
54
|
+
@else if string.index($value-str, "vw") {
|
|
55
|
+
@return "vw";
|
|
56
|
+
} @else if string.index($value-str, "vh") {
|
|
57
|
+
@return "vh";
|
|
58
|
+
} @else if string.index($value-str, "vmin") {
|
|
59
|
+
@return "vmin";
|
|
60
|
+
} @else if string.index($value-str, "vmax") {
|
|
61
|
+
@return "vmax";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Absolute length units
|
|
65
|
+
@else if string.index($value-str, "px") {
|
|
66
|
+
@return "px";
|
|
67
|
+
} @else if string.index($value-str, "cm") {
|
|
68
|
+
@return "cm";
|
|
69
|
+
} @else if string.index($value-str, "mm") {
|
|
70
|
+
@return "mm";
|
|
71
|
+
} @else if string.index($value-str, "in") {
|
|
72
|
+
@return "in";
|
|
73
|
+
} @else if string.index($value-str, "pt") {
|
|
74
|
+
@return "pt";
|
|
75
|
+
} @else if string.index($value-str, "pc") {
|
|
76
|
+
@return "pc";
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Return empty string if no unit found
|
|
80
|
+
@return "";
|
|
81
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
|
|
3
3
|
/* Import variables */
|
|
4
|
-
@use '../
|
|
4
|
+
@use '../abstracts' as *;
|
|
5
5
|
@use '../utilities/media-queries' as media;
|
|
6
6
|
|
|
7
7
|
:root {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
// Base typography styles
|
|
12
12
|
html {
|
|
13
|
-
font-size: 16px;
|
|
13
|
+
font-size: 16px;
|
|
14
14
|
font-family: var(--font-family-base);
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Modern CSS Reset
|
|
2
2
|
|
|
3
3
|
// Box sizing rules
|
|
4
|
-
*,
|
|
4
|
+
*,
|
|
5
|
+
*::before,
|
|
6
|
+
*::after {
|
|
5
7
|
box-sizing: border-box;
|
|
6
8
|
margin: 0;
|
|
7
9
|
padding: 0;
|
|
@@ -32,7 +34,7 @@ body {
|
|
|
32
34
|
line-height: 1.5;
|
|
33
35
|
-webkit-font-smoothing: antialiased;
|
|
34
36
|
-moz-osx-font-smoothing: grayscale;
|
|
35
|
-
font-family:
|
|
37
|
+
font-family: var(--font-family-base);
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
// Make images easier to work with
|
|
@@ -72,10 +74,10 @@ ol {
|
|
|
72
74
|
list-style: none;
|
|
73
75
|
margin: 0;
|
|
74
76
|
padding: 0;
|
|
75
|
-
|
|
77
|
+
|
|
76
78
|
// Modern properties
|
|
77
|
-
padding-inline-start: 0;
|
|
78
|
-
margin-block: 0;
|
|
79
|
+
padding-inline-start: 0; // Replaces padding-left
|
|
80
|
+
margin-block: 0; // Replaces margin-top/bottom
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
li {
|
|
@@ -99,4 +101,4 @@ a {
|
|
|
99
101
|
// Make sure textareas without a rows attribute are not tiny
|
|
100
102
|
textarea:not([rows]) {
|
|
101
103
|
min-height: 10em;
|
|
102
|
-
}
|
|
104
|
+
}
|
package/src/styles/index.scss
CHANGED
|
@@ -1,33 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
@forward
|
|
1
|
+
// Import abstracts first (configuration)
|
|
2
|
+
@forward "abstracts";
|
|
3
3
|
|
|
4
|
-
//
|
|
5
|
-
@forward
|
|
6
|
-
@forward 'base/base';
|
|
4
|
+
// Import base styles
|
|
5
|
+
@forward "base";
|
|
7
6
|
|
|
8
|
-
//
|
|
9
|
-
@forward
|
|
10
|
-
@forward 'layouts/flex';
|
|
11
|
-
@forward 'layouts/grid';
|
|
7
|
+
// Import themes
|
|
8
|
+
@forward "themes";
|
|
12
9
|
|
|
13
|
-
//
|
|
14
|
-
@forward
|
|
15
|
-
@forward 'utilities/borders';
|
|
16
|
-
@forward 'utilities/colors';
|
|
17
|
-
@forward 'utilities/opacity';
|
|
18
|
-
@forward 'utilities/position';
|
|
19
|
-
@forward 'utilities/media-queries';
|
|
20
|
-
@forward 'utilities/shadows';
|
|
21
|
-
@forward 'utilities/sizing';
|
|
22
|
-
@forward 'utilities/spacing';
|
|
23
|
-
@forward 'utilities/typography';
|
|
24
|
-
@forward 'utilities/tooltips';
|
|
25
|
-
@forward 'utilities/display';
|
|
10
|
+
// Import layout components
|
|
11
|
+
@forward "layouts";
|
|
26
12
|
|
|
27
|
-
|
|
13
|
+
// Import utilities based on configuration
|
|
14
|
+
@forward "utilities";
|
|
28
15
|
|
|
29
|
-
|
|
30
|
-
// Theme
|
|
31
|
-
@forward 'themes/theme';
|
|
32
|
-
|
|
33
|
-
@forward './mixins-map';
|
|
16
|
+
@forward "./mixins-map";
|
|
@@ -1,41 +1,33 @@
|
|
|
1
|
-
@use
|
|
2
|
-
@use
|
|
1
|
+
@use "sass:map";
|
|
2
|
+
@use "../abstracts/config" as VAR;
|
|
3
3
|
|
|
4
4
|
// Base container styles
|
|
5
5
|
@mixin container-base {
|
|
6
6
|
width: 100%;
|
|
7
7
|
margin-left: auto;
|
|
8
8
|
margin-right: auto;
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@mixin container-padding($padding) {
|
|
12
|
+
& {
|
|
13
|
+
padding-top: $padding;
|
|
14
|
+
padding-bottom: $padding;
|
|
15
|
+
}
|
|
11
16
|
}
|
|
12
17
|
|
|
13
18
|
// Responsive container mixin
|
|
14
19
|
@mixin container($display: block) {
|
|
15
|
-
@include container-base;
|
|
16
|
-
|
|
17
20
|
display: $display;
|
|
18
|
-
|
|
19
|
-
@each $breakpoint, $width in
|
|
20
|
-
@media (min-width:
|
|
21
|
-
max-width: $width;
|
|
21
|
+
@include container-base;
|
|
22
|
+
@each $breakpoint, $width in VAR.$breakpoints {
|
|
23
|
+
@media (min-width: $width) {
|
|
24
|
+
max-width: $width - 100px;
|
|
22
25
|
}
|
|
23
26
|
}
|
|
27
|
+
@include container-padding(1rem);
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
// Container classes
|
|
27
31
|
.container {
|
|
28
32
|
@include container;
|
|
29
33
|
}
|
|
30
|
-
|
|
31
|
-
.container-flex {
|
|
32
|
-
@include container(flex);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.container-grid {
|
|
36
|
-
@include container(grid);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.container-fluid {
|
|
40
|
-
@include container-base;
|
|
41
|
-
}
|
|
@@ -1,10 +1,52 @@
|
|
|
1
1
|
// Section: Layout
|
|
2
2
|
// Module: Flex | Flex Inline
|
|
3
|
-
|
|
3
|
+
// Note: Gap utilities are defined in _spacing.scss
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @component Flex
|
|
7
|
+
* @description Flexbox layout system for creating flexible page layouts
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <div class="flex row between x-center">
|
|
11
|
+
* <div class="w-6">Left column (6 units)</div>
|
|
12
|
+
* <div class="w-6">Right column (6 units)</div>
|
|
13
|
+
* </div>
|
|
14
|
+
*
|
|
15
|
+
* <div class="flex col@md row@lg">
|
|
16
|
+
* <!-- Changes direction based on breakpoint -->
|
|
17
|
+
* </div>
|
|
18
|
+
*
|
|
19
|
+
* @classes
|
|
20
|
+
* Base:
|
|
21
|
+
* - flex: Creates a flex container
|
|
22
|
+
*
|
|
23
|
+
* Direction:
|
|
24
|
+
* - row: Sets flex-direction to row
|
|
25
|
+
* - col: Sets flex-direction to column
|
|
26
|
+
* - row-reverse: Reverses row direction
|
|
27
|
+
* - col-reverse: Reverses column direction
|
|
28
|
+
*
|
|
29
|
+
* Alignment:
|
|
30
|
+
* - start/end/center: Controls justify-content
|
|
31
|
+
* - x-start/x-end/x-center: Controls align-items
|
|
32
|
+
*
|
|
33
|
+
* Child elements:
|
|
34
|
+
* - w-{1-12}: Sets width based on column count
|
|
35
|
+
* - grow: Allows item to grow
|
|
36
|
+
* - shrink/shrink-0: Controls shrink behavior
|
|
37
|
+
*
|
|
38
|
+
* @responsive
|
|
39
|
+
* All classes support responsive variants using @breakpoint suffix:
|
|
40
|
+
* - row@md: Row direction on medium screens and up
|
|
41
|
+
* - between@lg: Space-between on large screens
|
|
42
|
+
*
|
|
43
|
+
* @see grid
|
|
44
|
+
*/
|
|
45
|
+
|
|
4
46
|
@use 'sass:math';
|
|
5
47
|
@use '../utilities/media-queries' as MC;
|
|
6
|
-
@use '../
|
|
7
|
-
@use '../
|
|
48
|
+
@use '../abstracts' as VAR;
|
|
49
|
+
@use '../abstracts/functions' as FN;
|
|
8
50
|
|
|
9
51
|
/**
|
|
10
52
|
* @description Establishes a flex container.
|
|
@@ -250,11 +292,11 @@
|
|
|
250
292
|
@mixin no-grow { flex: none; }
|
|
251
293
|
|
|
252
294
|
/**
|
|
253
|
-
* @description Sets how many columns this would take using percentage of
|
|
295
|
+
* @description Sets how many columns this would take using percentage of VAR.$column-count.
|
|
254
296
|
* @param {Number} $size - The number of columns to span.
|
|
255
297
|
*/
|
|
256
298
|
@mixin w-col($size) {
|
|
257
|
-
flex: 0 0 math.percentage(math.div($size,
|
|
299
|
+
flex: 0 0 math.percentage(math.div($size, VAR.$column-count));
|
|
258
300
|
}
|
|
259
301
|
|
|
260
302
|
// Base flex container
|
|
@@ -271,7 +313,7 @@
|
|
|
271
313
|
&.wrap { flex-wrap: wrap; }
|
|
272
314
|
&.nowrap { flex-wrap: nowrap; }
|
|
273
315
|
&.wrap-reverse { flex-wrap: wrap-reverse; }
|
|
274
|
-
|
|
316
|
+
|
|
275
317
|
// Justify modifiers
|
|
276
318
|
&.start { justify-content: flex-start; }
|
|
277
319
|
&.end { justify-content: flex-end; }
|
|
@@ -296,8 +338,8 @@
|
|
|
296
338
|
&.x-content-stretch { align-content: stretch; }
|
|
297
339
|
|
|
298
340
|
// Child flex items (using column count)
|
|
299
|
-
> .w-auto { @include f-w-auto }
|
|
300
|
-
> .w-full { @include f-w-full }
|
|
341
|
+
> .w-auto { @include f-w-auto; }
|
|
342
|
+
> .w-full { @include f-w-full; }
|
|
301
343
|
> .grow { @include grow; }
|
|
302
344
|
> .no-grow { @include no-grow; }
|
|
303
345
|
|
|
@@ -308,20 +350,18 @@
|
|
|
308
350
|
> .shrink { @include shrink; }
|
|
309
351
|
> .shrink-0 { @include shrink-0; }
|
|
310
352
|
> .shrink-2 { @include shrink-2; }
|
|
311
|
-
@for $i from 1 through
|
|
312
|
-
> .w-#{$i} { @include w-col($i) }
|
|
353
|
+
@for $i from 1 through VAR.$column-count {
|
|
354
|
+
> .w-#{$i} { @include w-col($i); }
|
|
313
355
|
> .order-#{$i} { order: $i; }
|
|
314
356
|
}
|
|
315
357
|
}
|
|
316
358
|
|
|
317
|
-
@each $breakpoint, $width in
|
|
359
|
+
@each $breakpoint, $width in VAR.$breakpoints {
|
|
318
360
|
// Get breakpoint value using FN function
|
|
319
361
|
$bp-val: FN.get-breakpoint-value($breakpoint);
|
|
320
362
|
|
|
321
363
|
@media (min-width: #{$bp-val}) {
|
|
322
364
|
.flex {
|
|
323
|
-
display: flex;
|
|
324
|
-
|
|
325
365
|
// Direction
|
|
326
366
|
&.row\@#{$breakpoint} { flex-direction: row; }
|
|
327
367
|
&.row-reverse\@#{$breakpoint} { flex-direction: row-reverse; }
|
|
@@ -364,12 +404,14 @@
|
|
|
364
404
|
& > .order-first\@#{$breakpoint} { order: -1; }
|
|
365
405
|
& > .order-last\@#{$breakpoint} { order: 9999; }
|
|
366
406
|
& > .order-none\@#{$breakpoint} { order: 0; }
|
|
367
|
-
|
|
368
|
-
|
|
407
|
+
& > .shrink\@#{$breakpoint} { @include shrink; }
|
|
408
|
+
& > .shrink-0\@#{$breakpoint} { @include shrink-0; }
|
|
409
|
+
& > .shrink-2\@#{$breakpoint} { @include shrink-2; }
|
|
410
|
+
|
|
411
|
+
@for $i from 1 through VAR.$column-count {
|
|
412
|
+
& > .w-#{$i}\@#{$breakpoint} { @include w-col($i); }
|
|
413
|
+
& > .col-#{$i}\@#{$breakpoint} { @include w-col($i); }
|
|
369
414
|
& > .order-#{$i}\@#{$breakpoint} { order: $i; }
|
|
370
|
-
& > .shrink\@#{$breakpoint} { @include shrink; }
|
|
371
|
-
& > .shrink-0\@#{$breakpoint} { @include shrink-0; }
|
|
372
|
-
& > .shrink-2\@#{$breakpoint} { @include shrink-2; }
|
|
373
415
|
}
|
|
374
416
|
}
|
|
375
417
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Section: Layout
|
|
2
2
|
// Module: Grid | Grid Inline
|
|
3
|
+
// Note: Gap utilities are defined in _spacing.scss
|
|
3
4
|
|
|
4
5
|
@use 'sass:math';
|
|
5
|
-
@use '../
|
|
6
|
-
@use '../
|
|
6
|
+
@use '../abstracts/functions' as FN;
|
|
7
|
+
@use '../abstracts' as VAR;
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @description Establishes a grid container.
|
|
@@ -19,6 +20,19 @@
|
|
|
19
20
|
@mixin cols($count) {grid-template-columns: repeat($count, minmax(0, 1fr));}
|
|
20
21
|
@mixin rows($count) {grid-template-rows: repeat($count, minmax(0, 1fr));}
|
|
21
22
|
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @description Establishes a grid container with a specified number of columns.
|
|
26
|
+
* @param {number} $count - The number of columns.
|
|
27
|
+
|
|
28
|
+
/// EXAMPLE USAGE
|
|
29
|
+
.custom-grid {
|
|
30
|
+
display: grid;
|
|
31
|
+
@include cols-custom("1fr_auto_1fr");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
*/
|
|
35
|
+
|
|
22
36
|
@mixin cols-custom($template) {
|
|
23
37
|
// Convert underscores to spaces so "1fr_auto" becomes "1fr auto"
|
|
24
38
|
$converted: FN.str-replace($template, "_", " ");
|
|
@@ -68,42 +82,36 @@
|
|
|
68
82
|
grid-row: $row;
|
|
69
83
|
}
|
|
70
84
|
@mixin position-col($col) {
|
|
71
|
-
grid-column: $
|
|
85
|
+
grid-column: $col;
|
|
72
86
|
}
|
|
73
87
|
@mixin position-row($row) {
|
|
74
88
|
grid-row: $row;
|
|
75
89
|
}
|
|
76
90
|
|
|
77
|
-
|
|
78
|
-
/// EXAMPLE USAGE
|
|
79
|
-
.custom-grid {
|
|
80
|
-
display: grid;
|
|
81
|
-
@include cols-custom("1fr_auto_1fr");
|
|
82
|
-
}
|
|
83
|
-
|
|
84
91
|
// Classes
|
|
85
92
|
.grid { @include grid; }
|
|
86
93
|
.grid.inline { @include grid-inline; }
|
|
87
94
|
|
|
95
|
+
|
|
96
|
+
@for $i from 1 through VAR.$column-count {
|
|
97
|
+
.grid.cols-#{$i} { @include cols($i); }
|
|
98
|
+
.grid.rows-#{$i} { @include rows($i); }
|
|
99
|
+
}
|
|
100
|
+
|
|
88
101
|
// Grid Template Classes
|
|
89
|
-
@each $breakpoint, $width in
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
.grid.cols-#{$i} { @include cols($i); }
|
|
96
|
-
.grid.rows-#{$i} { @include rows($i); }
|
|
97
|
-
|
|
98
|
-
.grid.cols-#{$i}\@#{$breakpoint} {
|
|
99
|
-
@include cols($i);
|
|
100
|
-
}
|
|
102
|
+
@each $breakpoint, $width in VAR.$breakpoints {
|
|
103
|
+
// Responsive grid columns
|
|
104
|
+
@media (min-width: #{$width}) {
|
|
105
|
+
@for $i from 1 through VAR.$column-count {
|
|
106
|
+
.grid.cols-#{$i}\@#{$breakpoint} { @include cols($i); }
|
|
107
|
+
.grid.rows-#{$i}\@#{$breakpoint} { @include rows($i); }
|
|
101
108
|
}
|
|
102
109
|
}
|
|
103
110
|
}
|
|
104
111
|
|
|
112
|
+
|
|
105
113
|
// Generate Column Span Classes with Responsive Variants
|
|
106
|
-
@for $i from 1 through
|
|
114
|
+
@for $i from 1 through VAR.$column-count {
|
|
107
115
|
.span-col-#{$i} {
|
|
108
116
|
@include span-col($i);
|
|
109
117
|
}
|
|
@@ -112,7 +120,7 @@
|
|
|
112
120
|
@include span-row($i);
|
|
113
121
|
}
|
|
114
122
|
|
|
115
|
-
@each $breakpoint, $width in
|
|
123
|
+
@each $breakpoint, $width in VAR.$breakpoints {
|
|
116
124
|
@media (min-width: #{$width}) {
|
|
117
125
|
.span-col-#{$i}\@#{$breakpoint} {
|
|
118
126
|
@include span-col($i);
|
|
@@ -127,9 +135,9 @@
|
|
|
127
135
|
|
|
128
136
|
|
|
129
137
|
// Auto-fit/fill Classes
|
|
130
|
-
@each $
|
|
131
|
-
.grid.auto-fit-#{$
|
|
132
|
-
.grid.auto-fill-#{$
|
|
138
|
+
@each $size, $width in VAR.$grid-item-sizes {
|
|
139
|
+
.grid.auto-fit-#{$size} { @include auto-fit($width); }
|
|
140
|
+
.grid.auto-fill-#{$size} { @include auto-fill($width); }
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
// Flow Classes
|
|
@@ -150,7 +158,7 @@ $alignments: (
|
|
|
150
158
|
.align-items-#{$name} { align-items: $value; }
|
|
151
159
|
.place-items-#{$name} { place-items: $value; }
|
|
152
160
|
|
|
153
|
-
@each $breakpoint, $width in
|
|
161
|
+
@each $breakpoint, $width in VAR.$breakpoints {
|
|
154
162
|
@media (min-width: #{$width}) {
|
|
155
163
|
.justify-items-#{$name}\@#{$breakpoint} {
|
|
156
164
|
justify-items: $value;
|