@mgremy/ng-primitives 0.4.0 → 0.6.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.
@@ -1,37 +1,219 @@
1
1
  @utility mgnp-button {
2
2
  display: inline-block;
3
- padding-block: --spacing(2);
4
- padding-inline: --spacing(4);
5
- border-radius: var(--radius-lg);
6
- color: var(--ngp-text-primary);
7
3
  border: none;
8
- font-weight: var(--font-weight-medium);
9
4
  height: fit-content;
10
5
  width: max-content;
6
+ cursor: pointer;
7
+ font-weight: var(--font-weight-medium);
8
+ border-radius: var(--radius-lg);
9
+ padding-block: --spacing(2);
10
+ padding-inline: --spacing(4);
11
+ color: var(--ngp-text-primary);
11
12
  background-color: var(--ngp-background);
12
- transition: background-color 200ms ease-in-out;
13
13
  box-shadow: var(--ngp-button-shadow);
14
- cursor: pointer;
15
-
16
- @variant data-hover {
17
- background-color: var(--ngp-background-hover);
18
- }
19
14
 
20
15
  @variant data-focus-visible {
21
16
  outline: 2px solid var(--ngp-focus-ring);
22
17
  }
23
18
 
24
- @variant data-press {
25
- background-color: var(--ngp-background-active);
26
- }
27
-
28
19
  @variant data-disabled {
29
20
  opacity: 50%;
21
+ cursor: default;
22
+ }
23
+
24
+ /* Solid */
25
+ @variant data-[mgnp-variant=solid] {
26
+ /* Colors */
27
+ @variant data-[mgnp-color=ui] {
28
+ --ngp-background: var(--mg-background-ui);
29
+
30
+ @variant data-hover {
31
+ --ngp-background: var(--ngp-background-hover);
32
+ }
33
+
34
+ @variant data-press {
35
+ --ngp-background: var(--ngp-background-active);
36
+ }
37
+ }
38
+
39
+ @variant data-[mgnp-color=primary] {
40
+ --ngp-background: var(--mg-background-primary);
41
+
42
+ @variant data-hover {
43
+ --ngp-background: var(--mg-background-primary-hover);
44
+ }
45
+
46
+ @variant data-press {
47
+ --ngp-background: var(--mg-background-primary-active);
48
+ }
49
+ }
50
+
51
+ @variant data-[mgnp-color=secondary] {
52
+ --ngp-background: var(--mg-background-secondary);
53
+
54
+ @variant data-hover {
55
+ --ngp-background: var(--mg-background-secondary-hover);
56
+ }
57
+
58
+ @variant data-press {
59
+ --ngp-background: var(--mg-background-secondary-active);
60
+ }
61
+ }
62
+
63
+ @variant data-[mgnp-color=info] {
64
+ --ngp-background: var(--mg-background-info);
65
+
66
+ @variant data-hover {
67
+ --ngp-background: var(--mg-background-info-hover);
68
+ }
69
+
70
+ @variant data-press {
71
+ --ngp-background: var(--mg-background-info-active);
72
+ }
73
+ }
74
+
75
+ @variant data-[mgnp-color=success] {
76
+ --ngp-background: var(--mg-background-success);
77
+
78
+ @variant data-hover {
79
+ --ngp-background: var(--mg-background-success-hover);
80
+ }
81
+
82
+ @variant data-press {
83
+ --ngp-background: var(--mg-background-success-active);
84
+ }
85
+ }
86
+
87
+ @variant data-[mgnp-color=warning] {
88
+ --ngp-background: var(--mg-background-warning);
89
+
90
+ @variant data-hover {
91
+ --ngp-background: var(--mg-background-warning-hover);
92
+ }
93
+
94
+ @variant data-press {
95
+ --ngp-background: var(--mg-background-warning-active);
96
+ }
97
+ }
98
+
99
+ @variant data-[mgnp-color=danger] {
100
+ --ngp-background: var(--mg-background-danger);
101
+
102
+ @variant data-hover {
103
+ --ngp-background: var(--mg-background-danger-hover);
104
+ }
105
+
106
+ @variant data-press {
107
+ --ngp-background: var(--mg-background-danger-active);
108
+ }
109
+ }
110
+ }
111
+
112
+ /* Outline */
113
+ @variant data-[mgnp-variant=outline] {
114
+ --ngp-background: transparent;
115
+ --ngp-text-primary: var(--mg-text-ui);
116
+
117
+ /* Colors */
118
+ @variant data-[mgnp-color=ui] {
119
+ @variant data-hover {
120
+ --ngp-background: var(--mg-background-ui-inverse);
121
+ --ngp-text-primary: var(--mg-text-inverse);
122
+ }
123
+
124
+ @variant data-press {
125
+ --ngp-background: var(--mg-background-ui-inverse-active);
126
+ }
127
+ }
128
+
129
+ @variant data-[mgnp-color=primary] {
130
+ @variant not-data-hover {
131
+ --ngp-text-primary: var(--mg-text-primary);
132
+ }
133
+
134
+ @variant data-hover {
135
+ --ngp-background: var(--mg-background-primary);
136
+ }
137
+
138
+ @variant data-press {
139
+ --ngp-background: var(--mg-background-primary-inverse-active);
140
+ }
141
+ }
142
+
143
+ @variant data-[mgnp-color=secondary] {
144
+ @variant not-data-hover {
145
+ --ngp-text-primary: var(--mg-text-secondary);
146
+ }
147
+
148
+ @variant data-hover {
149
+ --ngp-background: var(--mg-background-secondary);
150
+ }
151
+
152
+ @variant data-press {
153
+ --ngp-background: var(--mg-background-secondary-inverse-active);
154
+ }
155
+ }
156
+
157
+ @variant data-[mgnp-color=info] {
158
+ @variant not-data-hover {
159
+ --ngp-text-primary: var(--mg-text-info);
160
+ }
161
+
162
+ @variant data-hover {
163
+ --ngp-background: var(--mg-background-info);
164
+ }
165
+
166
+ @variant data-press {
167
+ --ngp-background: var(--mg-background-info-inverse-active);
168
+ }
169
+ }
170
+
171
+ @variant data-[mgnp-color=success] {
172
+ @variant not-data-hover {
173
+ --ngp-text-primary: var(--mg-text-success);
174
+ }
175
+
176
+ @variant data-hover {
177
+ --ngp-background: var(--mg-background-success);
178
+ }
179
+
180
+ @variant data-press {
181
+ --ngp-background: var(--mg-background-success-inverse-active);
182
+ }
183
+ }
184
+
185
+ @variant data-[mgnp-color=warning] {
186
+ @variant not-data-hover {
187
+ --ngp-text-primary: var(--mg-text-warning);
188
+ }
189
+
190
+ @variant data-hover {
191
+ --ngp-background: var(--mg-background-warning);
192
+ }
193
+
194
+ @variant data-press {
195
+ --ngp-background: var(--mg-background-warning-inverse-active);
196
+ }
197
+ }
198
+
199
+ @variant data-[mgnp-color=danger] {
200
+ @variant not-data-hover {
201
+ --ngp-text-primary: var(--mg-text-danger);
202
+ }
203
+
204
+ @variant data-hover {
205
+ --ngp-background: var(--mg-background-danger);
206
+ }
207
+
208
+ @variant data-press {
209
+ --ngp-background: var(--mg-background-danger-inverse-active);
210
+ }
211
+ }
30
212
  }
31
213
  }
32
214
 
33
215
  @layer base {
34
216
  [mgnpButton][data-mgnp-component='mgnp-button'] {
35
- @apply mgnp-button;
217
+ @apply mgnp-button transition;
36
218
  }
37
219
  }
@@ -4,31 +4,31 @@
4
4
  align-items: center;
5
5
  height: fit-content;
6
6
  width: fit-content;
7
- border-radius: var(--radius-lg);
8
7
  border: none;
8
+ box-sizing: border-box;
9
+ border-radius: var(--radius-lg);
9
10
  background-color: var(--ngp-background);
10
11
  box-shadow: var(--ngp-input-shadow);
11
- box-sizing: border-box;
12
12
 
13
13
  @variant data-focus {
14
- outline: 2px solid var(--ngp-focus-ring);
15
14
  outline-offset: 2px;
15
+ outline: 2px solid var(--ngp-focus-ring);
16
16
  }
17
17
  }
18
18
 
19
19
  @utility mgnp-combobox-input {
20
20
  flex: 1;
21
- padding-block: --spacing(0);
22
- padding-inline: --spacing(4);
23
21
  border: none;
24
22
  background-color: transparent;
25
- color: var(--ngp-text);
26
23
  font-family: inherit;
27
- font-size: var(--text-sm);
28
- line-height: var(--text-sm--line-height);
29
24
  outline: none;
30
25
  height: auto;
31
26
  width: auto;
27
+ padding-block: --spacing(0);
28
+ padding-inline: --spacing(4);
29
+ font-size: var(--text-sm);
30
+ line-height: var(--text-sm--line-height);
31
+ color: var(--ngp-text);
32
32
  }
33
33
 
34
34
  @utility mgnp-combobox-button {
@@ -38,52 +38,51 @@
38
38
  height: 100%;
39
39
  background-color: transparent;
40
40
  border: none;
41
- color: var(--ngp-text);
42
41
  cursor: pointer;
43
42
  box-sizing: border-box;
44
43
  box-shadow: none;
44
+ color: var(--ngp-text);
45
45
  }
46
46
 
47
47
  @utility mgnp-combobox-dropdown {
48
- background-color: var(--ngp-background);
49
- border: 1px solid var(--ngp-border);
50
48
  padding: --spacing(1);
51
- border-radius: var(--radius-xl);
52
49
  outline: none;
53
50
  position: absolute;
54
- animation: popover-show 0.1s ease-out;
55
- width: var(--ngp-combobox-width);
56
51
  min-width: fit-content;
57
- box-shadow: var(--ngp-shadow-lg);
58
52
  box-sizing: border-box;
59
- margin-top: --spacing(1);
60
- max-height: --spacing(60);
61
53
  overflow-y: auto;
62
54
  z-index: 1001;
55
+ border-radius: var(--radius-xl);
56
+ margin-top: --spacing(1);
57
+ max-height: --spacing(60);
58
+ width: var(--ngp-combobox-width);
59
+ box-shadow: var(--ngp-shadow-lg);
60
+ background-color: var(--ngp-background);
61
+ border: 1px solid var(--ngp-border);
63
62
 
64
63
  @variant data-enter {
65
- animation: combobox-show 200ms ease-out;
64
+ animation: combobox-show var(--default-transition-duration) var(--default-transition-timing-function);
66
65
  }
67
66
 
68
67
  @variant data-exit {
69
- animation: combobox-hide 200ms ease-out;
68
+ animation: combobox-hide var(--default-transition-duration) var(--default-transition-timing-function);
70
69
  }
71
70
  }
72
71
 
73
72
  @utility mgnp-combobox-option {
74
73
  display: flex;
75
74
  align-items: center;
75
+ cursor: pointer;
76
+ width: 100%;
77
+ box-sizing: border-box;
76
78
  gap: --spacing(2);
77
79
  padding-block: --spacing(1.5);
78
80
  padding-inline: --spacing(3);
79
- cursor: pointer;
80
- border-radius: var(--radius-lg);
81
- width: 100%;
82
81
  height: --spacing(9);
82
+ border-radius: var(--radius-lg);
83
83
  font-size: var(--text-sm);
84
84
  line-height: var(--text-sm--line-height);
85
85
  color: var(--ngp-text-primary);
86
- box-sizing: border-box;
87
86
 
88
87
  @variant data-hover {
89
88
  background-color: var(--ngp-background-hover);
@@ -104,23 +103,23 @@
104
103
 
105
104
  @layer base {
106
105
  [mgnpCombobox][data-mgnp-component='mgnp-combobox'] {
107
- @apply mgnp-combobox;
106
+ @apply mgnp-combobox transition;
108
107
  }
109
108
 
110
109
  [mgnpComboboxInput][data-mgnp-component='mgnp-combobox-input'] {
111
- @apply mgnp-combobox-input;
110
+ @apply mgnp-combobox-input transition;
112
111
  }
113
112
 
114
113
  [ngpComboboxButton][mgnpButton][data-mgnp-component='mgnp-button'] {
115
- @apply mgnp-combobox-button;
114
+ @apply mgnp-combobox-button transition;
116
115
  }
117
116
 
118
117
  [mgnpComboboxDropdown][data-mgnp-component='mgnp-combobox-dropdown'] {
119
- @apply mgnp-combobox-dropdown;
118
+ @apply mgnp-combobox-dropdown transition;
120
119
  }
121
120
 
122
121
  [mgnpComboboxOption][data-mgnp-component='mgnp-combobox-option'] {
123
- @apply mgnp-combobox-option;
122
+ @apply mgnp-combobox-option transition;
124
123
  }
125
124
  }
126
125
 
@@ -1,17 +1,17 @@
1
1
  @utility mgnp-input {
2
- height: --spacing(9);
3
2
  width: 100%;
4
- border-radius: var(--radius-lg);
3
+ border: none;
4
+ outline: none;
5
+ height: --spacing(9);
5
6
  padding-block: --spacing(0);
6
7
  padding-inline: --spacing(4);
7
- border: none;
8
+ border-radius: var(--radius-lg);
8
9
  box-shadow: var(--ngp-input-shadow);
9
10
  background-color: var(--ngp-background);
10
- outline: none;
11
11
 
12
12
  @variant data-focus {
13
- outline: 2px solid var(--ngp-focus-ring);
14
13
  outline-offset: 2px;
14
+ outline: 2px solid var(--ngp-focus-ring);
15
15
  }
16
16
 
17
17
  ::placeholder {
@@ -21,6 +21,6 @@
21
21
 
22
22
  @layer base {
23
23
  [mgnpInput][data-mgnp-component='mgnp-input'] {
24
- @apply mgnp-input;
24
+ @apply mgnp-input transition;
25
25
  }
26
26
  }
@@ -3,33 +3,32 @@
3
3
  display: flex;
4
4
  flex-direction: column;
5
5
  width: max-content;
6
+ padding: --spacing(1);
7
+ border-radius: var(--radius-lg);
6
8
  background: var(--ngp-background);
7
9
  border: 1px solid var(--ngp-border);
8
10
  box-shadow: var(--ngp-shadow-lg);
9
- border-radius: var(--radius-lg);
10
- padding: --spacing(1);
11
11
  transform-origin: var(--ngp-menu-transform-origin);
12
12
 
13
13
  @variant data-enter {
14
- animation: menu-show 200ms ease-out;
14
+ animation: menu-show var(--default-transition-duration) var(--default-transition-timing-function);
15
15
  }
16
16
 
17
17
  @variant data-exit {
18
- animation: menu-hide 200ms ease-out;
18
+ animation: menu-hide var(--default-transition-duration) var(--default-transition-timing-function);
19
19
  }
20
20
  }
21
21
 
22
22
  @utility mgnp-menu-item {
23
- padding-block: --spacing(1.5);
24
- padding-inline: --spacing(3.5);
25
23
  border: none;
26
24
  background: none;
27
25
  cursor: pointer;
28
- transition: background-color 200ms;
29
- border-radius: var(--radius-sm);
30
- min-width: --spacing(30);
31
26
  text-align: start;
32
27
  outline: none;
28
+ padding-block: --spacing(1.5);
29
+ padding-inline: --spacing(3.5);
30
+ min-width: --spacing(30);
31
+ border-radius: var(--radius-sm);
33
32
  font-size: var(--text-sm);
34
33
  line-height: var(--text-sm--line-height);
35
34
 
@@ -42,8 +41,8 @@
42
41
  }
43
42
 
44
43
  @variant data-focus-visible {
45
- outline: 2px solid var(--ngp-focus-ring);
46
44
  z-index: 1;
45
+ outline: 2px solid var(--ngp-focus-ring);
47
46
  }
48
47
 
49
48
  @variant data-disabled {
@@ -53,11 +52,11 @@
53
52
 
54
53
  @layer base {
55
54
  [mgnpMenu][data-mgnp-component='mgnp-menu'] {
56
- @apply mgnp-menu;
55
+ @apply mgnp-menu transition;
57
56
  }
58
57
 
59
58
  [mgnpMenuItem][data-mgnp-component='mgnp-menu-item'] {
60
- @apply mgnp-menu-item;
59
+ @apply mgnp-menu-item transition;
61
60
  }
62
61
  }
63
62
 
@@ -4,66 +4,69 @@
4
4
  align-items: center;
5
5
  gap: --spacing(2);
6
6
  }
7
+ }
7
8
 
8
- [ngpPaginationFirst],
9
- [ngpPaginationPrevious],
10
- [ngpPaginationButton],
11
- [ngpPaginationNext],
12
- [ngpPaginationLast] {
13
- all: unset;
14
- display: flex;
15
- width: --spacing(8);
16
- height: --spacing(8);
17
- cursor: pointer;
18
- align-items: center;
19
- justify-content: center;
20
- border-radius: var(--radius-lg);
21
- outline-style: none;
22
- background-color: var(--mg-background-ui);
23
- color: var(--mg-text-primary);
24
- font-size: var(--text-sm);
25
- font-weight: var(--font-weight-medium);
26
- box-shadow: var(--mg-shadow-button);
27
- transition: background-color 200ms ease-in-out;
9
+ @utility mgnp-pagination-button {
10
+ all: unset;
11
+ display: flex;
12
+ cursor: pointer;
13
+ align-items: center;
14
+ justify-content: center;
15
+ outline-style: none;
16
+ width: --spacing(8);
17
+ height: --spacing(8);
18
+ border-radius: var(--radius-lg);
19
+ font-size: var(--text-sm);
20
+ font-weight: var(--font-weight-medium);
21
+ background-color: var(--ngp-background);
22
+ color: var(--ngp-text-primary);
23
+ box-shadow: var(--ngp-button-shadow);
28
24
 
29
- @variant data-hover {
30
- @variant not-data-disabled {
31
- @variant not-data-selected {
32
- background-color: var(--mg-background-hover);
33
- }
25
+ @variant data-hover {
26
+ @variant not-data-disabled {
27
+ @variant not-data-selected {
28
+ background-color: var(--ngp-background-hover);
34
29
  }
35
30
  }
31
+ }
36
32
 
37
- @variant data-focus-visible {
38
- @variant not-data-disabled {
39
- outline: 2px solid var(--mg-ring-ui);
40
- }
33
+ @variant data-focus-visible {
34
+ @variant not-data-disabled {
35
+ outline: 2px solid var(--ngp-focus-ring);
41
36
  }
37
+ }
42
38
 
43
- @variant data-press {
44
- @variant not-data-disabled {
45
- @variant not-data-selected {
46
- background-color: var(--mg-background-active);
47
- }
39
+ @variant data-press {
40
+ @variant not-data-disabled {
41
+ @variant not-data-selected {
42
+ background-color: var(--ngp-background-active);
48
43
  }
49
44
  }
45
+ }
50
46
 
51
- @variant data-disabled {
52
- background-color: var(--mg-background-disabled);
53
- cursor: not-allowed;
54
- color: #d2d2d2;
55
- box-shadow: none;
56
- }
47
+ @variant data-disabled {
48
+ cursor: not-allowed;
49
+ color: #d2d2d2;
50
+ box-shadow: none;
51
+ background-color: var(--ngp-background-disabled);
52
+ }
57
53
 
58
- @variant data-selected {
59
- background-color: var(--mg-background-inverse);
60
- color: var(--mg-text-inverse);
61
- }
54
+ @variant data-selected {
55
+ background-color: var(--ngp-background-inverse);
56
+ color: var(--ngp-text-inverse);
62
57
  }
63
58
  }
64
59
 
65
60
  @layer base {
66
61
  [ngpPagination][data-mgnp-component='mgnp-pagination'] {
67
- @apply mgnp-pagination;
62
+ @apply mgnp-pagination transition;
63
+
64
+ [ngpPaginationFirst],
65
+ [ngpPaginationPrevious],
66
+ [ngpPaginationButton],
67
+ [ngpPaginationNext],
68
+ [ngpPaginationLast] {
69
+ @apply mgnp-pagination-button transition;
70
+ }
68
71
  }
69
72
  }
@@ -0,0 +1,124 @@
1
+ @utility mgnp-toast {
2
+ position: absolute;
3
+ touch-action: none;
4
+ box-sizing: border-box;
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: space-between;
8
+ height: fit-content;
9
+ padding: --spacing(3) --spacing(4);
10
+ border-radius: --spacing(2);
11
+ width: --spacing(87.5);
12
+ border: 1px solid var(--ngp-border);
13
+ background: var(--ngp-background);
14
+ box-shadow: var(--ngp-shadow);
15
+ z-index: var(--ngp-toast-z-index);
16
+ transform: var(--y);
17
+
18
+ @variant data-enter {
19
+ opacity: 1;
20
+ --y: translateY(0);
21
+ animation: toast-slide-in var(--default-transition-duration) var(--default-transition-timing-function);
22
+ }
23
+
24
+ @variant data-exit {
25
+ opacity: 0;
26
+ transform: translateY(100%);
27
+ transition:
28
+ opacity var(--default-transition-duration) var(--default-transition-timing-function),
29
+ transform var(--default-transition-duration) var(--default-transition-timing-function);
30
+ --y: translateY(calc(calc(var(--lift) * var(--ngp-toast-gap)) * -1));
31
+ }
32
+
33
+ @variant data-[visible=false] {
34
+ opacity: 0;
35
+ pointer-events: none;
36
+ }
37
+
38
+ @variant data-[position-x=end] {
39
+ right: 0;
40
+ }
41
+
42
+ @variant data-[position-x=start] {
43
+ left: 0;
44
+ }
45
+
46
+ @variant data-[position-y=top] {
47
+ top: 0;
48
+ --lift: 1;
49
+ --lift-amount: calc(var(--lift) * var(--ngp-toast-gap));
50
+ }
51
+
52
+ @variant data-[position-y=bottom] {
53
+ bottom: 0;
54
+ --lift: -1;
55
+ --lift-amount: calc(var(--lift) * var(--ngp-toast-gap));
56
+ }
57
+
58
+ @variant data-[expanded=true] {
59
+ --y: translateY(calc(var(--lift) * var(--ngp-toast-offset)));
60
+ height: auto;
61
+
62
+ ::after {
63
+ content: '';
64
+ position: absolute;
65
+ left: 0;
66
+ height: calc(var(--ngp-toast-gap) + 1px);
67
+ bottom: 100%;
68
+ width: 100%;
69
+ }
70
+ }
71
+
72
+ @variant data-[expanded=false] {
73
+ @variant data-[front=false] {
74
+ --scale: var(--ngp-toasts-before) * 0.05 + 1;
75
+ --y: translateY(calc(var(--lift-amount) * var(--ngp-toasts-before)))
76
+ scale(calc(-1 * var(--scale)));
77
+ height: var(--ngp-toast-front-height);
78
+ }
79
+ }
80
+
81
+ @variant data-[swiping=true] {
82
+ transform: var(--y) translateY(var(--ngp-toast-swipe-amount-y, 0))
83
+ translateX(var(--ngp-toast-swipe-amount-x, 0));
84
+
85
+ @variant data-[swipe-direction=left] {
86
+ /* Fade out from -45px to -100px swipe */
87
+ opacity: calc(1 - clamp(0, ((-1 * var(--ngp-toast-swipe-x, 0px)) - 45) / 55, 1));
88
+ }
89
+
90
+ @variant data-[swipe-direction=right] {
91
+ /* Fade out from 45px to 100px swipe */
92
+ opacity: calc(1 - clamp(0, (var(--ngp-toast-swipe-x, 0px) - 45) / 55, 1));
93
+ }
94
+
95
+ @variant data-[swipe-direction=top] {
96
+ /* Fade out from -45px to -100px swipe */
97
+ opacity: calc(1 - clamp(0, ((-1 * var(--ngp-toast-swipe-y, 0px)) - 45) / 55, 1));
98
+ }
99
+
100
+ @variant data-[swipe-direction=bottom] {
101
+ /* Fade out from 45px to 100px swipe */
102
+ opacity: calc(1 - clamp(0, (var(--ngp-toast-swipe-y, 0px) - 45) / 55, 1));
103
+ }
104
+ }
105
+ }
106
+
107
+ @layer base {
108
+ [mgnpToast][data-mgnp-component='mgnp-toast'] {
109
+ @apply mgnp-toast transition;
110
+ }
111
+ }
112
+
113
+ @theme {
114
+ @keyframes toast-slide-in {
115
+ from {
116
+ opacity: 0;
117
+ transform: translateY(100%);
118
+ }
119
+ to {
120
+ opacity: 1;
121
+ transform: translateY(0);
122
+ }
123
+ }
124
+ }