@razerspine/pug-ui-kit 1.0.1 → 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.
Files changed (80) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +113 -20
  3. package/fonts/Roboto-Bold.woff +0 -0
  4. package/fonts/Roboto-Bold.woff2 +0 -0
  5. package/fonts/Roboto-Light.woff +0 -0
  6. package/fonts/Roboto-Light.woff2 +0 -0
  7. package/fonts/Roboto-Medium.woff +0 -0
  8. package/fonts/Roboto-Medium.woff2 +0 -0
  9. package/fonts/Roboto-Regular.woff +0 -0
  10. package/fonts/Roboto-Regular.woff2 +0 -0
  11. package/fonts/Roboto-Thin.woff +0 -0
  12. package/fonts/Roboto-Thin.woff2 +0 -0
  13. package/index.js +10 -1
  14. package/less/base/_fonts.less +46 -0
  15. package/less/base/_index.less +2 -0
  16. package/less/base/_reset.less +155 -0
  17. package/less/components/_aside.less +49 -0
  18. package/less/components/_buttons.less +156 -0
  19. package/less/components/_footer.less +25 -0
  20. package/less/components/_form-control.less +27 -0
  21. package/less/components/_form-textarea.less +7 -0
  22. package/less/components/_forms.less +76 -0
  23. package/less/components/_header.less +57 -0
  24. package/less/components/_icons.less +42 -0
  25. package/less/components/_index.less +14 -0
  26. package/less/components/_input-base.less +48 -0
  27. package/less/components/_input-checkbox.less +10 -0
  28. package/less/components/_input-radio.less +10 -0
  29. package/less/components/_main.less +32 -0
  30. package/less/components/_single-select.less +29 -0
  31. package/less/components/_table.less +45 -0
  32. package/less/layout/_grid.less +104 -0
  33. package/less/layout/_index.less +2 -0
  34. package/less/layout/_layout.less +55 -0
  35. package/less/settings/_breakpoints.less +5 -0
  36. package/less/settings/_index.less +3 -0
  37. package/less/settings/_typography.less +2 -0
  38. package/less/settings/_variables.less +16 -0
  39. package/less/themes/_dark.less +25 -0
  40. package/less/themes/_index.less +2 -0
  41. package/less/themes/_light.less +49 -0
  42. package/less/ui-kit.less +6 -0
  43. package/less/utils/_helpers.less +32 -0
  44. package/less/utils/_index.less +3 -0
  45. package/less/utils/_mixins.less +36 -0
  46. package/less/utils/_utilities.less +400 -0
  47. package/package.json +6 -1
  48. package/scss/base/_fonts.scss +46 -0
  49. package/scss/base/_index.scss +2 -0
  50. package/scss/base/_reset.scss +155 -0
  51. package/scss/components/_aside.scss +47 -0
  52. package/scss/components/_buttons.scss +158 -0
  53. package/scss/components/_footer.scss +25 -0
  54. package/scss/components/_form-control.scss +27 -0
  55. package/scss/components/_form-textarea.scss +7 -0
  56. package/scss/components/_forms.scss +75 -0
  57. package/scss/components/_header.scss +57 -0
  58. package/scss/components/_icons.scss +42 -0
  59. package/scss/components/_index.scss +14 -0
  60. package/scss/components/_input-base.scss +48 -0
  61. package/scss/components/_input-checkbox.scss +10 -0
  62. package/scss/components/_input-radio.scss +10 -0
  63. package/scss/components/_main.scss +24 -0
  64. package/scss/components/_single-select.scss +29 -0
  65. package/scss/components/_table.scss +45 -0
  66. package/scss/layout/_grid.scss +64 -0
  67. package/scss/layout/_index.scss +2 -0
  68. package/scss/layout/_layout.scss +49 -0
  69. package/scss/settings/_breakpoints.scss +7 -0
  70. package/scss/settings/_index.scss +3 -0
  71. package/scss/settings/_typography.scss +2 -0
  72. package/scss/settings/_variables.scss +16 -0
  73. package/scss/themes/_dark.scss +25 -0
  74. package/scss/themes/_index.scss +2 -0
  75. package/scss/themes/_light.scss +49 -0
  76. package/scss/ui-kit.scss +6 -0
  77. package/scss/utils/_helpers.scss +18 -0
  78. package/scss/utils/_index.scss +3 -0
  79. package/scss/utils/_mixins.scss +16 -0
  80. package/scss/utils/_utilities.scss +305 -0
@@ -0,0 +1,49 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .layout {
4
+ background-color: var(--bg-color);
5
+ color: var(--text-primary);
6
+ display: grid;
7
+ grid-template-areas: 'header''aside''main''footer';
8
+ grid-template-columns: 1fr;
9
+ grid-template-rows: auto auto 1fr auto;
10
+ width: 100%;
11
+ min-height: 100dvh;
12
+ gap: $gutter;
13
+ font-family: $font-family;
14
+ font-size: $base-font-size;
15
+ font-weight: 400;
16
+ line-height: 1.5;
17
+ @media screen and (min-width: map-get($breakpoints, lg)) {
18
+ grid-template-areas:
19
+ 'header header header header'
20
+ 'gutter-left aside main gutter-right'
21
+ 'footer footer footer footer';
22
+ grid-template-columns: 1fr minmax($aside-min, calc(#{$available-width} * #{$aside-ratio} / #{$total-ratio})) minmax($main-min, calc(#{$available-width} * #{$main-ratio} / #{$total-ratio})) 1fr;
23
+ grid-template-rows: auto 1fr auto;
24
+ gap: calc($gutter * 2);
25
+ }
26
+ @media (prefers-reduced-motion: reduce) {
27
+ * {
28
+ transition-duration: 0ms;
29
+ animation-duration: 0ms;
30
+ }
31
+ }
32
+ }
33
+
34
+ .layout-simple {
35
+ background-color: var(--bg-color);
36
+ color: var(--text-primary);
37
+ display: grid;
38
+ grid:
39
+ "header" auto
40
+ "main" 1fr
41
+ "footer" auto
42
+ / 1fr;
43
+ width: 100%;
44
+ font-family: $font-family;
45
+ font-size: $base-font-size;
46
+ font-weight: 400;
47
+ line-height: 1.5;
48
+ gap: $gutter;
49
+ }
@@ -0,0 +1,7 @@
1
+ $breakpoints: (
2
+ xs: 0,
3
+ sm: 576px,
4
+ md: 768px,
5
+ lg: 992px,
6
+ xl: 1200px
7
+ );
@@ -0,0 +1,3 @@
1
+ @forward 'variables';
2
+ @forward 'breakpoints';
3
+ @forward 'typography';
@@ -0,0 +1,2 @@
1
+ $font-family: "Roboto", system-ui, -apple-system, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
2
+ $base-font-size: 14px;
@@ -0,0 +1,16 @@
1
+ // layout
2
+ $container-max: 1360px;
3
+ $columns: 12;
4
+ $gutter: 15px;
5
+ $border-radius: .375rem;
6
+
7
+ // layout settings
8
+ $aside-ratio: 1;
9
+ $main-ratio: 3;
10
+ $aside-min: 300px;
11
+ $main-min: 320px;
12
+ $total-ratio: $aside-ratio + $main-ratio;
13
+ $available-width: calc(#{$container-max} - #{calc(#{$gutter} * 2)}); // when layout have gap
14
+
15
+ // font path
16
+ $font-path: '~@razerspine/pug-ui-kit/fonts' !default;
@@ -0,0 +1,25 @@
1
+ html[data-theme="dark"] {
2
+ --bg-color: #020617;
3
+ --bg-surface: #0f172a;
4
+ --bg-subtle: #1e293b;
5
+
6
+ --text-primary: #f8fafc;
7
+ --text-secondary: #94a3b8;
8
+ --text-disabled: #475569;
9
+ --text-on-brand: #ffffff;
10
+
11
+ --success: #34d399;
12
+ --error: #f87171;
13
+
14
+ --border-subtle: #1e293b;
15
+ --border-strong: #334155;
16
+ --border-interactive: var(--brand-500);
17
+
18
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
19
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5);
20
+ --shadow-outline: 0 0 12px rgba(0, 0, 0, 0.5);
21
+
22
+ --select-arrow: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
23
+ --checkbox-icon: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2.5-2.5a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
24
+ --radio-icon: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
25
+ }
@@ -0,0 +1,2 @@
1
+ @forward 'light';
2
+ @forward 'dark';
@@ -0,0 +1,49 @@
1
+ :root {
2
+ --brand-50: #eff6ff;
3
+ --brand-100: #dbeafe;
4
+ --brand-200: #bfdbfe;
5
+ --brand-300: #93c5fd;
6
+ --brand-400: #60a5fa;
7
+ --brand-500: #3b82f6;
8
+ --brand-600: #2563eb;
9
+ --brand-700: #1d4ed8;
10
+ --brand-800: #1e40af;
11
+ --brand-900: #1e3a8a;
12
+
13
+ --slate-50: #f8fafc;
14
+ --slate-100: #f1f5f9;
15
+ --slate-200: #e2e8f0;
16
+ --slate-300: #cbd5e1;
17
+ --slate-400: #94a3b8;
18
+ --slate-500: #64748b;
19
+ --slate-600: #475569;
20
+ --slate-700: #334155;
21
+ --slate-800: #1e293b;
22
+ --slate-900: #0f172a;
23
+
24
+ --success: #10b981;
25
+ --warning: #f59e0b;
26
+ --error: #ef4444;
27
+ --info: #0ea5e9;
28
+
29
+ --bg-color: var(--slate-50);
30
+ --bg-surface: #ffffff;
31
+ --bg-subtle: var(--slate-100);
32
+
33
+ --text-primary: var(--slate-900);
34
+ --text-secondary: var(--slate-500);
35
+ --text-disabled: var(--slate-400);
36
+ --text-on-brand: #ffffff;
37
+
38
+ --border-subtle: var(--slate-200);
39
+ --border-strong: var(--slate-300);
40
+ --border-interactive: var(--brand-500);
41
+
42
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
43
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
44
+ --shadow-outline: 0 0 12px rgba(0, 0, 0, 0.1);
45
+
46
+ --select-arrow: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
47
+ --checkbox-icon: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2.5-2.5a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
48
+ --radio-icon: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
49
+ }
@@ -0,0 +1,6 @@
1
+ @use 'base/index' as *;
2
+ @use 'settings/index' as *;
3
+ @use 'themes/index' as *;
4
+ @use 'layout/index' as *;
5
+ @use 'components/index' as *;
6
+ @use 'utils/index' as *;
@@ -0,0 +1,18 @@
1
+ $space-scale: (
2
+ 0: 0,
3
+ 1: 4px,
4
+ 2: 8px,
5
+ 3: 12px,
6
+ 4: 16px,
7
+ 5: 24px,
8
+ 6: 32px,
9
+ 7: 48px
10
+ );
11
+
12
+ @function space($key) {
13
+ @return map-get($space-scale, $key);
14
+ }
15
+
16
+ @function suf($k) {
17
+ @return if(type-of($k) == 'number', $k, $k);
18
+ }
@@ -0,0 +1,3 @@
1
+ @forward 'helpers';
2
+ @forward 'mixins';
3
+ @forward 'utilities';
@@ -0,0 +1,16 @@
1
+ @use '../settings/index' as *;
2
+
3
+ @function breakpoint($key) {
4
+ @return map-get($breakpoints, $key);
5
+ }
6
+
7
+ @mixin respond-to($key) {
8
+ $bp: breakpoint($key);
9
+ @if $bp != null and $bp != 0 {
10
+ @media (min-width: $bp) {
11
+ @content;
12
+ }
13
+ } @else {
14
+ @content;
15
+ }
16
+ }
@@ -0,0 +1,305 @@
1
+ @use 'sass:math';
2
+ @use 'helpers';
3
+
4
+ // SPACING utilities: m- p- (margin/padding) with directions
5
+ $space-map: (0: 0rem, 1: 0.5rem, 2: 1rem, 3: 1.5rem, 4: 2rem);
6
+ $directions: ("" : "", t: "-top", r: "-right", b: "-bottom", l: "-left", x: ("-left", "-right"), y: ("-top", "-bottom"));
7
+ $scales: 0 1 2 3 4;
8
+
9
+ @function helpers-space($key) {
10
+ @if map-has-key($space-map, $key) {
11
+ @return map-get($space-map, $key);
12
+ } @else {
13
+ @warn "Unknown spacing key `#{$key}`. Returning 0rem.";
14
+ @return 0rem;
15
+ }
16
+ }
17
+
18
+ @each $d, $prop in $directions {
19
+ @each $s in $scales {
20
+ // Margin class
21
+ $m-class: if($d == "", ".m-#{$s}", ".m-#{$d}-#{$s}");
22
+ #{$m-class} {
23
+ @if $d == "" {
24
+ margin: helpers-space($s);
25
+ } @else if type-of($prop) == 'list' {
26
+ @each $p in $prop {
27
+ margin#{$p}: helpers-space($s);
28
+ }
29
+ } @else {
30
+ margin#{$prop}: helpers-space($s);
31
+ }
32
+ }
33
+
34
+ // Padding class
35
+ $p-class: if($d == "", ".p-#{$s}", ".p-#{$d}-#{$s}");
36
+ #{$p-class} {
37
+ @if $d == "" {
38
+ padding: helpers-space($s);
39
+ } @else if type-of($prop) == 'list' {
40
+ @each $p in $prop {
41
+ padding#{$p}: helpers-space($s);
42
+ }
43
+ } @else {
44
+ padding#{$prop}: helpers-space($s);
45
+ }
46
+ }
47
+ }
48
+ }
49
+
50
+ /* DISPLAY utilities */
51
+ $display-map: (d-none: none, d-block: block, d-inline: inline, d-inline-block: inline-block, d-flex: flex, d-inline-flex: inline-flex, d-grid: grid);
52
+ @each $class, $val in $display-map {
53
+ .#{$class} {
54
+ display: $val;
55
+ }
56
+ }
57
+
58
+ /* TEXT ALIGN */
59
+ .text-left {
60
+ text-align: left;
61
+ }
62
+
63
+ .text-center {
64
+ text-align: center;
65
+ }
66
+
67
+ .text-right {
68
+ text-align: right;
69
+ }
70
+
71
+ .text-justify {
72
+ text-align: justify;
73
+ }
74
+
75
+ /* VISIBILITY */
76
+ .visible {
77
+ visibility: visible;
78
+ opacity: 1;
79
+ }
80
+
81
+ .invisible {
82
+ visibility: hidden;
83
+ opacity: 0;
84
+ pointer-events: none;
85
+ }
86
+
87
+ /* FLEX helpers */
88
+ .flex {
89
+ display: flex;
90
+ }
91
+
92
+ .flex-row {
93
+ flex-direction: row;
94
+ }
95
+
96
+ .flex-column {
97
+ flex-direction: column;
98
+ }
99
+
100
+ .flex-center {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ }
105
+
106
+ .flex-between {
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: space-between;
110
+ }
111
+
112
+ /* GRID helpers */
113
+ .grid {
114
+ display: grid;
115
+ }
116
+
117
+ .grid-center {
118
+ display: grid;
119
+ place-items: center;
120
+ }
121
+
122
+ /* WIDTH / HEIGHT utilities (percent / auto) */
123
+ .w-100 {
124
+ width: 100%;
125
+ }
126
+
127
+ .w-auto {
128
+ width: auto;
129
+ }
130
+
131
+ .h-100 {
132
+ height: 100%;
133
+ }
134
+
135
+ .h-auto {
136
+ height: auto;
137
+ }
138
+
139
+ /* TEXT TRUNCATE */
140
+ .text-truncate {
141
+ overflow: hidden;
142
+ text-overflow: ellipsis;
143
+ white-space: nowrap;
144
+ }
145
+
146
+ /* TITLES */
147
+ .title-h1 {
148
+ font-size: 2rem;
149
+ font-weight: 700;
150
+ }
151
+
152
+ .title-h2 {
153
+ font-size: 1.6rem;
154
+ font-weight: 700;
155
+ }
156
+
157
+ .title-h3 {
158
+ font-size: 1.375rem;
159
+ font-weight: 700;
160
+ }
161
+
162
+ .title-h4 {
163
+ font-size: 1.125rem;
164
+ font-weight: 700;
165
+ }
166
+
167
+ .title-h5 {
168
+ font-size: 1rem;
169
+ font-weight: 700;
170
+ }
171
+
172
+ .title-h6 {
173
+ font-size: .875rem;
174
+ font-weight: 700;
175
+ }
176
+
177
+ /* TEXT COLORS */
178
+ .brand-50 {
179
+ color: var(--brand-50);
180
+ }
181
+
182
+ .brand-100 {
183
+ color: var(--brand-100);
184
+ }
185
+
186
+ .brand-500 {
187
+ color: var(--brand-500);
188
+ }
189
+
190
+ .brand-600 {
191
+ color: var(--brand-600);
192
+ }
193
+
194
+ .brand-700 {
195
+ color: var(--brand-700);
196
+ }
197
+
198
+ .slate-50 {
199
+ color: var(--slate-50);
200
+ }
201
+
202
+ .slate-100 {
203
+ color: var(--slate-100);
204
+ }
205
+
206
+ .slate-200 {
207
+ color: var(--slate-200);
208
+ }
209
+
210
+ .slate-300 {
211
+ color: var(--slate-300);
212
+ }
213
+
214
+ .slate-400 {
215
+ color: var(--slate-400);
216
+ }
217
+
218
+ .slate-500 {
219
+ color: var(--slate-500);
220
+ }
221
+
222
+ .slate-900 {
223
+ color: var(--slate-900);
224
+ }
225
+
226
+ .color-success {
227
+ color: var(--success);
228
+ }
229
+
230
+ .color-warning {
231
+ color: var(--warning);
232
+ }
233
+
234
+ .color-error {
235
+ color: var(--error);
236
+ }
237
+
238
+ .color-info {
239
+ color: var(--info);
240
+ }
241
+
242
+ /* BACKGROUND COLORS */
243
+ .bg-brand-50 {
244
+ background-color: var(--brand-50);
245
+ }
246
+
247
+ .bg-brand-100 {
248
+ background-color: var(--brand-100);
249
+ }
250
+
251
+ .bg-brand-500 {
252
+ background-color: var(--brand-500);
253
+ }
254
+
255
+ .bg-brand-600 {
256
+ background-color: var(--brand-600);
257
+ }
258
+
259
+ .bg-brand-700 {
260
+ background-color: var(--brand-700);
261
+ }
262
+
263
+ .bg-slate-50 {
264
+ background-color: var(--slate-50);
265
+ }
266
+
267
+ .bg-slate-100 {
268
+ background-color: var(--slate-100);
269
+ }
270
+
271
+ .bg-slate-200 {
272
+ background-color: var(--slate-200);
273
+ }
274
+
275
+ .bg-slate-300 {
276
+ background-color: var(--slate-300);
277
+ }
278
+
279
+ .bg-slate-400 {
280
+ background-color: var(--slate-400);
281
+ }
282
+
283
+ .bg-slate-500 {
284
+ background-color: var(--slate-500);
285
+ }
286
+
287
+ .bg-slate-900 {
288
+ background-color: var(--slate-900);
289
+ }
290
+
291
+ .bg-success {
292
+ background-color: var(--success);
293
+ }
294
+
295
+ .bg-warning {
296
+ background-color: var(--warning);
297
+ }
298
+
299
+ .bg-error {
300
+ background-color: var(--error);
301
+ }
302
+
303
+ .bg-info {
304
+ background-color: var(--info);
305
+ }