@carbon/styles 0.17.0 → 1.0.0-rc.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.
- package/package.json +23 -10
- package/scss/__tests__/__snapshots__/colors-test.js.snap +404 -0
- package/scss/__tests__/__snapshots__/config-test.js.snap +44 -0
- package/scss/__tests__/__snapshots__/motion-test.js.snap +39 -0
- package/scss/__tests__/breakpoint-test.js +42 -0
- package/scss/__tests__/colors-test.js +28 -0
- package/scss/__tests__/config-test.js +53 -0
- package/scss/__tests__/grid-test.js +48 -0
- package/scss/__tests__/layer-test.js +82 -0
- package/scss/__tests__/motion-test.js +37 -0
- package/scss/__tests__/reset-test.js +28 -0
- package/scss/__tests__/theme-test.js +151 -0
- package/scss/__tests__/themes-test.js +36 -0
- package/scss/__tests__/type-test.js +77 -0
- package/scss/_breakpoint.scss +2 -1
- package/scss/_config.scss +9 -2
- package/scss/_spacing.scss +1 -1
- package/scss/_theme.scss +4 -4
- package/scss/_themes.scss +2 -1
- package/scss/components/__tests__/accordion-test.js +47 -0
- package/scss/components/__tests__/breadcrumb-test.js +27 -0
- package/scss/components/__tests__/button-test.js +71 -0
- package/scss/components/__tests__/checkbox-test.js +27 -0
- package/scss/components/__tests__/code-snippet-test.js +44 -0
- package/scss/components/__tests__/combo-box-test.js +27 -0
- package/scss/components/__tests__/content-switcher-test.js +27 -0
- package/scss/components/__tests__/copy-button-test.js +27 -0
- package/scss/components/__tests__/data-table-test.js +85 -0
- package/scss/components/__tests__/date-picker-test.js +26 -0
- package/scss/components/__tests__/dropdown-test.js +27 -0
- package/scss/components/__tests__/file-uploader.js +27 -0
- package/scss/components/__tests__/form-test.js +43 -0
- package/scss/components/__tests__/inline-loading-test.js +26 -0
- package/scss/components/__tests__/link-test.js +26 -0
- package/scss/components/__tests__/list-box-test.js +36 -0
- package/scss/components/__tests__/list-test.js +26 -0
- package/scss/components/__tests__/loading-test.js +26 -0
- package/scss/components/__tests__/menu-test.js +27 -0
- package/scss/components/__tests__/modal-test.js +27 -0
- package/scss/components/__tests__/multiselect-test.js +27 -0
- package/scss/components/__tests__/notification-test.js +49 -0
- package/scss/components/__tests__/number-input-test.js +27 -0
- package/scss/components/__tests__/overflow-menu-test.js +27 -0
- package/scss/components/__tests__/pagination-nav-test.js +26 -0
- package/scss/components/__tests__/pagination-test.js +26 -0
- package/scss/components/__tests__/progress-bar-test.js +26 -0
- package/scss/components/__tests__/progress-indicator-test.js +26 -0
- package/scss/components/__tests__/radio-button-test.js +25 -0
- package/scss/components/__tests__/search-test.js +25 -0
- package/scss/components/__tests__/select-test.js +26 -0
- package/scss/components/__tests__/skeleton-test.js +26 -0
- package/scss/components/__tests__/slider-test.js +26 -0
- package/scss/components/__tests__/structured-list-test.js +27 -0
- package/scss/components/__tests__/tabs-test.js +27 -0
- package/scss/components/__tests__/tag-test.js +25 -0
- package/scss/components/__tests__/text-area-test.js +26 -0
- package/scss/components/__tests__/text-input-test.js +26 -0
- package/scss/components/__tests__/tile-test.js +26 -0
- package/scss/components/__tests__/time-picker-test.js +26 -0
- package/scss/components/__tests__/toggle-test.js +27 -0
- package/scss/components/__tests__/tooltip-test.js +25 -0
- package/scss/components/__tests__/treeview-test.js +25 -0
- package/scss/components/__tests__/ui-shell-test.js +27 -0
- package/scss/components/accordion/_accordion.scss +1 -1
- package/scss/components/aspect-ratio/_aspect-ratio.scss +2 -2
- package/scss/components/breadcrumb/_breadcrumb.scss +1 -1
- package/scss/components/button/_button.scss +1 -5
- package/scss/components/button/_tokens.scss +1 -0
- package/scss/components/code-snippet/_code-snippet.scss +32 -47
- package/scss/components/content-switcher/_content-switcher.scss +0 -2
- package/scss/components/copy-button/_copy-button.scss +0 -59
- package/scss/components/dropdown/_dropdown.scss +0 -1
- package/scss/components/modal/_modal.scss +1 -1
- package/scss/components/notification/_actionable-notification.scss +58 -19
- package/scss/components/notification/_inline-notification.scss +9 -21
- package/scss/components/notification/_toast-notification.scss +29 -58
- package/scss/components/notification/_tokens.scss +2 -1
- package/scss/components/pagination/_unstable_pagination.scss +1 -1
- package/scss/components/progress-indicator/_progress-indicator.scss +5 -5
- package/scss/components/radio-button/_radio-button.scss +2 -10
- package/scss/components/tabs/_tabs.scss +1 -1
- package/scss/components/tag/_tokens.scss +1 -0
- package/scss/components/text-input/_text-input.scss +7 -22
- package/scss/components/tile/_tile.scss +60 -29
- package/scss/components/toggletip/_toggletip.scss +1 -2
- package/scss/fonts/__tests__/__snapshots__/fonts-test.js.snap +269 -0
- package/scss/fonts/__tests__/fonts-test.js +197 -0
- package/scss/fonts/_src.scss +42 -31
- package/scss/grid/_css-grid.scss +11 -0
- package/scss/grid/_flexbox.scss +1 -1
- package/scss/grid/_index.scss +7 -2
- package/scss/grid/_mixins.scss +9 -0
- package/scss/type/_reset.scss +1 -1
- package/scss/utilities/__tests__/custom-property-test.js +50 -0
- package/scss/utilities/_component-tokens.scss +2 -1
- package/scss/utilities/_convert.scss +2 -4
- package/scss/utilities/_high-contrast-mode.scss +2 -4
- package/docs/sass.md +0 -462
- package/scss/grid/_config.scss +0 -18
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2018, 2018
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @jest-environment node
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
const { SassRenderer } = require('@carbon/test-utils/scss');
|
|
13
|
+
const css = require('css');
|
|
14
|
+
|
|
15
|
+
const { render } = SassRenderer.create(__dirname);
|
|
16
|
+
|
|
17
|
+
const fonts = [
|
|
18
|
+
'mono',
|
|
19
|
+
'sans-arabic',
|
|
20
|
+
'sans-devanagari',
|
|
21
|
+
'sans-hebrew',
|
|
22
|
+
'sans-thai-looped',
|
|
23
|
+
'sans-thai',
|
|
24
|
+
'sans',
|
|
25
|
+
'serif',
|
|
26
|
+
];
|
|
27
|
+
const weights = [
|
|
28
|
+
'thin',
|
|
29
|
+
'extralight',
|
|
30
|
+
'light',
|
|
31
|
+
'regular',
|
|
32
|
+
'text',
|
|
33
|
+
'medium',
|
|
34
|
+
'semibold',
|
|
35
|
+
'bold',
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
describe('@carbon/styles/scss/fonts', () => {
|
|
39
|
+
it('should emit default fonts, weights, and styles', async () => {
|
|
40
|
+
const { result } = await render(`@use '../' as fonts;`);
|
|
41
|
+
const { stylesheet } = css.parse(result.css.toString());
|
|
42
|
+
const atRules = stylesheet.rules.filter((rule) => {
|
|
43
|
+
return rule.type === 'font-face';
|
|
44
|
+
});
|
|
45
|
+
const emitted = new Map();
|
|
46
|
+
|
|
47
|
+
for (const rule of atRules) {
|
|
48
|
+
const fontFamily = rule.declarations
|
|
49
|
+
.find((declaration) => {
|
|
50
|
+
return declaration.property === 'font-family';
|
|
51
|
+
})
|
|
52
|
+
.value.replace(/['"]/g, '');
|
|
53
|
+
|
|
54
|
+
if (!emitted.has(fontFamily)) {
|
|
55
|
+
emitted.set(fontFamily, {
|
|
56
|
+
weights: new Set(),
|
|
57
|
+
styles: new Set(),
|
|
58
|
+
src: new Set(),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const entry = emitted.get(fontFamily);
|
|
63
|
+
|
|
64
|
+
for (const declaration of rule.declarations) {
|
|
65
|
+
if (declaration.property === 'font-weight') {
|
|
66
|
+
entry.weights.add(declaration.value);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (declaration.property === 'font-style') {
|
|
70
|
+
entry.styles.add(declaration.value);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (declaration.property === 'src') {
|
|
74
|
+
entry.src.add(declaration.value);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
expect(emitted.has('IBM Plex Mono')).toBe(true);
|
|
80
|
+
const mono = emitted.get('IBM Plex Mono');
|
|
81
|
+
expect(mono.weights).toEqual(new Set(['300', '400', '600']));
|
|
82
|
+
expect(mono.styles).toEqual(new Set(['normal', 'italic']));
|
|
83
|
+
|
|
84
|
+
expect(emitted.has('IBM Plex Sans')).toBe(true);
|
|
85
|
+
expect(emitted.get('IBM Plex Sans').weights).toEqual(
|
|
86
|
+
new Set(['300', '400', '600'])
|
|
87
|
+
);
|
|
88
|
+
expect(emitted.get('IBM Plex Sans').styles).toEqual(
|
|
89
|
+
new Set(['normal', 'italic'])
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
expect(emitted.has('IBM Plex Serif')).toBe(true);
|
|
93
|
+
expect(emitted.get('IBM Plex Serif').weights).toEqual(
|
|
94
|
+
new Set(['300', '400', '600'])
|
|
95
|
+
);
|
|
96
|
+
expect(emitted.get('IBM Plex Serif').styles).toEqual(
|
|
97
|
+
new Set(['normal', 'italic'])
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
expect(emitted).toMatchSnapshot();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('should emit src from akamai cdn if $use-akamai-cdn is true', async () => {
|
|
104
|
+
const { result } = await render(`
|
|
105
|
+
@use '../../config' with (
|
|
106
|
+
$use-akamai-cdn: true,
|
|
107
|
+
);
|
|
108
|
+
@use '../' as fonts;
|
|
109
|
+
`);
|
|
110
|
+
const { stylesheet } = css.parse(result.css.toString());
|
|
111
|
+
const atRules = stylesheet.rules.filter((rule) => {
|
|
112
|
+
return rule.type === 'font-face';
|
|
113
|
+
});
|
|
114
|
+
const emitted = new Map();
|
|
115
|
+
|
|
116
|
+
for (const rule of atRules) {
|
|
117
|
+
const fontFamily = rule.declarations
|
|
118
|
+
.find((declaration) => {
|
|
119
|
+
return declaration.property === 'font-family';
|
|
120
|
+
})
|
|
121
|
+
.value.replace(/['"]/g, '');
|
|
122
|
+
|
|
123
|
+
if (!emitted.has(fontFamily)) {
|
|
124
|
+
emitted.set(fontFamily, {
|
|
125
|
+
weights: new Set(),
|
|
126
|
+
styles: new Set(),
|
|
127
|
+
src: new Set(),
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const entry = emitted.get(fontFamily);
|
|
132
|
+
|
|
133
|
+
for (const declaration of rule.declarations) {
|
|
134
|
+
if (declaration.property === 'font-weight') {
|
|
135
|
+
entry.weights.add(declaration.value);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (declaration.property === 'font-style') {
|
|
139
|
+
entry.styles.add(declaration.value);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (declaration.property === 'src') {
|
|
143
|
+
entry.src.add(declaration.value);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
expect(emitted).toMatchSnapshot();
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('should emit no @font-face blocks if $css--font-face is false', async () => {
|
|
152
|
+
const { result } = await render(`
|
|
153
|
+
@use '../../config' with (
|
|
154
|
+
$css--font-face: false,
|
|
155
|
+
);
|
|
156
|
+
@use '../' as fonts;
|
|
157
|
+
`);
|
|
158
|
+
expect(result.css.toString()).toBe('');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it('should not emit fonts set to false', async () => {
|
|
162
|
+
const { result } = await render(`
|
|
163
|
+
@use '../' as fonts with (
|
|
164
|
+
$fonts: (
|
|
165
|
+
IBM-Plex-Mono: false,
|
|
166
|
+
IBM-Plex-Sans: false,
|
|
167
|
+
IBM-Plex-Serif: false,
|
|
168
|
+
),
|
|
169
|
+
);
|
|
170
|
+
`);
|
|
171
|
+
expect(result.css.toString()).toBe('');
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
describe.each(fonts)('scss/fonts/_%s.scss', (font) => {
|
|
175
|
+
it('should export all font weights as mixins', async () => {
|
|
176
|
+
const weightMixins = weights.map((weight) => {
|
|
177
|
+
return `$_: get('${weight}', meta.mixin-exists('${weight}', '${font}'));`;
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const { unwrap } = await render(`
|
|
181
|
+
@use 'sass:meta';
|
|
182
|
+
@use '../${font}';
|
|
183
|
+
|
|
184
|
+
${weightMixins.join('\n')}
|
|
185
|
+
$_: get('all', meta.mixin-exists('all', '${font}'));
|
|
186
|
+
$_: get('default', meta.mixin-exists('default', '${font}'));
|
|
187
|
+
`);
|
|
188
|
+
|
|
189
|
+
for (const weight of weights) {
|
|
190
|
+
expect(unwrap(weight)).toBe(true);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
expect(unwrap('all')).toBe(true);
|
|
194
|
+
expect(unwrap('default')).toBe(true);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
});
|
package/scss/fonts/_src.scss
CHANGED
|
@@ -21,50 +21,42 @@ $-filenames: (
|
|
|
21
21
|
IBM-Plex-Serif: 'IBMPlexSerif',
|
|
22
22
|
);
|
|
23
23
|
|
|
24
|
-
$-
|
|
24
|
+
$-akamai-filenames: (
|
|
25
25
|
IBM-Plex-Mono: (
|
|
26
|
-
name: '
|
|
27
|
-
|
|
28
|
-
hash: '-F63fjptAgt5VM-kVkqdyU8n1i8q131nj-otFQ',
|
|
26
|
+
name: 'IBM-Plex-Mono',
|
|
27
|
+
filename: 'IBMPlexMono',
|
|
29
28
|
),
|
|
30
29
|
IBM-Plex-Sans-Arabic: (
|
|
31
|
-
name: '
|
|
32
|
-
|
|
33
|
-
hash: 'Qw3CZRtWPQCuHme67tEYUIx3Kh0PHR9N6Ys43PW5fslBEg0',
|
|
30
|
+
name: 'IBM-Plex-Sans-Arabic',
|
|
31
|
+
filename: 'IBMPlexSansArabic',
|
|
34
32
|
),
|
|
35
33
|
IBM-Plex-Sans-Devanagari: (
|
|
36
|
-
name: '
|
|
37
|
-
|
|
38
|
-
hash: 'XRXH3JCMvG4IDoS9SubXB6W-UX5iehIMBFR2-O_PX0j1Uc7wCWQq',
|
|
34
|
+
name: 'IBM-Plex-Sans-Devanagari',
|
|
35
|
+
filename: 'IBMPlexSansDevanagari',
|
|
39
36
|
),
|
|
40
37
|
IBM-Plex-Sans-Hebrew: (
|
|
41
|
-
name: '
|
|
42
|
-
|
|
43
|
-
hash: 'BCa2qYENg9Kw1mpLpO0bGM5lfHAAZHhDXE2v-lgVrjaNzC4',
|
|
38
|
+
name: 'IBM-Plex-Sans-Hebrew',
|
|
39
|
+
filename: 'IBMPlexSansHebrew',
|
|
44
40
|
),
|
|
45
41
|
IBM-Plex-Sans-Thai-Looped: (
|
|
46
|
-
name: '
|
|
47
|
-
|
|
48
|
-
hash: 'tss_AoJJRAhL3BTrK3r2xxbFhvKfyBB6l7hHT30L9BiKoXOrFCUb6Q',
|
|
42
|
+
name: 'IBM-Plex-Sans-Thai-Looped',
|
|
43
|
+
filename: 'IBMPlexSansThaiLooped',
|
|
49
44
|
),
|
|
50
45
|
IBM-Plex-Sans-Thai: (
|
|
51
|
-
name: '
|
|
52
|
-
|
|
53
|
-
hash: 'm8JPje1VVIzcq1HzJq2AEdo2Tj_qvLqMBNYgR8BKU4cX',
|
|
46
|
+
name: 'IBM-Plex-Sans-Thai',
|
|
47
|
+
filename: 'IBMPlexSansThai',
|
|
54
48
|
),
|
|
55
49
|
IBM-Plex-Sans: (
|
|
56
|
-
name: '
|
|
57
|
-
|
|
58
|
-
hash: 'zYXgKVElMYYaJe8bpLHnCwDKhdzeFaxOedfTDw',
|
|
50
|
+
name: 'IBM-Plex-Sans',
|
|
51
|
+
filename: 'IBMPlexSans',
|
|
59
52
|
),
|
|
60
53
|
IBM-Plex-Serif: (
|
|
61
|
-
name: '
|
|
62
|
-
|
|
63
|
-
hash: 'jizDREVNn1dOx-zrZ2X3pZvkTiUS2zcZiVbJsNo',
|
|
54
|
+
name: 'IBM-Plex-Serif',
|
|
55
|
+
filename: 'IBMPlexSerif',
|
|
64
56
|
),
|
|
65
57
|
);
|
|
66
58
|
|
|
67
|
-
@function -get-
|
|
59
|
+
@function -get-akamai-filename($map, $keys...) {
|
|
68
60
|
@each $key in $keys {
|
|
69
61
|
$map: map.get($map, $key);
|
|
70
62
|
}
|
|
@@ -88,15 +80,34 @@ $-google-filenames: (
|
|
|
88
80
|
/// @param {List} $formats
|
|
89
81
|
/// @returns List
|
|
90
82
|
@function -default-resolver($name, $weight, $style, $unicode-range, $formats) {
|
|
91
|
-
@if (config.$use-
|
|
92
|
-
$
|
|
93
|
-
$
|
|
94
|
-
|
|
83
|
+
@if (config.$use-akamai-cdn) {
|
|
84
|
+
$name: -get-akamai-filename($-akamai-filenames, $name, 'name');
|
|
85
|
+
$filename: -get-akamai-filename($-akamai-filenames, $name, 'filename');
|
|
86
|
+
|
|
87
|
+
// Special case for weight = Regular (400)
|
|
88
|
+
@if $weight == Regular {
|
|
89
|
+
@if $style == italic {
|
|
90
|
+
$filename: '#{$filename}-Italic';
|
|
91
|
+
} @else {
|
|
92
|
+
$filename: '#{$filename}-Regular';
|
|
93
|
+
}
|
|
94
|
+
} @else {
|
|
95
|
+
// Otherwise add weight + optional style (italic)
|
|
96
|
+
$filename: '#{$filename}-#{$weight}';
|
|
97
|
+
@if $style == italic {
|
|
98
|
+
$filename: '#{$filename}Italic';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
95
101
|
|
|
96
102
|
$filenames: ();
|
|
97
103
|
|
|
98
104
|
@each $format in $formats {
|
|
99
|
-
$url: 'https://
|
|
105
|
+
$url: 'https://1.www.s81c.com/common/carbon/plex/fonts/#{$name}';
|
|
106
|
+
@if $unicode-range {
|
|
107
|
+
$url: 'https://1.www.s81c.com/common/carbon/plex/fonts/#{$name}/fonts/split/#{$format}/#{$filename}-#{$unicode-range}';
|
|
108
|
+
} @else {
|
|
109
|
+
$url: 'https://1.www.s81c.com/common/carbon/plex/fonts/#{$name}/fonts/complete/#{$format}/#{$filename}';
|
|
110
|
+
}
|
|
100
111
|
|
|
101
112
|
// Add extension
|
|
102
113
|
$url: '#{$url}.#{$format}';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright IBM Corp. 2018, 2018
|
|
3
|
+
//
|
|
4
|
+
// This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
// LICENSE file in the root directory of this source tree.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
@use '../config';
|
|
9
|
+
@use '@carbon/grid';
|
|
10
|
+
|
|
11
|
+
@include grid.css-grid();
|
package/scss/grid/_flexbox.scss
CHANGED
package/scss/grid/_index.scss
CHANGED
|
@@ -5,9 +5,14 @@
|
|
|
5
5
|
// LICENSE file in the root directory of this source tree.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
-
@forward 'config';
|
|
9
|
-
@use '@carbon/grid';
|
|
10
8
|
@use '../config';
|
|
9
|
+
@forward '@carbon/grid' show
|
|
10
|
+
$grid-gutter,
|
|
11
|
+
$grid-gutter-condensed,
|
|
12
|
+
$grid-breakpoints,
|
|
13
|
+
flex-grid,
|
|
14
|
+
css-grid;
|
|
15
|
+
@use '@carbon/grid';
|
|
11
16
|
|
|
12
17
|
@if config.$use-flexbox-grid == true {
|
|
13
18
|
@include grid.flex-grid();
|
package/scss/type/_reset.scss
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2018, 2018
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @jest-environment node
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
const { SassRenderer } = require('@carbon/test-utils/scss');
|
|
13
|
+
const css = require('css');
|
|
14
|
+
|
|
15
|
+
const { render } = SassRenderer.create(__dirname);
|
|
16
|
+
|
|
17
|
+
describe('scss/utilities/custom-property', () => {
|
|
18
|
+
it('should support getting the property name from a value', async () => {
|
|
19
|
+
const { unwrap } = await render(`
|
|
20
|
+
@use '../../config' with (
|
|
21
|
+
$prefix: 'cds',
|
|
22
|
+
);
|
|
23
|
+
@use '../custom-property';
|
|
24
|
+
|
|
25
|
+
$_: get('name', custom-property.get-name('test'));
|
|
26
|
+
`);
|
|
27
|
+
expect(unwrap('name')).toBe('--cds-test');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('should support emitting a declaration for a CSS Custom Property', async () => {
|
|
31
|
+
const { result } = await render(`
|
|
32
|
+
@use '../../config' with (
|
|
33
|
+
$prefix: 'cds',
|
|
34
|
+
);
|
|
35
|
+
@use '../custom-property';
|
|
36
|
+
|
|
37
|
+
.test {
|
|
38
|
+
@include custom-property.declaration(test, #000000);
|
|
39
|
+
}
|
|
40
|
+
`);
|
|
41
|
+
const { stylesheet } = css.parse(result.css.toString());
|
|
42
|
+
const selector = stylesheet.rules.find((rule) => {
|
|
43
|
+
return rule.selectors.includes('.test');
|
|
44
|
+
});
|
|
45
|
+
const [declaration] = selector.declarations;
|
|
46
|
+
|
|
47
|
+
expect(declaration.property).toBe('--cds-test');
|
|
48
|
+
expect(declaration.value).toBe('#000000');
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -20,8 +20,7 @@ $base-font-size: 16px !default;
|
|
|
20
20
|
/// @group utilities
|
|
21
21
|
@function rem($px) {
|
|
22
22
|
@if unit($px) != 'px' {
|
|
23
|
-
|
|
24
|
-
@warn "Expected argument $px to be of type `px`, instead received: `#{unit($px)}`";
|
|
23
|
+
@error "Expected argument $px to be of type `px`, instead received: `#{unit($px)}`";
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
@if meta.function-exists('div', 'math') {
|
|
@@ -38,8 +37,7 @@ $base-font-size: 16px !default;
|
|
|
38
37
|
/// @group utilities
|
|
39
38
|
@function em($px) {
|
|
40
39
|
@if unit($px) != 'px' {
|
|
41
|
-
|
|
42
|
-
@warn "Expected argument $px to be of type `px`, instead received: `#{unit($px)}`";
|
|
40
|
+
@error "Expected argument $px to be of type `px`, instead received: `#{unit($px)}`";
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
@if meta.function-exists('div', 'math') {
|
|
@@ -5,15 +5,13 @@
|
|
|
5
5
|
// LICENSE file in the root directory of this source tree.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
-
/// Windows
|
|
8
|
+
/// High Contrast Mode mixin for Windows and macOS
|
|
9
9
|
/// @access public
|
|
10
10
|
/// @example @include high-contrast-mode;
|
|
11
11
|
/// @group utilities
|
|
12
12
|
/// Set HCM styles at the end of each file to ensure they are not overwritten
|
|
13
13
|
@mixin high-contrast-mode($type: '') {
|
|
14
|
-
@media screen and (-ms-high-contrast: active),
|
|
15
|
-
(forced-colors: active),
|
|
16
|
-
(prefers-contrast) {
|
|
14
|
+
@media screen and (-ms-high-contrast: active), (forced-colors: active) {
|
|
17
15
|
@if ($type == 'icon-fill') {
|
|
18
16
|
fill: ButtonText;
|
|
19
17
|
}
|