@nuvoui/core 0.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.
- package/README.md +19 -0
- package/dist/dark.css +1 -0
- package/dist/index.css +1 -0
- package/dist/index.css.map +1 -0
- package/dist/index.html +15 -0
- package/dist/light.css +1 -0
- package/dist/main.css +1 -0
- package/dist/main.js +1 -0
- package/package.json +43 -0
- package/src/js/main.js +1 -0
- package/src/styles/_global.scss +3 -0
- package/src/styles/base/_base.scss +75 -0
- package/src/styles/base/_reset.scss +92 -0
- package/src/styles/components/_alert.scss +0 -0
- package/src/styles/components/_avatar.scss +0 -0
- package/src/styles/components/_badge.scss +0 -0
- package/src/styles/components/_breadcrumb.scss +0 -0
- package/src/styles/components/_button.scss +247 -0
- package/src/styles/components/_calendar.scss +0 -0
- package/src/styles/components/_card.scss +0 -0
- package/src/styles/components/_checkbox.scss +23 -0
- package/src/styles/components/_dropdown.scss +0 -0
- package/src/styles/components/_form.scss +157 -0
- package/src/styles/components/_modal.scss +0 -0
- package/src/styles/components/_navbar.scss +125 -0
- package/src/styles/components/_pagination.scss +0 -0
- package/src/styles/components/_progress.scss +0 -0
- package/src/styles/components/_radio.scss +0 -0
- package/src/styles/components/_sidebar.scss +0 -0
- package/src/styles/components/_table.scss +0 -0
- package/src/styles/components/_tabs.scss +0 -0
- package/src/styles/components/_tooltip.scss +0 -0
- package/src/styles/index.scss +34 -0
- package/src/styles/layouts/_container.scss +49 -0
- package/src/styles/layouts/_flex.scss +138 -0
- package/src/styles/layouts/_grid.scss +147 -0
- package/src/styles/themes/_dark.scss +26 -0
- package/src/styles/themes/_light.scss +23 -0
- package/src/styles/themes/_theme.scss +136 -0
- package/src/styles/utilities/_animations.scss +135 -0
- package/src/styles/utilities/_colors.scss +158 -0
- package/src/styles/utilities/_functions.scss +59 -0
- package/src/styles/utilities/_position.scss +97 -0
- package/src/styles/utilities/_shadows.scss +107 -0
- package/src/styles/utilities/_spacing.scss +109 -0
- package/src/styles/utilities/_tooltips.scss +213 -0
- package/src/styles/utilities/_typography.scss +108 -0
- package/src/styles/utilities/_variables.scss +70 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// _navbar.scss
|
|
2
|
+
|
|
3
|
+
@use '../utilities/variables' as *;
|
|
4
|
+
@use '../utilities/shadows' as *;
|
|
5
|
+
@use '../layouts/container' as Container;
|
|
6
|
+
@use '../layouts/flex' as Flex;
|
|
7
|
+
@use '../layouts/grid' as Grid;
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
--shadow-color: 255, 0, 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.navbar {
|
|
14
|
+
|
|
15
|
+
@include Flex.between;
|
|
16
|
+
@include Container.container-flex;
|
|
17
|
+
|
|
18
|
+
// @include Grid.grid-flow-row;
|
|
19
|
+
// @include Grid.grid-flow-col;
|
|
20
|
+
// @include Grid.grid-cols(2);
|
|
21
|
+
// @include Container.container-grid;
|
|
22
|
+
|
|
23
|
+
& {
|
|
24
|
+
@include Flex.align-center;
|
|
25
|
+
// @include shadow('md', 'colored');
|
|
26
|
+
|
|
27
|
+
background-color: var(--nav-bg);
|
|
28
|
+
|
|
29
|
+
&:hover {
|
|
30
|
+
@include shadow('lg', 'dark');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.logo {
|
|
34
|
+
img {
|
|
35
|
+
max-height: 40px;
|
|
36
|
+
width: auto;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.menu {
|
|
41
|
+
@include Flex.flex;
|
|
42
|
+
list-style: none;
|
|
43
|
+
margin: 0;
|
|
44
|
+
padding: 0;
|
|
45
|
+
|
|
46
|
+
li {
|
|
47
|
+
position: relative;
|
|
48
|
+
|
|
49
|
+
a {
|
|
50
|
+
display: block;
|
|
51
|
+
padding: 1rem;
|
|
52
|
+
text-decoration: none;
|
|
53
|
+
color: var(--nav-text);
|
|
54
|
+
transition: background-color 0.2s ease-in-out;
|
|
55
|
+
|
|
56
|
+
&:hover {
|
|
57
|
+
background-color: var(--nav-hover);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Dropdown styles
|
|
62
|
+
&:hover>.submenu {
|
|
63
|
+
display: block;
|
|
64
|
+
visibility: visible;
|
|
65
|
+
opacity: 1;
|
|
66
|
+
pointer-events: auto; // Re-enable interactions
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.submenu {
|
|
72
|
+
background-color: white;
|
|
73
|
+
display: block;
|
|
74
|
+
visibility: hidden; // Use visibility instead of display
|
|
75
|
+
pointer-events: none; // Prevents interaction when hidden
|
|
76
|
+
opacity: 0;
|
|
77
|
+
|
|
78
|
+
position: absolute;
|
|
79
|
+
top: 100%;
|
|
80
|
+
left: 0;
|
|
81
|
+
min-width: 200px;
|
|
82
|
+
list-style: none;
|
|
83
|
+
margin: 0;
|
|
84
|
+
padding: 0;
|
|
85
|
+
background-color: var(--nav-bg);
|
|
86
|
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
|
|
87
|
+
|
|
88
|
+
// Animation
|
|
89
|
+
transition:
|
|
90
|
+
opacity 0.2s ease-in-out,
|
|
91
|
+
visibility 0.2s ease-in-out;
|
|
92
|
+
|
|
93
|
+
li {
|
|
94
|
+
a {
|
|
95
|
+
padding: 0.75rem 1rem;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Nested dropdowns
|
|
100
|
+
.submenu {
|
|
101
|
+
top: 0;
|
|
102
|
+
left: 100%;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@media (max-width: 768px) {
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
|
|
109
|
+
.menu {
|
|
110
|
+
flex-direction: column;
|
|
111
|
+
width: 100%;
|
|
112
|
+
|
|
113
|
+
.submenu {
|
|
114
|
+
position: static;
|
|
115
|
+
display: none;
|
|
116
|
+
width: 100%;
|
|
117
|
+
|
|
118
|
+
li a {
|
|
119
|
+
padding-left: 2rem;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Forward all modules for external use
|
|
2
|
+
@forward 'utilities/variables';
|
|
3
|
+
@forward './global';
|
|
4
|
+
|
|
5
|
+
// Base styles
|
|
6
|
+
@forward 'base/reset';
|
|
7
|
+
@forward 'base/base';
|
|
8
|
+
|
|
9
|
+
// Utilities
|
|
10
|
+
@forward 'utilities/animations';
|
|
11
|
+
@forward 'utilities/colors';
|
|
12
|
+
@forward 'utilities/position';
|
|
13
|
+
@forward 'utilities/shadows';
|
|
14
|
+
@forward 'utilities/spacing';
|
|
15
|
+
@forward 'utilities/typography';
|
|
16
|
+
@forward 'utilities/tooltips';
|
|
17
|
+
|
|
18
|
+
// Layouts
|
|
19
|
+
@forward 'layouts/container';
|
|
20
|
+
@forward 'layouts/flex';
|
|
21
|
+
@forward 'layouts/grid';
|
|
22
|
+
|
|
23
|
+
// Themes
|
|
24
|
+
@forward 'themes/light';
|
|
25
|
+
@forward 'themes/dark';
|
|
26
|
+
@forward 'themes/theme';
|
|
27
|
+
|
|
28
|
+
// Components
|
|
29
|
+
@forward 'components/button';
|
|
30
|
+
@forward 'components/navbar';
|
|
31
|
+
@forward 'components/form';
|
|
32
|
+
|
|
33
|
+
// Local usage
|
|
34
|
+
@use './global' as *;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use '../utilities/variables' as *;
|
|
3
|
+
|
|
4
|
+
// Container mixins
|
|
5
|
+
@mixin container-base {
|
|
6
|
+
width: 100%;
|
|
7
|
+
margin-left: auto;
|
|
8
|
+
margin-right: auto;
|
|
9
|
+
padding-left: 1rem;
|
|
10
|
+
padding-right: 1rem;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@mixin container {
|
|
14
|
+
@include container-base;
|
|
15
|
+
& {
|
|
16
|
+
@each $breakpoint, $width in $container-max-widths {
|
|
17
|
+
@media (min-width: map.get($breakpoints, $breakpoint)) {
|
|
18
|
+
max-width: $width;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin container-flex {
|
|
25
|
+
display: flex;
|
|
26
|
+
@include container;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@mixin container-grid {
|
|
30
|
+
display: grid;
|
|
31
|
+
@include container;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Container classes
|
|
35
|
+
.container {
|
|
36
|
+
@include container;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.container-flex {
|
|
40
|
+
@include container-flex;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.container-grid {
|
|
44
|
+
@include container-grid;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.container-fluid {
|
|
48
|
+
@include container-base;
|
|
49
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
@use 'sass:math';
|
|
2
|
+
@use '../utilities/variables' as *;
|
|
3
|
+
|
|
4
|
+
// Flex Container Mixins
|
|
5
|
+
@mixin flex {display: flex;}
|
|
6
|
+
@mixin flex-inline {display: inline-flex;}
|
|
7
|
+
|
|
8
|
+
// Direction Mixins
|
|
9
|
+
@mixin row {flex-direction: row;}
|
|
10
|
+
@mixin row-reverse {flex-direction: row-reverse;}
|
|
11
|
+
@mixin col {flex-direction: column;}
|
|
12
|
+
@mixin col-reverse {flex-direction: column-reverse;}
|
|
13
|
+
|
|
14
|
+
// Wrap Mixins
|
|
15
|
+
@mixin wrap {flex-wrap: wrap;}
|
|
16
|
+
@mixin nowrap {flex-wrap: nowrap;}
|
|
17
|
+
@mixin wrap-reverse {flex-wrap: wrap-reverse;}
|
|
18
|
+
|
|
19
|
+
// Main Axis Alignment Mixins
|
|
20
|
+
@mixin start {justify-content: flex-start;}
|
|
21
|
+
@mixin end {justify-content: flex-end;}
|
|
22
|
+
@mixin center {justify-content: center;}
|
|
23
|
+
@mixin between {justify-content: space-between;}
|
|
24
|
+
@mixin around {justify-content: space-around;}
|
|
25
|
+
@mixin evenly {justify-content: space-evenly;}
|
|
26
|
+
|
|
27
|
+
// Cross Axis Alignment Mixins
|
|
28
|
+
@mixin align-start {align-items: flex-start;}
|
|
29
|
+
@mixin align-end {align-items: flex-end;}
|
|
30
|
+
@mixin align-center {align-items: center;}
|
|
31
|
+
@mixin align-stretch {align-items: stretch;}
|
|
32
|
+
@mixin align-baseline {align-items: baseline;}
|
|
33
|
+
|
|
34
|
+
// Self Alignment Mixins
|
|
35
|
+
@mixin self-auto {align-self: auto;}
|
|
36
|
+
@mixin self-start {align-self: flex-start;}
|
|
37
|
+
@mixin self-end {align-self: flex-end;}
|
|
38
|
+
@mixin self-center {align-self: center;}
|
|
39
|
+
@mixin self-stretch {align-self: stretch;}
|
|
40
|
+
|
|
41
|
+
// Flex Child Mixins
|
|
42
|
+
@mixin w-full {flex: 0 0 100%;}
|
|
43
|
+
@mixin w-auto {flex: 1 1 auto;}
|
|
44
|
+
|
|
45
|
+
// Base flex container
|
|
46
|
+
.flex {
|
|
47
|
+
display: flex;
|
|
48
|
+
|
|
49
|
+
// Direction modifiers
|
|
50
|
+
&.row { flex-direction: row; }
|
|
51
|
+
&.row-reverse { flex-direction: row-reverse; }
|
|
52
|
+
&.col { flex-direction: column; }
|
|
53
|
+
&.col-reverse { flex-direction: column-reverse; }
|
|
54
|
+
|
|
55
|
+
// Wrap modifiers
|
|
56
|
+
&.wrap { flex-wrap: wrap; }
|
|
57
|
+
&.nowrap { flex-wrap: nowrap; }
|
|
58
|
+
&.wrap-reverse { flex-wrap: wrap-reverse; }
|
|
59
|
+
|
|
60
|
+
// Justify modifiers
|
|
61
|
+
&.start { justify-content: flex-start; }
|
|
62
|
+
&.end { justify-content: flex-end; }
|
|
63
|
+
&.center { justify-content: center; }
|
|
64
|
+
&.between { justify-content: space-between; }
|
|
65
|
+
&.around { justify-content: space-around; }
|
|
66
|
+
&.evenly { justify-content: space-evenly; }
|
|
67
|
+
|
|
68
|
+
// Align modifiers
|
|
69
|
+
&.items-start { align-items: flex-start; }
|
|
70
|
+
&.items-end { align-items: flex-end; }
|
|
71
|
+
&.items-center { align-items: center; }
|
|
72
|
+
&.items-baseline { align-items: baseline; }
|
|
73
|
+
&.items-stretch { align-items: stretch; }
|
|
74
|
+
|
|
75
|
+
// Gap modifiers
|
|
76
|
+
@for $i from 0 through 8 {
|
|
77
|
+
&.gap-#{$i} { gap: #{$i * 0.25}rem; }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Child flex items (using column count)
|
|
81
|
+
> .w-auto { flex: 1 1 auto; }
|
|
82
|
+
> .w-full { flex: 0 0 100%; }
|
|
83
|
+
|
|
84
|
+
@for $i from 1 through $column-count {
|
|
85
|
+
> .w-#{$i} {
|
|
86
|
+
flex: 0 0 math.percentage( math.div($i, $column-count));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
// Responsive variants
|
|
93
|
+
@each $breakpoint, $width in $breakpoints {
|
|
94
|
+
@media (min-width: $width) {
|
|
95
|
+
.#{$breakpoint}\: {
|
|
96
|
+
// Direction
|
|
97
|
+
&row { flex-direction: row; }
|
|
98
|
+
&row-reverse { flex-direction: row-reverse; }
|
|
99
|
+
&col { flex-direction: column; }
|
|
100
|
+
&col-reverse { flex-direction: column-reverse; }
|
|
101
|
+
|
|
102
|
+
// Wrap
|
|
103
|
+
&wrap { flex-wrap: wrap; }
|
|
104
|
+
&nowrap { flex-wrap: nowrap; }
|
|
105
|
+
&wrap-reverse { flex-wrap: wrap-reverse; }
|
|
106
|
+
|
|
107
|
+
// Justify
|
|
108
|
+
&start { justify-content: flex-start; }
|
|
109
|
+
&end { justify-content: flex-end; }
|
|
110
|
+
¢er { justify-content: center; }
|
|
111
|
+
&between { justify-content: space-between; }
|
|
112
|
+
&around { justify-content: space-around; }
|
|
113
|
+
&evenly { justify-content: space-evenly; }
|
|
114
|
+
|
|
115
|
+
// Align
|
|
116
|
+
&items-start { align-items: flex-start; }
|
|
117
|
+
&items-end { align-items: flex-end; }
|
|
118
|
+
&items-center { align-items: center; }
|
|
119
|
+
&items-baseline { align-items: baseline; }
|
|
120
|
+
&items-stretch { align-items: stretch; }
|
|
121
|
+
|
|
122
|
+
// Width (using column count)
|
|
123
|
+
&w-auto { flex: 1 1 auto; }
|
|
124
|
+
&w-full { flex: 0 0 100%; }
|
|
125
|
+
|
|
126
|
+
@for $i from 1 through $column-count {
|
|
127
|
+
&w-#{$i} {
|
|
128
|
+
flex: 0 0 math.percentage(math.div($i, $column-count));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Gap
|
|
133
|
+
@for $i from 0 through 8 {
|
|
134
|
+
&gap-#{$i} { gap: #{$i * 0.25}rem; }
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
@use '../utilities/variables' as *;
|
|
2
|
+
|
|
3
|
+
// Grid Container Mixins
|
|
4
|
+
@mixin grid {
|
|
5
|
+
display: grid;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@mixin grid-inline {
|
|
9
|
+
display: inline-grid;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Grid Template Mixins
|
|
13
|
+
@mixin grid-cols($count) {
|
|
14
|
+
grid-template-columns: repeat($count, minmax(0, 1fr));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@mixin grid-rows($count) {
|
|
18
|
+
grid-template-rows: repeat($count, minmax(0, 1fr));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Auto-fit/fill Mixins
|
|
22
|
+
@mixin grid-auto-fit($min-width) {
|
|
23
|
+
grid-template-columns: repeat(auto-fit, minmax($min-width, 1fr));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@mixin grid-auto-fill($min-width) {
|
|
27
|
+
grid-template-columns: repeat(auto-fill, minmax($min-width, 1fr));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Grid Flow Mixins
|
|
31
|
+
@mixin grid-flow-row { grid-auto-flow: row; }
|
|
32
|
+
@mixin grid-flow-col { grid-auto-flow: column; }
|
|
33
|
+
@mixin grid-flow-dense { grid-auto-flow: dense; }
|
|
34
|
+
|
|
35
|
+
// Grid Alignment Mixins
|
|
36
|
+
@mixin justify-items($value) {
|
|
37
|
+
justify-items: $value;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@mixin align-items($value) {
|
|
41
|
+
align-items: $value;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@mixin place-items($value) {
|
|
45
|
+
place-items: $value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Grid Item Placement Mixins
|
|
49
|
+
@mixin col-span($span) {
|
|
50
|
+
grid-column: span $span / span $span;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@mixin row-span($span) {
|
|
54
|
+
grid-row: span $span / span $span;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@mixin col-start($start) {
|
|
58
|
+
grid-column-start: $start;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@mixin col-end($end) {
|
|
62
|
+
grid-column-end: $end;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@mixin row-start($start) {
|
|
66
|
+
grid-row-start: $start;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@mixin row-end($end) {
|
|
70
|
+
grid-row-end: $end;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Classes
|
|
74
|
+
.grid { @include grid; }
|
|
75
|
+
.grid.inline { @include grid-inline; }
|
|
76
|
+
|
|
77
|
+
// Grid Template Classes
|
|
78
|
+
@for $i from 1 through $column-count {
|
|
79
|
+
.grid.cols-#{$i} { @include grid-cols($i); }
|
|
80
|
+
.grid.rows-#{$i} { @include grid-rows($i); }
|
|
81
|
+
|
|
82
|
+
// Responsive grid columns
|
|
83
|
+
@each $breakpoint, $width in $breakpoints {
|
|
84
|
+
@media (min-width: $width) {
|
|
85
|
+
.grid.#{$breakpoint}\:cols-#{$i} {
|
|
86
|
+
@include grid-cols($i);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// Generate Column Span Classes with Responsive Variants
|
|
95
|
+
@for $i from 1 through $column-count {
|
|
96
|
+
.col-span-#{$i} {
|
|
97
|
+
@include col-span($i);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@each $breakpoint, $width in $breakpoints {
|
|
101
|
+
@media (min-width: $width) {
|
|
102
|
+
.#{$breakpoint}\:col-span-#{$i} {
|
|
103
|
+
@include col-span($i);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
// Auto-fit/fill Classes
|
|
111
|
+
@each $breakpoint, $width in $column-widths {
|
|
112
|
+
.grid.auto-fit-#{$breakpoint} { @include grid-auto-fit($width); }
|
|
113
|
+
.grid.auto-fill-#{$breakpoint} { @include grid-auto-fill($width); }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Flow Classes
|
|
117
|
+
.grid.flow-row { @include grid-flow-row; }
|
|
118
|
+
.grid.flow-col { @include grid-flow-col; }
|
|
119
|
+
.grid.flow-dense { @include grid-flow-dense; }
|
|
120
|
+
|
|
121
|
+
// Alignment Classes
|
|
122
|
+
$alignments: (
|
|
123
|
+
'start': start,
|
|
124
|
+
'end': end,
|
|
125
|
+
'center': center,
|
|
126
|
+
'stretch': stretch
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
@each $name, $value in $alignments {
|
|
130
|
+
.justify-items-#{$name} { justify-items: $value; }
|
|
131
|
+
.align-items-#{$name} { align-items: $value; }
|
|
132
|
+
.place-items-#{$name} { place-items: $value; }
|
|
133
|
+
|
|
134
|
+
@each $breakpoint, $width in $breakpoints {
|
|
135
|
+
@media (min-width: $width) {
|
|
136
|
+
.#{$breakpoint}\:justify-items-#{$name} {
|
|
137
|
+
justify-items: $value;
|
|
138
|
+
}
|
|
139
|
+
.#{$breakpoint}\:align-items-#{$name} {
|
|
140
|
+
align-items: $value;
|
|
141
|
+
}
|
|
142
|
+
.#{$breakpoint}\:place-items-#{$name} {
|
|
143
|
+
place-items: $value;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@use 'sass:color';
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use './theme' as *;
|
|
4
|
+
@use '../utilities/variables' as *;
|
|
5
|
+
|
|
6
|
+
[data-theme="dark"] {
|
|
7
|
+
// ... other dark theme variables ...
|
|
8
|
+
@include generate-theme-colors('dark');
|
|
9
|
+
|
|
10
|
+
--font-family-heading: var(--font-family-base);
|
|
11
|
+
$base-dark-color: map.get($colors, 'dark');
|
|
12
|
+
|
|
13
|
+
--input-bg: #{color.scale($base-dark-color, $lightness: -20%)};
|
|
14
|
+
|
|
15
|
+
// --text-primary: #{map.get($colors, 'light')};
|
|
16
|
+
// --link-color: #{color.scale(map.get($colors, 'primary'), $lightness: 10%)};
|
|
17
|
+
// --link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: 20%)};
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// --nav-bg: #{map.get($colors, 'dark')};
|
|
21
|
+
// // --nav-hover: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
|
|
22
|
+
// --nav-hover: black;
|
|
23
|
+
// --nav-text: #{map.get($colors, 'white')};
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
@use 'sass:color';
|
|
2
|
+
@use 'sass:map';
|
|
3
|
+
@use './theme' as *;
|
|
4
|
+
@use '../utilities/variables' as *;
|
|
5
|
+
|
|
6
|
+
[data-theme="light"] {
|
|
7
|
+
// ... other light theme variables ...
|
|
8
|
+
@include generate-theme-colors('light');
|
|
9
|
+
|
|
10
|
+
$base-dark-color: map.get($colors, 'light');
|
|
11
|
+
|
|
12
|
+
--input-bg: #{color.scale($base-dark-color, $lightness: 20%)};
|
|
13
|
+
|
|
14
|
+
// --font-family-heading: var(--font-family-base);
|
|
15
|
+
// --text-primary: #{map.get($colors, 'dark')};
|
|
16
|
+
// --link-color: #{map.get($colors, 'primary')};
|
|
17
|
+
// --link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: -10%)};
|
|
18
|
+
|
|
19
|
+
// --nav-bg: #{map.get($colors, 'light')};
|
|
20
|
+
// // --nav-hover: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
|
|
21
|
+
// --nav-hover: white;
|
|
22
|
+
// --nav-text: #{map.get($colors, 'dark')};
|
|
23
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// _theme.scss
|
|
2
|
+
@use 'sass:color';
|
|
3
|
+
@use 'sass:map';
|
|
4
|
+
@use '../utilities/variables' as *;
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
// Color variations percentage
|
|
8
|
+
$color-variations: (
|
|
9
|
+
'lighter': 15%,
|
|
10
|
+
'light': 10%,
|
|
11
|
+
'dark': -10%,
|
|
12
|
+
'darker': -15%
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
$opacity-levels: (
|
|
16
|
+
'10': 0.1,
|
|
17
|
+
'25': 0.25,
|
|
18
|
+
'50': 0.5,
|
|
19
|
+
'75': 0.75
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@function theme-color($color-name, $variant: 'base') {
|
|
24
|
+
@return var(--#{$color-name}#{if($variant == 'base', '', '-' + $variant)});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@mixin generate-theme-colors($theme) {
|
|
28
|
+
@each $name, $color in $colors {
|
|
29
|
+
// Base color
|
|
30
|
+
--#{$name}: #{$color};
|
|
31
|
+
--#{$name}-rgb: #{color.channel($color, 'red')}, #{color.channel($color, 'green')}, #{color.channel($color, 'blue')};
|
|
32
|
+
|
|
33
|
+
// Variations
|
|
34
|
+
@each $variant, $percentage in $color-variations {
|
|
35
|
+
--#{$name}-#{$variant}: #{if($theme == 'light',
|
|
36
|
+
color.scale($color, $lightness: $percentage),
|
|
37
|
+
color.scale($color, $lightness: $percentage * -1)
|
|
38
|
+
)};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Opacity variations
|
|
42
|
+
@each $level, $opacity in $opacity-levels {
|
|
43
|
+
--#{$name}-#{$level}: #{rgba($color, $opacity)};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// State variations
|
|
47
|
+
--#{$name}-hover: var(--#{$name}-#{if($theme == 'light', 'dark', 'light')});
|
|
48
|
+
--#{$name}-active: var(--#{$name}-#{if($theme == 'light', 'darker', 'lighter')});
|
|
49
|
+
--#{$name}-disabled: var(--#{$name}-50);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Background & Border
|
|
53
|
+
@if $theme == 'light' {
|
|
54
|
+
--bg-primary: var(--light);
|
|
55
|
+
--bg-secondary: #{color.scale(map.get($colors, 'light'), $lightness: -5%)};
|
|
56
|
+
--bg-tertiary: #{color.scale(map.get($colors, 'light'), $lightness: -10%)};
|
|
57
|
+
--border-color: #{rgba(map.get($colors, 'dark'), 0.1)};
|
|
58
|
+
--border-color-dark: #{rgba(map.get($colors, 'dark'), 0.2)};
|
|
59
|
+
} @else {
|
|
60
|
+
--bg-primary: var(--dark);
|
|
61
|
+
--bg-secondary: #{color.scale(map.get($colors, 'dark'), $lightness: 5%)};
|
|
62
|
+
--bg-tertiary: #{color.scale(map.get($colors, 'dark'), $lightness: 10%)};
|
|
63
|
+
--border-color: #{rgba(map.get($colors, 'light'), 0.07)};
|
|
64
|
+
--border-color-dark: #{rgba(map.get($colors, 'light'), 0.15)};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
// Text Colors
|
|
69
|
+
@if $theme == 'light' {
|
|
70
|
+
--text-primary: var(--dark);
|
|
71
|
+
--text-secondary: #{rgba(map.get($colors, 'dark'), 0.7)};
|
|
72
|
+
--text-tertiary: #{rgba(map.get($colors, 'dark'), 0.5)};
|
|
73
|
+
--text-disabled: #{rgba(map.get($colors, 'dark'), 0.3)};
|
|
74
|
+
--text-inverse: var(--light);
|
|
75
|
+
} @else {
|
|
76
|
+
--text-primary: var(--light);
|
|
77
|
+
--text-secondary: #{rgba(map.get($colors, 'light'), 0.7)};
|
|
78
|
+
--text-tertiary: #{rgba(map.get($colors, 'light'), 0.5)};
|
|
79
|
+
--text-disabled: #{rgba(map.get($colors, 'light'), 0.3)};
|
|
80
|
+
--text-inverse: var(--dark);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
// Link Colors
|
|
85
|
+
--link-color: var(--primary);
|
|
86
|
+
--link-hover-color: #{color.scale(map.get($colors, 'primary'), $lightness: if($theme == 'light', -10%, 10%))};
|
|
87
|
+
--link-active-color: #{color.scale(map.get($colors, 'primary'), $lightness: if($theme == 'light', -20%, 20%))};
|
|
88
|
+
--link-visited-color: #{color.scale(map.get($colors, 'primary'), $saturation: -20%)};
|
|
89
|
+
|
|
90
|
+
// Navigation
|
|
91
|
+
--nav-bg: var(--bg-primary);
|
|
92
|
+
--nav-hover: var(--bg-secondary);
|
|
93
|
+
--nav-active: var(--bg-tertiary);
|
|
94
|
+
--nav-text: var(--text-primary);
|
|
95
|
+
--nav-text-hover: var(--primary);
|
|
96
|
+
--nav-border: var(--border-color);
|
|
97
|
+
|
|
98
|
+
// Tooltip
|
|
99
|
+
--tooltip-bg: var(--dark);
|
|
100
|
+
--tooltip-text: var(--light);
|
|
101
|
+
--tooltip-shadow-color: rgba(0,0,0,0.4);
|
|
102
|
+
--microtip-transition-duration: 0.518s;
|
|
103
|
+
--microtip-transition-delay: .2s;
|
|
104
|
+
--microtip-transition-easing: cubic-bezier(0.16, 1, 0.9, 1);
|
|
105
|
+
--microtip-font-size: 0.875rem;
|
|
106
|
+
--microtip-font-weight: 300;
|
|
107
|
+
--microtip-text-transform: none;
|
|
108
|
+
|
|
109
|
+
// Shadow
|
|
110
|
+
// --shadow-color: #{if($theme == 'light', '0,0,0', '255,255,255')};
|
|
111
|
+
// --shadow-opacity: #{if($theme == 'light', 0.1, 0.5)};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
.btn-primary {
|
|
116
|
+
background-color: theme-color('primary');
|
|
117
|
+
|
|
118
|
+
&:hover {
|
|
119
|
+
background-color: theme-color('primary', 'hover');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&:disabled {
|
|
123
|
+
background-color: theme-color('primary', 'disabled');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.form-input {
|
|
128
|
+
border-color: var(--border-color);
|
|
129
|
+
color: var(--text-primary);
|
|
130
|
+
|
|
131
|
+
&:focus {
|
|
132
|
+
border-color: theme-color('primary');
|
|
133
|
+
box-shadow: 0 0 0 4px theme-color('primary', '25');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
*/
|