@foblex/m-render 3.0.5 → 4.0.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.
@@ -1,18 +1,18 @@
1
1
  .m-render {
2
2
 
3
3
  .f-alert {
4
- margin: 16px 0;
4
+ margin: 20px 0;
5
5
  border-radius: var(--f-alert-border-radius);
6
- padding: 16px 16px 8px;
6
+ padding: 14px 16px 10px;
7
7
  line-height: 24px;
8
8
  font-size: 14px;
9
- border: none;
9
+ border: 1px solid transparent;
10
+ box-shadow: var(--shadow-1);
10
11
 
11
12
  .f-alert-title {
12
13
  margin: 0;
13
14
  line-height: inherit;
14
15
  font-weight: 600;
15
- text-transform: uppercase;
16
16
  }
17
17
 
18
18
  p {
@@ -25,26 +25,31 @@
25
25
  &.tip {
26
26
  color: var(--f-alert-tip-color);
27
27
  background-color: var(--f-alert-tip-background);
28
+ border-color: var(--f-alert-tip-border-color);
28
29
  }
29
30
 
30
31
  &.info {
31
32
  color: var(--f-alert-info-color);
32
33
  background-color: var(--f-alert-info-background);
34
+ border-color: var(--f-alert-info-border-color);
33
35
  }
34
36
 
35
37
  &.warning {
36
38
  color: var(--f-alert-warning-color);
37
39
  background-color: var(--f-alert-warning-background);
40
+ border-color: var(--f-alert-warning-border-color);
38
41
  }
39
42
 
40
43
  &.danger {
41
44
  color: var(--f-alert-danger-color);
42
45
  background-color: var(--f-alert-danger-background);
46
+ border-color: var(--f-alert-danger-border-color);
43
47
  }
44
48
 
45
49
  &.success {
46
50
  color: var(--f-alert-success-color);
47
51
  background-color: var(--f-alert-success-background);
52
+ border-color: var(--f-alert-success-border-color);
48
53
  }
49
54
  }
50
55
  }
@@ -1,11 +1,25 @@
1
1
  .f-badge {
2
- display: inline-block;
3
- border: 1px solid transparent;
4
- border-radius: var(--border-radius);
5
- padding: 0 10px;
6
- line-height: 22px;
7
- font-size: 12px;
8
- font-weight: 500;
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ box-sizing: border-box;
6
+ height: var(--f-badge-height);
7
+ padding: 0 var(--f-badge-padding-x);
8
+ border-radius: var(--f-badge-border-radius);
9
+ font-size: var(--f-badge-font-size);
10
+ font-weight: var(--f-badge-font-weight);
11
+ line-height: 1;
12
+ letter-spacing: var(--f-badge-letter-spacing);
13
+ white-space: nowrap;
14
+ vertical-align: middle;
15
+ border: none;
16
+ text-transform: none;
17
+
18
+ &.sm {
19
+ height: var(--f-badge-compact-height);
20
+ padding: 0 var(--f-badge-compact-padding-x);
21
+ font-size: var(--f-badge-compact-font-size);
22
+ }
9
23
 
10
24
  &.tip {
11
25
  color: var(--f-badge-tip-color);
@@ -35,23 +49,24 @@
35
49
 
36
50
  f-navigation-panel {
37
51
  .f-badge {
38
- padding: 0 6px;
39
- line-height: 14px;
52
+ height: var(--f-badge-compact-height);
53
+ padding: 0 var(--f-badge-compact-padding-x);
54
+ font-size: var(--f-badge-compact-font-size);
40
55
  }
41
56
  }
42
57
 
43
58
  .m-render h1 > .f-badge {
44
- margin-top: 4px;
59
+ margin-top: 6px;
45
60
  vertical-align: top;
46
61
  }
47
62
 
48
63
  .m-render h2 > .f-badge {
49
- margin-top: 3px;
50
- padding: 0 8px;
64
+ margin-top: 4px;
51
65
  vertical-align: top;
52
66
  }
53
67
 
54
68
  .m-render h3 > .f-badge {
69
+ margin-top: 1px;
55
70
  vertical-align: middle;
56
71
  }
57
72
 
@@ -59,5 +74,4 @@ f-navigation-panel {
59
74
  .m-render h5 > .f-badge,
60
75
  .m-render h6 > .f-badge {
61
76
  vertical-align: middle;
62
- line-height: 18px;
63
77
  }
@@ -3,40 +3,49 @@
3
3
  text-align: center;
4
4
  font-weight: 600;
5
5
  white-space: nowrap;
6
- transition: color .25s, background-color .25s;
6
+ transition: color .2s ease, background-color .2s ease, border-color .2s ease, transform .2s ease;
7
7
 
8
- border-radius: 4px;
9
- padding: 0 20px;
10
- line-height: 38px;
8
+ border: 1px solid var(--button-default-border);
9
+ border-radius: 999px;
10
+ padding: 0 18px;
11
+ line-height: 36px;
11
12
  font-size: 14px;
12
13
 
13
14
  color: var(--button-default-text);
14
15
  background-color: var(--button-default-bg);
16
+ box-shadow: var(--shadow-1);
15
17
  cursor: pointer;
16
18
  pointer-events: all;
17
19
 
18
20
  &:hover {
19
21
  color: var(--button-default-hover-text);
20
22
  background-color: var(--button-default-hover-bg);
23
+ border-color: var(--button-default-hover-border);
24
+ transform: translateY(-1px);
21
25
  }
22
26
 
23
27
  &:active {
24
28
  color: var(--button-default-active-text);
25
29
  background-color: var(--button-default-active-bg);
30
+ border-color: var(--button-default-active-border);
31
+ transform: translateY(0);
26
32
  }
27
33
 
28
34
  &.primary {
29
35
  color: var(--button-primary-text);
30
36
  background-color: var(--button-primary-bg);
37
+ border-color: var(--button-primary-border);
31
38
 
32
39
  &:hover {
33
40
  color: var(--button-primary-hover-text);
34
41
  background-color: var(--button-primary-hover-bg);
42
+ border-color: var(--button-primary-hover-border);
35
43
  }
36
44
 
37
45
  &:active {
38
46
  color: var(--button-primary-active-text);
39
47
  background-color: var(--button-primary-active-bg);
48
+ border-color: var(--button-primary-active-border);
40
49
  }
41
50
  }
42
51
  }
@@ -3,9 +3,15 @@
3
3
  margin-top: 12px;
4
4
  }
5
5
 
6
+ .f-code-group + .f-code-group {
7
+ margin-top: 16px;
8
+ }
9
+
6
10
  .f-code-group {
7
11
  display: block;
12
+ border: 1px solid var(--code-view-border-color);
8
13
  border-radius: var(--code-group-border-radius);
14
+ background-color: var(--code-group-tabs-background);
9
15
  overflow: hidden;
10
16
  height: 100%;
11
17
  width: 100%;
@@ -42,9 +48,39 @@
42
48
  display: flex;
43
49
  justify-content: flex-start;
44
50
  align-items: flex-start;
51
+ background-color: var(--code-view-background);
45
52
  height: calc(100% - 52px);
46
53
  overflow: auto;
47
54
  position: relative;
55
+
56
+ > .f-code-view,
57
+ > .f-example-view {
58
+ width: 100%;
59
+ border: 0;
60
+ border-radius: 0;
61
+ box-shadow: none;
62
+ background-color: transparent;
63
+ }
64
+
65
+ > .f-code-view pre code {
66
+ border-radius: 0;
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ @media (hover: hover) {
73
+ .m-render {
74
+ .f-code-group {
75
+ .f-code-group-body > .f-code-view .f-copy-button {
76
+ opacity: 0;
77
+ pointer-events: none;
78
+ }
79
+
80
+ &:hover .f-code-group-body > .f-code-view .f-copy-button {
81
+ opacity: 1;
82
+ pointer-events: auto;
83
+ }
48
84
  }
49
85
  }
50
86
  }
@@ -1,37 +1,18 @@
1
1
  .m-render {
2
- --token-tag: #1d4ed8;
3
- --token-attr-name: #7c3aed;
4
- --token-attr-value: #0f7a43;
5
- --token-string: #0f8a55;
6
- --token-punctuation: #2f3441;
7
- --token-keyword: #6d28d9;
8
- --token-function: #1e40af;
9
- --token-number: #b45309;
10
- --token-operator: #4b5563;
11
- --token-interpolation: #8b3cf6;
12
- --token-expression: #0c7a4c;
13
- --token-comment: #6b7280;
14
- --token-selector: #1d4ed8;
15
- --token-variable: #9b2fae;
16
- }
17
-
18
- .dark {
19
- .m-render {
20
- --token-tag: #8fb5ff;
21
- --token-attr-name: #d2b4ff;
22
- --token-attr-value: #7fe3a0;
23
- --token-string: #84e1a8;
24
- --token-punctuation: #ececf2;
25
- --token-keyword: #cab8ff;
26
- --token-function: #79a6ff;
27
- --token-number: #f3c97a;
28
- --token-operator: #b6bbca;
29
- --token-interpolation: #e4b8ff;
30
- --token-expression: #8fe7b8;
31
- --token-comment: #8d95a5;
32
- --token-selector: #8fb5ff;
33
- --token-variable: #ffb4d8;
34
- }
2
+ --token-tag: var(--code-syntax-4);
3
+ --token-attr-name: var(--code-syntax-4);
4
+ --token-attr-value: var(--code-syntax-3);
5
+ --token-string: var(--code-syntax-3);
6
+ --token-punctuation: var(--code-syntax-muted);
7
+ --token-keyword: var(--code-syntax-2);
8
+ --token-function: var(--code-syntax-1);
9
+ --token-number: var(--code-syntax-5);
10
+ --token-operator: var(--code-syntax-muted);
11
+ --token-interpolation: var(--code-syntax-5);
12
+ --token-expression: var(--code-view-text-color);
13
+ --token-comment: var(--code-syntax-comment);
14
+ --token-selector: var(--code-syntax-4);
15
+ --token-variable: var(--code-syntax-4);
35
16
  }
36
17
 
37
18
  .m-render {
@@ -91,11 +72,10 @@
91
72
  }
92
73
  }
93
74
 
94
-
95
75
  .m-render {
96
76
  .language-scss .token.selector,
97
77
  .language-css .token.selector {
98
- color: var(--token-selector, #3e63dd);
78
+ color: var(--token-selector, var(--primary-text));
99
79
  }
100
80
 
101
81
  .language-scss .token.property,
@@ -111,7 +91,7 @@
111
91
  }
112
92
 
113
93
  .language-scss .token.variable {
114
- color: var(--token-variable, #d17adf);
94
+ color: var(--token-variable, var(--code-syntax-4));
115
95
  }
116
96
 
117
97
  .language-scss .token.keyword {
@@ -18,11 +18,16 @@
18
18
 
19
19
  code {
20
20
  display: block;
21
- padding: 16px 24px;
21
+ padding:
22
+ var(--code-view-padding-top)
23
+ var(--code-view-padding-right)
24
+ var(--code-view-padding-bottom)
25
+ var(--code-view-padding-left);
22
26
  width: fit-content;
23
27
  min-width: 100%;
24
28
  line-height: var(--code-view-line-height);
25
29
  font-size: var(--code-view-font-size);
30
+ font-weight: 400;
26
31
  color: var(--code-view-text-color);
27
32
  }
28
33
  }
@@ -30,83 +35,180 @@
30
35
  .f-code-view, .f-example-view {
31
36
  position: relative;
32
37
  background-color: var(--code-view-background);
38
+ border: 1px solid var(--code-view-border-color);
33
39
  border-radius: var(--code-view-border-radius);
34
- overflow-x: auto;
40
+ overflow: hidden;
35
41
  width: 100%;
36
42
 
37
- .f-copy-button {
43
+ .f-code-controls {
38
44
  position: absolute;
39
- top: 8px;
40
- right: 20px;
41
- border: 1px solid var(--code-view-copy-button-border-color);
42
- border-radius: 4px;
43
- width: 32px;
44
- height: 32px;
45
+ top: 0;
46
+ right: 0;
47
+ display: flex;
48
+ flex-direction: column;
49
+ align-items: flex-end;
50
+ gap: 4px;
45
51
  z-index: 3;
46
- background-color: var(--code-view-copy-button-background);
47
- opacity: 0;
52
+ padding: 10px 10px 0 0;
53
+ border-radius: inherit;
54
+ pointer-events: none;
55
+ background-color: transparent;
56
+ transition: background-color 0.2s ease;
57
+ }
58
+
59
+ .f-copy-button {
60
+ border: none;
61
+ border-radius: 8px;
62
+ position: relative;
63
+ min-width: 32px;
64
+ height: 32px;
65
+ width: 32px;
66
+ padding: 0;
67
+ background-color: transparent;
68
+ opacity: 1;
48
69
  cursor: pointer;
49
- background-image: var(--copy-icon);
50
- background-position: 50%;
51
- background-size: 14px;
52
- background-repeat: no-repeat;
53
- transition: background-color 0.25s, opacity 0.25s;
70
+ color: var(--secondary-text);
71
+ line-height: 0;
72
+ pointer-events: auto;
73
+ transition: background-color 0.2s ease, color 0.2s ease, opacity 0.2s ease, transform 0.2s ease;
54
74
 
55
75
  &:hover {
56
76
  background-color: var(--code-view-copy-button-hover-background);
77
+ color: var(--primary-text);
78
+ }
79
+ }
80
+
81
+ .f-copy-icon,
82
+ .f-copy-success-icon {
83
+ position: absolute;
84
+ inset: 0;
85
+ margin: auto;
86
+ width: 16px;
87
+ height: 16px;
88
+ background-color: currentColor;
89
+ mask-position: center;
90
+ mask-repeat: no-repeat;
91
+ mask-size: 16px 16px;
92
+ transition: transform 0.22s ease, opacity 0.18s ease;
93
+ transform: scale(1);
94
+ opacity: 1;
95
+ }
96
+
97
+ .f-copy-icon {
98
+ mask-image: var(--copy-icon);
99
+
100
+ &.hidden {
101
+ transform: scale(0.6);
102
+ opacity: 0;
103
+ }
104
+ }
105
+
106
+ .f-copy-success-icon {
107
+ mask-image: var(--check-icon);
108
+ transform: scale(0.6);
109
+ opacity: 0;
110
+
111
+ &.visible {
112
+ transform: scale(1);
113
+ opacity: 1;
57
114
  }
58
115
  }
59
116
 
60
117
  .f-fullscreen-button {
61
118
  position: absolute;
62
- top: 8px;
63
- right: 20px;
119
+ top: 12px;
120
+ right: 14px;
64
121
  border: 1px solid var(--code-view-copy-button-border-color);
65
- border-radius: 4px;
66
- width: 32px;
67
- height: 32px;
122
+ border-radius: 999px;
123
+ width: 34px;
124
+ height: 34px;
68
125
  z-index: 3;
69
126
  background-color: var(--code-view-copy-button-background);
70
127
  opacity: 0;
71
128
  cursor: pointer;
72
- background-image: var(--fullscreen-icon);
73
- background-position: 50%;
74
- background-size: 14px;
75
- background-repeat: no-repeat;
76
129
  transition: background-color 0.25s, opacity 0.25s;
77
130
 
131
+ &::before {
132
+ content: "";
133
+ position: absolute;
134
+ inset: 0;
135
+ margin: auto;
136
+ width: 14px;
137
+ height: 14px;
138
+ background-color: var(--secondary-text);
139
+ mask-image: var(--fullscreen-icon);
140
+ mask-position: center;
141
+ mask-repeat: no-repeat;
142
+ mask-size: 14px 14px;
143
+ }
144
+
78
145
  &.exit {
79
- background-image: var(--fullscreen-exit-icon);
146
+ &::before {
147
+ mask-image: var(--fullscreen-exit-icon);
148
+ }
80
149
  }
81
150
 
82
151
  &:hover {
83
152
  background-color: var(--code-view-copy-button-hover-background);
153
+
154
+ &::before {
155
+ background-color: var(--primary-text);
156
+ }
84
157
  }
85
158
  }
86
159
 
87
160
  .f-code-language {
161
+ pointer-events: none;
88
162
  position: absolute;
89
- top: 2px;
90
- right: 20px;
91
- font-size: 12px;
92
- font-weight: 500;
163
+ top: 18px;
164
+ right: 12px;
165
+ z-index: 2;
166
+ display: block;
167
+ max-width: calc(100% - 24px);
168
+ overflow: hidden;
169
+ text-overflow: ellipsis;
170
+ white-space: nowrap;
171
+ text-align: right;
172
+ font-size: 10px;
173
+ line-height: 1;
174
+ font-weight: 400;
93
175
  color: var(--code-view-lang-color);
94
176
  transition: opacity 0.4s;
177
+ letter-spacing: 0.02em;
178
+ opacity: 0.72;
95
179
  }
96
180
 
97
- &:hover {
181
+ @media (hover: hover) and (pointer: fine) {
98
182
  .f-copy-button {
99
- opacity: 1;
183
+ opacity: 0;
184
+ pointer-events: none;
185
+ transform: scale(0.92);
186
+ }
100
187
 
101
- &:active {
102
- opacity: 0.1;
188
+ &:hover,
189
+ &:focus-within {
190
+ .f-code-controls {
191
+ background-color: var(--code-view-background);
103
192
  }
104
- }
105
193
 
106
- .f-code-language {
107
- opacity: 0;
194
+ .f-copy-button {
195
+ opacity: 1;
196
+ pointer-events: auto;
197
+ transform: scale(1);
198
+
199
+ &:active {
200
+ opacity: 0.7;
201
+ }
202
+ }
203
+
204
+ .f-code-language {
205
+ opacity: 0;
206
+ }
108
207
  }
208
+ }
109
209
 
210
+ &:hover,
211
+ &:focus-within {
110
212
  .f-fullscreen-button {
111
213
  opacity: 1;
112
214
 
@@ -117,13 +219,37 @@
117
219
  }
118
220
  }
119
221
 
222
+ .f-code-view {
223
+ .f-code-scroll {
224
+ width: 100%;
225
+ height: 100%;
226
+ overflow: auto;
227
+ border-radius: inherit;
228
+ }
229
+ }
230
+
120
231
  .f-example-view {
121
232
  width: 100%;
122
233
  height: 300px;
123
234
  overflow: hidden;
235
+ box-shadow: var(--shadow-1);
124
236
 
125
237
  &.f-example-view-fullscreen {
238
+ background-color: var(--background-color);
126
239
  border-radius: 0;
240
+ border-color: transparent;
241
+ box-shadow: none;
242
+ }
243
+
244
+ &:fullscreen {
245
+ background-color: var(--background-color);
246
+ border-radius: 0;
247
+ border-color: transparent;
248
+ box-shadow: none;
249
+ }
250
+
251
+ &::backdrop {
252
+ background-color: var(--background-color);
127
253
  }
128
254
 
129
255
  .f-example-iframe {
@@ -132,6 +258,42 @@
132
258
  border: none;
133
259
  }
134
260
 
261
+ .f-example-loading-overlay {
262
+ position: absolute;
263
+ inset: 0;
264
+ z-index: 2;
265
+ display: flex;
266
+ align-items: center;
267
+ justify-content: center;
268
+ background-color: color-mix(in srgb, var(--code-view-background) 84%, transparent);
269
+ backdrop-filter: blur(6px);
270
+ }
271
+
272
+ .f-loading-dots {
273
+ display: flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ gap: 4px;
277
+ min-height: 24px;
278
+ color: var(--secondary-text);
279
+ }
280
+
281
+ .f-loading-dot {
282
+ width: 8px;
283
+ height: 8px;
284
+ border-radius: 999px;
285
+ background-color: currentColor;
286
+ animation: f-loading-dot-pulse 1s infinite both;
287
+
288
+ &:nth-child(2) {
289
+ animation-delay: 0.2s;
290
+ }
291
+
292
+ &:nth-child(3) {
293
+ animation-delay: 0.4s;
294
+ }
295
+ }
296
+
135
297
  &.f-example-view-fullscreen .f-fullscreen-button {
136
298
  opacity: 1;
137
299
  }
@@ -143,3 +305,17 @@
143
305
  }
144
306
  }
145
307
  }
308
+
309
+ @keyframes f-loading-dot-pulse {
310
+ 0% {
311
+ opacity: 0.15;
312
+ }
313
+
314
+ 20% {
315
+ opacity: 0.4;
316
+ }
317
+
318
+ 100% {
319
+ opacity: 0.15;
320
+ }
321
+ }