@nuvoui/core 1.0.1 → 1.1.3

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 (36) hide show
  1. package/dist/nuvoui.css +1 -0
  2. package/package.json +10 -5
  3. package/src/styles/index.scss +2 -6
  4. package/src/styles/layouts/_flex.scss +1 -0
  5. package/src/styles/mixins-map.scss +1175 -0
  6. package/src/styles/themes/_theme.scss +0 -1
  7. package/src/styles/utilities/_display.scss +1 -0
  8. package/src/styles/utilities/_spacing.scss +33 -14
  9. package/dist/dark.css +0 -1
  10. package/dist/index.html +0 -15
  11. package/dist/light.css +0 -1
  12. package/dist/main.css +0 -1
  13. package/dist/main.js +0 -1
  14. package/src/js/main.js +0 -1
  15. package/src/logo.png +0 -0
  16. package/src/logo.svg +0 -12
  17. package/src/styles/components/_alert.scss +0 -0
  18. package/src/styles/components/_avatar.scss +0 -0
  19. package/src/styles/components/_badge.scss +0 -0
  20. package/src/styles/components/_breadcrumb.scss +0 -0
  21. package/src/styles/components/_button.scss +0 -261
  22. package/src/styles/components/_calendar.scss +0 -0
  23. package/src/styles/components/_card.scss +0 -0
  24. package/src/styles/components/_checkbox.scss +0 -0
  25. package/src/styles/components/_dropdown.scss +0 -0
  26. package/src/styles/components/_form.scss +0 -195
  27. package/src/styles/components/_hamburger.scss +0 -72
  28. package/src/styles/components/_modal.scss +0 -0
  29. package/src/styles/components/_navbar.scss +0 -137
  30. package/src/styles/components/_pagination.scss +0 -0
  31. package/src/styles/components/_progress.scss +0 -0
  32. package/src/styles/components/_radio.scss +0 -0
  33. package/src/styles/components/_sidebar.scss +0 -0
  34. package/src/styles/components/_table.scss +0 -0
  35. package/src/styles/components/_tabs.scss +0 -0
  36. package/src/styles/components/_tooltip.scss +0 -0
package/dist/main.js DELETED
@@ -1 +0,0 @@
1
- (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function s(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=s(e);fetch(e.href,r)}})();
package/src/js/main.js DELETED
@@ -1 +0,0 @@
1
- import '../styles/index.scss';
package/src/logo.png DELETED
Binary file
package/src/logo.svg DELETED
@@ -1,12 +0,0 @@
1
- <svg width="418" height="418" viewBox="0 0 418 418" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <mask id="mask0_4118_5137" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="418" height="418">
3
- <rect width="418" height="418" fill="#F1F4D8"/>
4
- </mask>
5
- <g mask="url(#mask0_4118_5137)">
6
- <rect width="418" height="418" fill="#F1F4D8"/>
7
- <path d="M418 419H77L296.5 262.5L418 201V419Z" fill="#0476A4"/>
8
- <path d="M316.794 -185.998L487.294 109.316L242.011 -2.52617L128 -76.9983L316.794 -185.998Z" fill="#0476A4"/>
9
- <line x1="-17.2721" y1="410.484" x2="431.728" y2="185.484" stroke="#5FCFFF" stroke-width="28"/>
10
- <circle cx="267" cy="183" r="66.5" stroke="#FF7B00" stroke-width="15"/>
11
- </g>
12
- </svg>
File without changes
File without changes
File without changes
File without changes
@@ -1,261 +0,0 @@
1
- // _button.scss
2
- @use 'sass:map';
3
-
4
- @use '../utilities/variables' as *;
5
- @use '../utilities/typography' as *;
6
- @use '../utilities/borders' as *;
7
- @use '../themes/theme' as *;
8
-
9
-
10
- // Button Base Mixins
11
- @mixin btn-base {
12
- display: inline-flex;
13
- align-items: center;
14
- justify-content: center;
15
- gap: 0.5rem;
16
- padding: 0.5rem 1rem;
17
- border: 1px solid transparent;
18
- border-radius: 0.375rem;
19
- font-weight: 500;
20
- cursor: pointer;
21
- transition: all 0.2s ease-in-out;
22
-
23
- &:disabled {
24
- cursor: not-allowed;
25
- opacity: 0.65;
26
- }
27
-
28
- // Loading state
29
- &.loading {
30
- position: relative;
31
- color: transparent !important;
32
- pointer-events: none;
33
-
34
- &::after {
35
- content: "";
36
- position: absolute;
37
- width: 1rem;
38
- height: 1rem;
39
- border: 1px solid;
40
- border-radius: 50%;
41
- border-right-color: transparent;
42
- animation: spin 0.75s linear infinite;
43
- }
44
- }
45
- }
46
-
47
- // Button Variants
48
- @mixin btn-solid($color) {
49
- background-color: theme-color($color);
50
- color: if($color == 'light', black, white); /* var(--text-inverse); */
51
-
52
- &:disabled { background-color: theme-color($color, 'disabled'); }
53
- &:hover:not(:disabled) { background-color: theme-color($color, 'hover'); }
54
- &:active:not(:disabled) { background-color: theme-color($color, 'active'); }
55
- }
56
-
57
- @mixin btn-outline($color) {
58
- background-color: transparent;
59
- border-color: theme-color($color);
60
- color: theme-color($color);
61
-
62
- &:disabled {
63
- border-color: theme-color($color, 'disabled');
64
- color: theme-color($color, 'disabled');
65
- }
66
-
67
- &:hover:not(:disabled) {
68
- background-color: theme-color($color);
69
- color: var(--text-inverse);
70
- }
71
-
72
- &:active:not(:disabled) {
73
- background-color: theme-color($color, 'active');
74
- }
75
- }
76
-
77
- @mixin btn-ghost($color) {
78
- background-color: transparent;
79
- color: theme-color($color);
80
-
81
- &:disabled {
82
- color: theme-color($color, 'disabled');
83
- }
84
-
85
- &:hover:not(:disabled) {
86
- background-color: theme-color($color, '10');
87
- }
88
-
89
- &:active:not(:disabled) {
90
- background-color: theme-color($color, '25');
91
- }
92
- }
93
-
94
- // Button Sizes
95
- @mixin btn-size($size) {
96
- font-size: map.get($font-sizes, $size);
97
- padding: map.get($padding-map, $size);
98
-
99
- .btn.icon {
100
- $icon-sizes: (
101
- 'xs': 0.75rem,
102
- 'sm': 1rem,
103
- 'md': 1.25rem,
104
- 'lg': 1.5rem,
105
- 'xl': 1.75rem
106
- );
107
-
108
- width: map.get($icon-sizes, $size);
109
- height: map.get($icon-sizes, $size);
110
- }
111
- }
112
-
113
- // Button Shapes
114
- @mixin btn-shape($shape) {
115
- @if $shape == 'rounded' {
116
- @include rounded(0.375rem);
117
- } @else if $shape == 'pill' {
118
- border-radius: 9999px;
119
- } @else if $shape == 'square' {
120
- border-radius: 0;
121
- }
122
- }
123
-
124
- @mixin btn-group-base {
125
- display: inline-flex;
126
- position: relative;
127
- .btn { position: relative; }
128
-
129
- // Handle z-index for hover states
130
- .btn:hover { z-index: 1; }
131
-
132
- // Remove double borders between buttons
133
- .btn:not(:first-child) { margin-left: -1px; }
134
-
135
- .btn:not(:first-child, :last-child) { border-radius: 0; }
136
-
137
- .btn:first-child:dir(ltr) {
138
- border-top-right-radius: 0;
139
- border-bottom-right-radius: 0;
140
- }
141
-
142
- .btn:last-child:dir(ltr) {
143
- border-top-left-radius: 0;
144
- border-bottom-left-radius: 0;
145
- }
146
-
147
- @if $enable-rtl {
148
- .btn:first-child:dir(rtl) {
149
- border-top-left-radius: 0;
150
- border-bottom-left-radius: 0;
151
- }
152
-
153
- .btn:last-child:dir(rtl) {
154
- border-top-right-radius: 0;
155
- border-bottom-right-radius: 0;
156
- }
157
- }
158
- }
159
-
160
- // Base Button Class
161
- .btn {
162
- @include btn-base;
163
- @include btn-size('md');
164
- @include btn-shape('rounded');
165
-
166
- // Outline variant
167
- &.outline {
168
- @include btn-outline('text-secondary'); // Default outline style
169
-
170
- // Color variants override
171
- @each $name, $color in $colors {
172
- &.#{$name} {
173
- @include btn-outline($name);
174
- }
175
- }
176
- }
177
-
178
- // Ghost variant
179
- &.ghost {
180
- @include btn-ghost('text-secondary'); // Default ghost style
181
-
182
- // Color variants override
183
- @each $name, $color in $colors {
184
- &.#{$name} {
185
- @include btn-ghost($name);
186
- }
187
- }
188
- }
189
-
190
- // Color variants for solid buttons
191
- @each $name, $color in $colors {
192
- &.#{$name} {
193
- @include btn-solid($name);
194
- }
195
- }
196
- }
197
-
198
-
199
-
200
- // Icon Only Buttons
201
- .btn.icon {
202
- padding: 0.5rem;
203
-
204
- &.btn-xs { padding: 0.25rem; }
205
- &.btn-sm { padding: 0.375rem; }
206
- &.btn-lg { padding: 0.75rem; }
207
- &.btn-xl { padding: 1rem; }
208
- }
209
-
210
- // Sizes
211
- .btn-group.xs > .btn, .btn.xs { @include btn-size('xs'); }
212
- .btn-group.sm > .btn, .btn.sm { @include btn-size('sm'); }
213
- .btn-group.md > .btn, .btn.md { @include btn-size('md'); }
214
- .btn-group.lg > .btn, .btn.lg { @include btn-size('lg'); }
215
- .btn-group.xl > .btn, .btn.xl { @include btn-size('xl'); }
216
-
217
- // Shapes
218
- .btn-group.rounded > .btn, .btn.rounded { @include btn-shape('rounded'); }
219
- .btn-group.pill > .btn, .btn.pill { @include btn-shape('pill'); }
220
- .btn-group.square > .btn, .btn.square { @include btn-shape('square'); }
221
-
222
- .btn-group {
223
- @include btn-group-base;
224
-
225
- // Color variants for solid buttons
226
- @each $name, $color in $colors {
227
- &.#{$name} > .btn{
228
- @include btn-solid($name);
229
- }
230
- }
231
- }
232
-
233
- // Outline variant
234
- .btn-group.outline > .btn {
235
- @include btn-outline('text-secondary'); // Default outline style
236
- }
237
-
238
- // Color variants override
239
- @each $name, $color in $colors {
240
- .btn-group.outline.#{$name} > .btn {
241
- @include btn-outline($name);
242
- }
243
- }
244
-
245
-
246
- // Outline variant
247
- .btn-group.ghost > .btn {
248
- @include btn-ghost('text-secondary'); // Default outline style
249
- }
250
-
251
- // Color variants override
252
- @each $name, $color in $colors {
253
- .btn-group.ghost.#{$name} > .btn {
254
- @include btn-ghost($name);
255
- }
256
- }
257
-
258
- // Loading Animation
259
- @keyframes spin {
260
- to { transform: rotate(360deg); }
261
- }
File without changes
File without changes
File without changes
File without changes
@@ -1,195 +0,0 @@
1
- // _forms.scss
2
- @use 'sass:map';
3
- @use '../utilities/variables' as *;
4
- @use '../themes/theme' as Theme;
5
-
6
-
7
-
8
- @mixin form-inline {
9
- display: flex;
10
- align-items: center;
11
- gap: 1rem;
12
- }
13
-
14
- // Label Mixins
15
- @mixin form-label {
16
- position: absolute;
17
- left: 1rem;
18
- top: 50%;
19
- transform: translateY(-50%);
20
- transition: all 0.2s ease-in-out;
21
- color: var(--text-secondary);
22
- pointer-events: none;
23
- font-size: 1rem;
24
- }
25
-
26
- @mixin form-label-float {
27
- top: 0;
28
- font-size: 0.875rem;
29
- transform: translateY(-50%);
30
- background: var(--bg-primary);
31
- padding: 0 0.5rem;
32
- }
33
-
34
- // Input Mixins
35
- @mixin form-input {
36
- width: 100%;
37
- padding: 0.85rem;
38
- border: 1px solid Theme.theme-color('border-color');
39
- border-radius: 0.5rem;
40
- background: Theme.theme-color('input-bg');
41
- color: var(--text-primary);
42
- font-size: 1rem;
43
- transition: all 0.2s ease-in-out;
44
-
45
- &:focus {
46
- outline: none;
47
- border-color: var(--primary);
48
- box-shadow: 0 0 0 4px rgba(var(--primary-rgb), 0.1);
49
- }
50
- }
51
-
52
-
53
- // Handle input with value or placeholder
54
- @mixin form-group {
55
- position: relative;
56
- margin-bottom: 1.5rem;
57
-
58
- &:has(input:not(:placeholder-shown)) > label.form-label,
59
- &:has(input:focus) > label.form-label {
60
- @include form-label-float;
61
- }
62
-
63
- // Change label color if input is focused
64
- &:has(input:focus) > label {
65
- color: var(--primary);
66
- }
67
- }
68
-
69
- // Validation Mixins
70
- @mixin form-valid {
71
- border-color: var(--success);
72
-
73
- & + label {
74
- color: var(--success);
75
- }
76
- }
77
-
78
- @mixin form-invalid {
79
- border-color: var(--danger);
80
-
81
- & + label {
82
- color: var(--danger);
83
- }
84
- }
85
-
86
- // Select Mixins
87
- @mixin form-select {
88
- @include form-input;
89
-
90
- appearance: none;
91
- background-image: url("data:image/svg+xml,..."); // todo: colored arrow svg
92
- background-repeat: no-repeat;
93
- background-position: right 1rem center;
94
- padding-right: 2.5rem;
95
- }
96
-
97
- // Checkbox & Radio Mixins
98
- @mixin form-selection {
99
- position: relative;
100
- display: inline-flex;
101
- align-items: center;
102
- cursor: pointer;
103
- user-select: none;
104
- }
105
-
106
- @mixin form-selection-input {
107
- &[type="checkbox"]{
108
- border-radius: 0.25rem;
109
- }
110
-
111
- &[type="radio"]{
112
- border-radius: 20rem;
113
- }
114
-
115
- appearance: none;
116
- width: 1.25rem;
117
- height: 1.25rem;
118
- border: 2px solid var(--border-color);
119
- margin-right: 0.5rem;
120
- cursor: pointer;
121
-
122
- &:checked {
123
- background-color: var(--primary); border-color: var(--primary);
124
- @each $name, $color in $colors {
125
- &.#{$name} {
126
- background-color: Theme.theme-color($name); border-color: Theme.theme-color($name);}
127
- }
128
-
129
- background-image: url("data:image/svg+xml,..."); // todo: colored arrow svg
130
- }
131
- }
132
-
133
- // Input Sizes
134
- @mixin input-size($size) {
135
- font-size: map.get($font-sizes, $size);
136
- padding: map.get($padding-map, $size);
137
- }
138
-
139
- // Classes
140
- .form-group { @include form-group; }
141
- .form-inline { @include form-inline; }
142
- .form-label { @include form-label; }
143
- .form-input { @include form-input; }
144
- .form-select { @include form-select; }
145
- .form-check, .form-radio { @include form-selection; }
146
- .form-check-input, .form-radio-input { @include form-selection-input; }
147
-
148
- // Validation Classes
149
- .is-valid { @include form-valid; }
150
- .is-invalid { @include form-invalid; }
151
-
152
-
153
- small{
154
- font-size: 0.875rem;
155
- position: absolute;
156
- right: 20px;
157
- top: -10px;
158
- background: #f8f9fa;
159
- padding: 0 10px;
160
- }
161
-
162
- // Base Input Class
163
- .form-input, .form-select {
164
- @include input-size('md'); // Default size
165
-
166
- // Sizes
167
- &.xs { @include input-size('xs'); }
168
- &.sm { @include input-size('sm'); }
169
- &.md { @include input-size('md'); }
170
- &.lg { @include input-size('lg'); }
171
- &.xl { @include input-size('xl'); }
172
- &.xxl { @include input-size('2xl'); }
173
- &.xxxl { @include input-size('3xl'); }
174
- }
175
-
176
- // Dark Mode Support
177
- // [data-theme="dark"] {
178
- // .form-input,
179
- // .form-select {
180
- // background-color: var(--bg-secondary);
181
- // border-color: var(--border-color-dark);
182
-
183
- // &:focus {
184
- // border-color: var(--primary-dark);
185
- // }
186
- // }
187
- // }
188
-
189
- // Accessibility
190
- @media (prefers-reduced-motion: reduce) {
191
- .form-input,
192
- .form-label {
193
- transition: none;
194
- }
195
- }
@@ -1,72 +0,0 @@
1
- @use "sass:math";
2
- @use 'sass:color';
3
- @use 'sass:map';
4
-
5
- @use '../utilities/media-queries' as Responsive;
6
- @use '../utilities/variables' as *;
7
-
8
- // _mixins.scss
9
- @mixin hamburger($color: currentColor, $size: 24px, $thickness: 2px) {
10
- .hamburger {
11
- --hamburger-color: #{$color};
12
- --hamburger-size: #{$size};
13
- --hamburger-thickness: #{$thickness};
14
-
15
- &:focus {
16
- outline: none;
17
- box-shadow: none;
18
- }
19
-
20
- // display: none;
21
- cursor: pointer;
22
- width: var(--hamburger-size);
23
- height: var(--hamburger-size);
24
- position: relative;
25
- border: 0;
26
- background: transparent;
27
- padding: 0;
28
-
29
- span {
30
- display: block;
31
- position: absolute;
32
- left: 0;
33
- right: 0;
34
- height: var(--hamburger-thickness);
35
- background-color: var(--hamburger-color);
36
- transform-origin: center;
37
- transition: transform 0.2s ease,
38
- opacity 0.2s ease;
39
-
40
- &:first-child {
41
- top: 20%;
42
- }
43
-
44
- &:nth-child(2) {
45
- top: 50%;
46
- transform: translateY(-50%);
47
- }
48
-
49
- &:last-child {
50
- bottom: 20%;
51
- }
52
- }
53
-
54
- &[aria-expanded="true"] span {
55
- &:first-child {
56
- transform: translateY(7px) rotate(45deg);
57
- }
58
-
59
- &:nth-child(2) {
60
- opacity: 0;
61
- }
62
-
63
- &:last-child {
64
- transform: translateY(-7px) rotate(-45deg);
65
- }
66
- }
67
-
68
- @include Responsive.media-up('md') {
69
- display: none;
70
- }
71
- }
72
- }
File without changes
@@ -1,137 +0,0 @@
1
- // _navbar.scss
2
-
3
- @use '../utilities/media-queries' as Responsive;
4
- @use '../utilities/shadows' as *;
5
- @use '../utilities/variables' as *;
6
- @use '../layouts/container' as Container;
7
- @use '../layouts/flex' as Flex;
8
-
9
- .navbar {
10
- @include Container.container-flex;
11
- @include Flex.align-center;
12
- @include Flex.between;
13
-
14
- &:hover {
15
- @include shadow('lg', 'dark');
16
- }
17
-
18
- background-color: var(--nav-bg);
19
-
20
- .logo {
21
- img {
22
- max-height: 40px;
23
- width: auto;
24
- }
25
- }
26
-
27
- .submenu {
28
- background-color: white;
29
- display: block;
30
- visibility: hidden; // Use visibility instead of display
31
- pointer-events: none; // Prevents interaction when hidden
32
- opacity: 0;
33
- position: absolute;
34
- top: 100%;
35
- left: 0;
36
- min-width: 200px;
37
- list-style: none;
38
- margin: 0;
39
- padding: 0;
40
- box-shadow: 0 2px 5px rgba(0 0 0 / 10%);
41
-
42
- // Animation
43
- transition:
44
- opacity 0.2s ease-in-out,
45
- visibility 0.2s ease-in-out;
46
-
47
- li {
48
- a {
49
- padding: 0.75rem 1rem;
50
- }
51
- }
52
-
53
- // Nested dropdowns
54
- .submenu {
55
- top: 0;
56
- left: 100%;
57
- }
58
- }
59
-
60
- .menu {
61
- @include Flex.flex;
62
-
63
- list-style: none;
64
- margin: 0;
65
- padding: 0;
66
-
67
- li {
68
- position: relative;
69
-
70
- a {
71
- display: block;
72
- padding: 1rem;
73
- text-decoration: none;
74
- color: var(--nav-text);
75
- transition: background-color 0.2s ease-in-out;
76
-
77
- &:hover {
78
- background-color: var(--nav-hover);
79
- }
80
- }
81
-
82
- // Dropdown styles
83
- &:hover>.submenu {
84
- display: block;
85
- visibility: visible;
86
- opacity: 1;
87
- pointer-events: auto; // Re-enable interactions
88
- }
89
- }
90
- }
91
-
92
- // Responsive styles
93
- @include Responsive.media-down(md) {
94
- .menu {
95
- transition: all 1.3s ease;
96
- display: none;
97
- flex-direction: column;
98
- background-color: var(--nav-bg);
99
- position: absolute;
100
- top: 100%;
101
- left: 0;
102
- width: 100%;
103
-
104
- &[data-visible="true"] {
105
- display: flex;
106
- }
107
-
108
- li {
109
- width: 100%;
110
- text-align: left;
111
-
112
- .submenu {
113
- position: relative;
114
- left: 0;
115
- top: 0;
116
- display: none;
117
- visibility: visible;
118
- opacity: 1;
119
- pointer-events: auto;
120
- box-shadow: none;
121
- background-color: var(--nav-hover);
122
-
123
- &[data-visible="true"] {
124
- display: flex;
125
- flex-direction: column;
126
- }
127
- }
128
- }
129
- }
130
-
131
- .navbar__cta {
132
- width: 100%;
133
- justify-content: center;
134
- padding: 1rem 0;
135
- }
136
- }
137
- }
File without changes