@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,47 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .aside {
4
+ grid-area: aside;
5
+ display: flex;
6
+ justify-content: flex-start;
7
+ padding: 0 $gutter;
8
+ @media screen and (min-width: map-get($breakpoints, lg)) {
9
+ padding: 0;
10
+ }
11
+ }
12
+
13
+ .navigation {
14
+ background: var(--bg-surface);
15
+ box-shadow: var(--shadow-outline);
16
+ border-radius: $border-radius;
17
+ padding: $gutter;
18
+ width: 100%;
19
+ @media screen and (min-width: map-get($breakpoints, lg)) {
20
+ padding: calc($gutter * 2);
21
+ }
22
+ }
23
+
24
+ .list {
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: flex-start;
28
+ justify-content: flex-start;
29
+ width: 100%;
30
+
31
+ &__item {
32
+ width: 100%;
33
+
34
+ &:hover {
35
+ .list__link {
36
+ color: var(--brand-600);
37
+ }
38
+ }
39
+ }
40
+
41
+ &__link {
42
+ color: var(--text-primary);
43
+ display: block;
44
+ width: 100%;
45
+ padding: .375rem .625rem;
46
+ }
47
+ }
@@ -0,0 +1,158 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .btn {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: .25rem;
8
+ padding: .5rem .75rem;
9
+ border-radius: $border-radius;
10
+ border: 1px solid transparent;
11
+ font-family: $font-family;
12
+ font-weight: 500;
13
+ cursor: pointer;
14
+ text-decoration: none;
15
+ line-height: 1;
16
+ transition: background .15s ease, border-color .15s ease, color .15s ease;
17
+
18
+ &:focus {
19
+ outline: none;
20
+ box-shadow: none;
21
+ }
22
+
23
+ &--primary {
24
+ background: var(--brand-500);
25
+ color: var(--text-on-brand);
26
+ border-color: var(--brand-500);
27
+
28
+ &:not([disabled]):not(.is-disabled):hover {
29
+ background: var(--brand-700);
30
+ border-color: var(--brand-700);
31
+ }
32
+ }
33
+
34
+ &--secondary {
35
+ background: var(--slate-500);
36
+ border-color: var(--slate-500);
37
+ color: var(--text-on-brand);
38
+
39
+ &:not([disabled]):not(.is-disabled):hover {
40
+ background: var(--slate-700);
41
+ border-color: var(--slate-700);
42
+ }
43
+ }
44
+
45
+ &--outline {
46
+ background: transparent;
47
+ color: var(--brand-500);
48
+ border-color: var(--brand-500);
49
+
50
+ &:not([disabled]):not(.is-disabled):hover {
51
+ border-color: var(--brand-600);
52
+ color: var(--brand-600);
53
+ }
54
+ }
55
+
56
+ &--text {
57
+ color: var(--text-primary);
58
+
59
+ &:not([disabled]):not(.is-disabled):hover {
60
+ color: var(--text-secondary);
61
+ }
62
+
63
+ &-primary {
64
+ color: var(--brand-500);
65
+
66
+ &:not([disabled]):not(.is-disabled):hover {
67
+ color: var(--brand-600);
68
+ }
69
+ }
70
+
71
+ &-secondary {
72
+ color: var(--text-secondary);
73
+
74
+ &:not([disabled]):not(.is-disabled):hover {
75
+ color: var(--text-primary);
76
+ }
77
+ }
78
+ }
79
+
80
+ &--icon {
81
+ background: transparent;
82
+ color: var(--text-primary);
83
+ padding: 0;
84
+
85
+ &-primary {
86
+ padding: 0;
87
+ background: var(--brand-500);
88
+ color: var(--text-on-brand);
89
+ border-color: var(--brand-500);
90
+
91
+ &:not([disabled]):not(.is-disabled):hover {
92
+ background: var(--brand-700);
93
+ border-color: var(--brand-700);
94
+ }
95
+
96
+ }
97
+
98
+ &-secondary {
99
+ padding: 0;
100
+ background: var(--slate-500);
101
+ border-color: var(--slate-500);
102
+ color: var(--text-on-brand);
103
+
104
+ &:not([disabled]):not(.is-disabled):hover {
105
+ background: var(--slate-700);
106
+ border-color: var(--slate-700);
107
+ }
108
+ }
109
+
110
+ &-outline {
111
+ padding: 0;
112
+ background: transparent;
113
+ color: var(--brand-500);
114
+ border-color: var(--brand-500);
115
+
116
+ &:not([disabled]):not(.is-disabled):hover {
117
+ border-color: var(--brand-600);
118
+ color: var(--brand-600);
119
+ }
120
+
121
+ }
122
+
123
+ &-small {
124
+ width: 1.75rem;
125
+ height: 1.75rem;
126
+ }
127
+
128
+ &-medium {
129
+ width: 2.25rem;
130
+ height: 2.25rem;
131
+ }
132
+
133
+ &-large {
134
+ width: 2.625rem;
135
+ height: 2.625rem;
136
+ }
137
+ }
138
+
139
+ &--small {
140
+ padding: .375rem .625rem;
141
+ font-size: .875rem;
142
+ }
143
+
144
+ &--medium {
145
+ padding: .5rem .75rem;
146
+ font-size: 1rem;
147
+ }
148
+
149
+ &--large {
150
+ padding: .625rem 1rem;
151
+ font-size: 1.125rem;
152
+ }
153
+
154
+ &:disabled {
155
+ opacity: .6;
156
+ cursor: not-allowed;
157
+ }
158
+ }
@@ -0,0 +1,25 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .footer {
4
+ grid-area: footer;
5
+ background-color: var(--bg-surface);
6
+ box-shadow: var(--shadow-outline);
7
+ color: var(--text-secondary);
8
+
9
+ &__container {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ width: 100%;
14
+ max-width: $container-max;
15
+ margin: 0 auto;
16
+ padding: calc($gutter * 2) $gutter;
17
+ gap: 10px;
18
+ }
19
+
20
+ &__text {
21
+ &--bold {
22
+ font-weight: 700;
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,27 @@
1
+ @use '../settings/variables' as *;
2
+
3
+ .form-control {
4
+ display: block;
5
+ width: 100%;
6
+ padding: .5rem .75rem;
7
+ font-size: 1rem;
8
+ line-height: 1.5;
9
+ color: var(--text-primary);
10
+ background-color: var(--bg-subtle);
11
+ background-clip: padding-box;
12
+ border: 1px solid var(--border-subtle);
13
+ border-radius: $border-radius;
14
+ transition: border-color .15s ease, box-shadow .15s ease;
15
+ box-sizing: border-box;
16
+
17
+ &:focus {
18
+ color: var(--text-primary);
19
+ border-color: var(--border-interactive);
20
+ box-shadow: var(--shadow-outline);
21
+ outline: none;
22
+ }
23
+
24
+ &::placeholder {
25
+ color: var(--text-secondary);
26
+ }
27
+ }
@@ -0,0 +1,7 @@
1
+ @use 'form-control' as *;
2
+
3
+ .form-textarea {
4
+ @extend .form-control;
5
+ min-height: 100px;
6
+ resize: vertical;
7
+ }
@@ -0,0 +1,75 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .form-group {
4
+ margin-bottom: .75rem;
5
+ @media screen and (min-width: map-get($breakpoints, lg)) {
6
+ margin-bottom: 1rem;
7
+ }
8
+
9
+ &--gap-sm {
10
+ gap: .5rem;
11
+ }
12
+
13
+ &--space-md {
14
+ gap: 1rem;
15
+ }
16
+ }
17
+
18
+ .input-group {
19
+ display: flex;
20
+ justify-content: flex-start;
21
+ flex-wrap: wrap;
22
+ gap: $gutter;
23
+
24
+ &--vertical {
25
+ flex-direction: column;
26
+ }
27
+ }
28
+
29
+ .form-label {
30
+ color: var(--text-primary);
31
+ display: inline-block;
32
+ margin-bottom: .35rem;
33
+ font-size: .95rem;
34
+ cursor: pointer;
35
+ line-height: 1.4;
36
+
37
+ &.disabled {
38
+ color: var(--text-disabled);
39
+ cursor: not-allowed;
40
+ }
41
+
42
+ &.required::after {
43
+ content: " *";
44
+ color: var(--error);
45
+ font-weight: 600;
46
+ }
47
+ }
48
+
49
+ .input-text {
50
+ color: var(--text-primary);
51
+ display: inline-block;
52
+ font-size: .95rem;
53
+ cursor: pointer;
54
+ }
55
+
56
+ .check-control-label {
57
+ color: var(--text-primary);
58
+ display: inline-flex;
59
+ align-items: center;
60
+ gap: 0.5rem;
61
+ cursor: pointer;
62
+ font-size: 1rem;
63
+ user-select: none;
64
+
65
+ &:has(input:disabled) {
66
+ color: var(--text-disabled);
67
+ cursor: not-allowed;
68
+ }
69
+ }
70
+
71
+ .form-help {
72
+ color: var(--text-disabled);
73
+ font-size: .875rem;
74
+ margin-top: .25rem;
75
+ }
@@ -0,0 +1,57 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .header {
4
+ background-color: var(--bg-surface);
5
+ color: var(--text-secondary);
6
+ box-shadow: var(--shadow-md);
7
+ grid-area: header;
8
+ width: 100%;
9
+ position: sticky;
10
+ top: 0;
11
+ left: 0;
12
+ z-index: 1000;
13
+
14
+ &__row {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ width: 100%;
19
+ max-width: $container-max;
20
+ padding: $gutter;
21
+ margin: 0 auto;
22
+ }
23
+
24
+ &__col {
25
+ display: flex;
26
+ align-items: center;
27
+
28
+ .single-select {
29
+ width: 65px;
30
+ }
31
+
32
+ &--space {
33
+ gap: $gutter;
34
+ }
35
+ }
36
+ }
37
+
38
+ .logo {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: flex-start;
42
+ gap: 10px;
43
+
44
+ &__icon {
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ width: 42px;
49
+ height: 42px;
50
+ }
51
+
52
+ &__title {
53
+ font-size: $base-font-size;
54
+ font-weight: 700;
55
+ text-transform: uppercase;
56
+ }
57
+ }
@@ -0,0 +1,42 @@
1
+ .button-icon {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ fill: currentColor;
6
+ stroke: none;
7
+ }
8
+
9
+ .icon {
10
+ &--small {
11
+ width: 1rem;
12
+ height: 1rem;
13
+ }
14
+
15
+ &--medium {
16
+ width: 1.125rem;
17
+ height: 1.125rem;
18
+ }
19
+
20
+ &--large {
21
+ width: 1.25rem;
22
+ height: 1.25rem;
23
+ }
24
+
25
+ // button with icon only
26
+ &--icon {
27
+ &-small {
28
+ width: 1.3125rem;
29
+ height: 1.3125rem;
30
+ }
31
+
32
+ &-medium {
33
+ width: 1.75rem;
34
+ height: 1.75rem;
35
+ }
36
+
37
+ &-large {
38
+ width: 2rem;
39
+ height: 2rem;
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,14 @@
1
+ @forward 'aside';
2
+ @forward 'buttons';
3
+ @forward 'footer';
4
+ @forward 'forms';
5
+ @forward 'form-control';
6
+ @forward 'form-textarea';
7
+ @forward 'input-base';
8
+ @forward 'input-checkbox';
9
+ @forward 'input-radio';
10
+ @forward 'single-select';
11
+ @forward 'header';
12
+ @forward 'icons';
13
+ @forward 'main';
14
+ @forward 'table';
@@ -0,0 +1,48 @@
1
+ .input-base {
2
+ appearance: none;
3
+ display: inline-block;
4
+ vertical-align: middle;
5
+ width: 1.25rem;
6
+ height: 1.25rem;
7
+ background-color: var(--bg-surface);
8
+ border: 1px solid var(--border-strong);
9
+ background-position: center;
10
+ background-repeat: no-repeat;
11
+ background-size: 100% 100%;
12
+ cursor: pointer;
13
+ margin: 0;
14
+ transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
15
+
16
+ &:hover:not(:disabled) {
17
+ border-color: var(--brand-600);
18
+ }
19
+
20
+ &:focus-visible {
21
+ border-color: var(--brand-500);
22
+ box-shadow: var(--shadow-outline);
23
+ }
24
+
25
+ &:checked {
26
+ background-color: var(--brand-500);
27
+ border-color: var(--brand-500);
28
+ }
29
+
30
+ &:disabled {
31
+ cursor: not-allowed;
32
+ background-color: var(--slate-100);
33
+ border-color: var(--slate-200);
34
+
35
+ &:checked {
36
+ background-color: var(--slate-400);
37
+ border-color: var(--slate-400);
38
+ }
39
+ }
40
+
41
+ &.is-invalid {
42
+ border-color: var(--error);
43
+
44
+ &:focus-visible {
45
+ box-shadow: 0 0 0 2px var(--bg-surface), 0 0 0 4px var(--error);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,10 @@
1
+ @use 'input-base' as *;
2
+
3
+ input[type="checkbox"] {
4
+ @extend .input-base;
5
+ border-radius: 0.25rem;
6
+
7
+ &:checked {
8
+ background-image: var(--checkbox-icon);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ @use 'input-base' as *;
2
+
3
+ input[type="radio"] {
4
+ @extend .input-base;
5
+ border-radius: 50%;
6
+
7
+ &:checked {
8
+ background-image: var(--radio-icon);
9
+ }
10
+ }
@@ -0,0 +1,24 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .main {
4
+ grid-area: main;
5
+ display: flex;
6
+ justify-content: flex-start;
7
+ padding: 0 $gutter;
8
+ overflow: hidden;
9
+ @media screen and (min-width: map-get($breakpoints, lg)) {
10
+ padding: 0;
11
+ }
12
+
13
+ &__container {
14
+ background: var(--bg-surface);
15
+ box-shadow: var(--shadow-outline);
16
+ border-radius: $border-radius;
17
+ width: 100%;
18
+ min-height: 100%;
19
+ padding: $gutter;
20
+ @media screen and (min-width: map-get($breakpoints, lg)) {
21
+ padding: calc($gutter * 2);
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,29 @@
1
+ @use 'form-control' as *;
2
+
3
+ .single-select {
4
+ @extend .form-control;
5
+ appearance: none;
6
+ -webkit-appearance: none;
7
+ -moz-appearance: none;
8
+ background-image: var(--select-arrow);
9
+ background-repeat: no-repeat;
10
+ background-position: right .5rem center;
11
+ background-size: 1rem;
12
+ cursor: pointer;
13
+ padding: .5rem 1.5rem .5rem .75rem;
14
+
15
+ &:invalid {
16
+ color: var(--text-secondary);
17
+ }
18
+
19
+ option {
20
+ color: var(--text-primary);
21
+ background-color: var(--bg-subtle);
22
+ padding: 0.5rem;
23
+
24
+ &:disabled {
25
+ color: var(--text-primary);
26
+ opacity: .6;
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,45 @@
1
+ @use '../settings/index' as *;
2
+
3
+ .table-wrapper {
4
+ display: block;
5
+ width: 100%;
6
+ overflow-x: auto;
7
+ -webkit-overflow-scrolling: touch;
8
+ }
9
+
10
+ .table {
11
+ width: 100%;
12
+ border-collapse: collapse;
13
+ font-family: $font-family;
14
+ font-size: .95rem;
15
+ color: var(--text-primary);
16
+ background: var(--bg-surface);
17
+
18
+ th, td {
19
+ padding: .75rem;
20
+ border-bottom: 1px solid var(--border-subtle);
21
+ vertical-align: middle;
22
+ text-align: left;
23
+ white-space: nowrap;
24
+ }
25
+
26
+ thead {
27
+ background: var(--bg-subtle);
28
+
29
+ th {
30
+ font-weight: 700;
31
+ }
32
+ }
33
+
34
+ tbody tr:hover {
35
+ background: var(--bg-subtle);
36
+ }
37
+
38
+ .table-sm th, .table-sm td {
39
+ padding: .4rem .6rem;
40
+ }
41
+
42
+ .table-striped tbody tr:nth-child(odd) {
43
+ background: rgba(0, 0, 0, .02);
44
+ }
45
+ }
@@ -0,0 +1,64 @@
1
+ @use '../settings/index' as *;
2
+ @use 'sass:math';
3
+ @use 'sass:string';
4
+ @use 'sass:meta';
5
+ @use 'sass:list';
6
+
7
+ .container {
8
+ width: 100%;
9
+ margin-left: auto;
10
+ margin-right: auto;
11
+ max-width: $container-max;
12
+ padding-left: $gutter;
13
+ padding-right: $gutter;
14
+ box-sizing: border-box;
15
+ }
16
+
17
+ .row {
18
+ display: grid;
19
+ grid-template-columns: repeat(#{$columns}, 1fr);
20
+ gap: $gutter;
21
+ width: 100%;
22
+ align-items: stretch;
23
+ }
24
+
25
+ /* column spans */
26
+ @for $i from 1 through $columns {
27
+ .col-#{$i} {
28
+ grid-column: span $i;
29
+ }
30
+ }
31
+
32
+ /* responsive helpers: .col-sm-6 .col-md-4 etc */
33
+ @each $name, $bp in $breakpoints {
34
+ @if $bp != 0 {
35
+ @media (min-width: $bp) {
36
+ @for $i from 1 through $columns {
37
+ .col-#{$name}-#{$i} {
38
+ grid-column: span $i;
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ /* utility: full width column */
46
+ .col-full {
47
+ grid-column: 1 / -1;
48
+ }
49
+
50
+ /* offset helper: .offset-md-2 */
51
+ @for $i from 1 through $columns {
52
+ .offset-#{$i} {
53
+ margin-left: calc((100% / #{$columns}) * #{$i} + (#{$gutter} * #{$i}));
54
+ }
55
+ @each $name, $bp in $breakpoints {
56
+ @if $bp != 0 {
57
+ @media (min-width: $bp) {
58
+ .offset-#{$name}-#{$i} {
59
+ margin-left: calc((100% / #{$columns}) * #{$i} + (#{$gutter} * #{$i}));
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,2 @@
1
+ @forward 'grid';
2
+ @forward 'layout';