@stylexjs/shared 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/convert-to-className.d.ts +5 -1
- package/lib/convert-to-className.js +33 -1
- package/lib/convert-to-className.js.flow +5 -1
- package/lib/messages.d.ts +1 -0
- package/lib/messages.js +3 -2
- package/lib/messages.js.flow +1 -0
- package/lib/stylex-create-theme.js +30 -40
- package/lib/stylex-define-vars.d.ts +2 -6
- package/lib/stylex-define-vars.js +40 -21
- package/lib/stylex-define-vars.js.flow +1 -4
- package/lib/stylex-first-that-works.d.ts +1 -1
- package/lib/stylex-first-that-works.js.flow +1 -1
- package/lib/stylex-vars-utils.d.ts +27 -0
- package/lib/stylex-vars-utils.js +69 -0
- package/lib/stylex-vars-utils.js.flow +31 -0
- package/lib/types/index.d.ts +79 -76
- package/lib/types/index.js +28 -72
- package/lib/types/index.js.flow +82 -82
- package/lib/utils/normalize-value.js +1 -2
- package/lib/utils/normalizers/zero-dimensions.d.ts +2 -2
- package/lib/utils/normalizers/zero-dimensions.js +6 -0
- package/lib/utils/normalizers/zero-dimensions.js.flow +2 -2
- package/package.json +2 -2
@@ -9,8 +9,12 @@
|
|
9
9
|
|
10
10
|
import type { TRawValue, StyleRule, StyleXOptions } from './common-types';
|
11
11
|
export declare function convertStyleToClassName(
|
12
|
-
objEntry: [string, TRawValue]
|
12
|
+
objEntry: Readonly<[string, TRawValue]>,
|
13
13
|
pseudos: ReadonlyArray<string>,
|
14
14
|
atRules: ReadonlyArray<string>,
|
15
15
|
options: StyleXOptions,
|
16
16
|
): StyleRule;
|
17
|
+
declare function variableFallbacks(
|
18
|
+
values: ReadonlyArray<string>,
|
19
|
+
): Array<string>;
|
20
|
+
export default variableFallbacks;
|
@@ -4,12 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.convertStyleToClassName = convertStyleToClassName;
|
7
|
+
exports.default = variableFallbacks;
|
7
8
|
var _hash = _interopRequireDefault(require("./hash"));
|
8
9
|
var _dashify = _interopRequireDefault(require("./utils/dashify"));
|
9
10
|
var _transformValue = _interopRequireDefault(require("./transform-value"));
|
10
11
|
var _generateCssRule = require("./generate-css-rule");
|
11
12
|
var _defaultOptions = require("./utils/default-options");
|
12
13
|
var _objectUtils = require("./utils/object-utils");
|
14
|
+
var messages = _interopRequireWildcard(require("./messages"));
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
13
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
14
18
|
function convertStyleToClassName(objEntry, pseudos, atRules) {
|
15
19
|
let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _defaultOptions.defaultOptions;
|
@@ -18,7 +22,10 @@ function convertStyleToClassName(objEntry, pseudos, atRules) {
|
|
18
22
|
} = options;
|
19
23
|
const [key, rawValue] = objEntry;
|
20
24
|
const dashedKey = (0, _dashify.default)(key);
|
21
|
-
|
25
|
+
let value = Array.isArray(rawValue) ? rawValue.map(eachValue => (0, _transformValue.default)(key, eachValue, options)) : (0, _transformValue.default)(key, rawValue, options);
|
26
|
+
if (Array.isArray(value) && value.find(val => val.startsWith('var(') && val.endsWith(')'))) {
|
27
|
+
value = variableFallbacks(value);
|
28
|
+
}
|
22
29
|
const sortedPseudos = (0, _objectUtils.arraySort)(pseudos ?? []);
|
23
30
|
const sortedAtRules = (0, _objectUtils.arraySort)(atRules ?? []);
|
24
31
|
const atRuleHashString = sortedPseudos.join('');
|
@@ -28,4 +35,29 @@ function convertStyleToClassName(objEntry, pseudos, atRules) {
|
|
28
35
|
const className = classNamePrefix + (0, _hash.default)('<>' + stringToHash);
|
29
36
|
const cssRules = (0, _generateCssRule.generateRule)(className, dashedKey, value, pseudos, atRules);
|
30
37
|
return [key, className, cssRules];
|
38
|
+
}
|
39
|
+
function variableFallbacks(values) {
|
40
|
+
const firstVar = values.findIndex(val => val.startsWith('var(') && val.endsWith(')'));
|
41
|
+
const lastVar = values.findLastIndex(val => val.startsWith('var(') && val.endsWith(')'));
|
42
|
+
const valuesBeforeFirstVar = values.slice(0, firstVar);
|
43
|
+
let varValues = values.slice(firstVar, lastVar + 1).reverse();
|
44
|
+
const valuesAfterLastVar = values.slice(lastVar + 1);
|
45
|
+
if (varValues.find(val => !val.startsWith('var(') || !val.endsWith(')'))) {
|
46
|
+
throw new Error(messages.NON_CONTIGUOUS_VARS);
|
47
|
+
}
|
48
|
+
varValues = varValues.map(val => val.slice(4, -1));
|
49
|
+
return [...(valuesBeforeFirstVar.length > 0 ? valuesBeforeFirstVar.map(val => composeVars(...varValues, val)) : composeVars(...varValues)), ...valuesAfterLastVar];
|
50
|
+
}
|
51
|
+
function composeVars() {
|
52
|
+
for (var _len = arguments.length, vars = new Array(_len), _key = 0; _key < _len; _key++) {
|
53
|
+
vars[_key] = arguments[_key];
|
54
|
+
}
|
55
|
+
const [first, ...rest] = vars;
|
56
|
+
if (rest.length > 0) {
|
57
|
+
return `var(${first},${composeVars(...rest)})`;
|
58
|
+
} else if (first.startsWith('--')) {
|
59
|
+
return `var(${first})`;
|
60
|
+
} else {
|
61
|
+
return first;
|
62
|
+
}
|
31
63
|
}
|
@@ -16,8 +16,12 @@ import type { TRawValue, StyleRule, StyleXOptions } from './common-types';
|
|
16
16
|
// Hashes to get a className
|
17
17
|
// Returns the final key, className a CSS Rule
|
18
18
|
declare export function convertStyleToClassName(
|
19
|
-
objEntry: [string, TRawValue]
|
19
|
+
objEntry: $ReadOnly<[string, TRawValue]>,
|
20
20
|
pseudos: $ReadOnlyArray<string>,
|
21
21
|
atRules: $ReadOnlyArray<string>,
|
22
22
|
options: StyleXOptions,
|
23
23
|
): StyleRule;
|
24
|
+
|
25
|
+
declare export default function variableFallbacks(
|
26
|
+
values: $ReadOnlyArray<string>,
|
27
|
+
): Array<string>;
|
package/lib/messages.d.ts
CHANGED
@@ -39,3 +39,4 @@ export declare const NO_PROJECT_ROOT_DIRECTORY: 'The project root directory `roo
|
|
39
39
|
export declare const NON_EXPORT_NAMED_DECLARATION: 'The return value of stylex.defineVars() must be bound to a named export.';
|
40
40
|
export declare const ANONYMOUS_THEME: 'stylex.createTheme() must be bound to a named constant.';
|
41
41
|
export declare const ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS: 'Only named parameters are allowed in Dynamic Style functions. Destructuring, spreading or default values are not allowed.';
|
42
|
+
export declare const NON_CONTIGUOUS_VARS: 'All variables passed to `stylex.firstThatWorks` must be contiguous.';
|
package/lib/messages.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports.UNKNOWN_PROP_KEY = exports.UNKNOWN_NAMESPACE = exports.UNEXPECTED_ARGUMENT = exports.UNBOUND_STYLEX_CALL_VALUE = exports.ONLY_TOP_LEVEL_INCLUDES = exports.ONLY_TOP_LEVEL = exports.ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = exports.NO_PROJECT_ROOT_DIRECTORY = exports.NO_PARENT_PATH = exports.NO_CONDITIONAL_SHORTHAND = exports.NON_STATIC_VALUE = exports.NON_STATIC_KEYFRAME_VALUE = exports.NON_OBJECT_KEYFRAME = exports.NON_OBJECT_FOR_STYLEX_KEYFRAMES_CALL = exports.NON_OBJECT_FOR_STYLEX_CALL = exports.NON_EXPORT_NAMED_DECLARATION = exports.LOCAL_ONLY = exports.LINT_UNCLOSED_FUNCTION = exports.INVALID_SPREAD = exports.INVALID_PSEUDO_OR_AT_RULE = exports.INVALID_PSEUDO = exports.ILLEGAL_PROP_VALUE = exports.ILLEGAL_PROP_ARRAY_VALUE = exports.ILLEGAL_NESTED_PSEUDO = exports.ILLEGAL_NAMESPACE_VALUE = exports.ILLEGAL_NAMESPACE_TYPE = exports.ILLEGAL_ARG_LENGTH_FOR_KEYFRAMES = exports.ILLEGAL_ARGUMENT_LENGTH = exports.EXPECTED_FUNCTION_CALL = exports.ESCAPED_STYLEX_VALUE = exports.DUPLICATE_CONDITIONAL = exports.ANONYMOUS_THEME = void 0;
|
6
|
+
exports.UNKNOWN_PROP_KEY = exports.UNKNOWN_NAMESPACE = exports.UNEXPECTED_ARGUMENT = exports.UNBOUND_STYLEX_CALL_VALUE = exports.ONLY_TOP_LEVEL_INCLUDES = exports.ONLY_TOP_LEVEL = exports.ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = exports.NO_PROJECT_ROOT_DIRECTORY = exports.NO_PARENT_PATH = exports.NO_CONDITIONAL_SHORTHAND = exports.NON_STATIC_VALUE = exports.NON_STATIC_KEYFRAME_VALUE = exports.NON_OBJECT_KEYFRAME = exports.NON_OBJECT_FOR_STYLEX_KEYFRAMES_CALL = exports.NON_OBJECT_FOR_STYLEX_CALL = exports.NON_EXPORT_NAMED_DECLARATION = exports.NON_CONTIGUOUS_VARS = exports.LOCAL_ONLY = exports.LINT_UNCLOSED_FUNCTION = exports.INVALID_SPREAD = exports.INVALID_PSEUDO_OR_AT_RULE = exports.INVALID_PSEUDO = exports.ILLEGAL_PROP_VALUE = exports.ILLEGAL_PROP_ARRAY_VALUE = exports.ILLEGAL_NESTED_PSEUDO = exports.ILLEGAL_NAMESPACE_VALUE = exports.ILLEGAL_NAMESPACE_TYPE = exports.ILLEGAL_ARG_LENGTH_FOR_KEYFRAMES = exports.ILLEGAL_ARGUMENT_LENGTH = exports.EXPECTED_FUNCTION_CALL = exports.ESCAPED_STYLEX_VALUE = exports.DUPLICATE_CONDITIONAL = exports.ANONYMOUS_THEME = void 0;
|
7
7
|
const ILLEGAL_ARGUMENT_LENGTH = exports.ILLEGAL_ARGUMENT_LENGTH = 'stylex.create() should have 1 argument.';
|
8
8
|
const ILLEGAL_ARG_LENGTH_FOR_KEYFRAMES = exports.ILLEGAL_ARG_LENGTH_FOR_KEYFRAMES = 'stylex.keyframes() should have 1 argument.';
|
9
9
|
const NON_STATIC_VALUE = exports.NON_STATIC_VALUE = 'Only static values are allowed inside of a stylex.create() call.';
|
@@ -35,4 +35,5 @@ const DUPLICATE_CONDITIONAL = exports.DUPLICATE_CONDITIONAL = 'The same pseudo s
|
|
35
35
|
const NO_PROJECT_ROOT_DIRECTORY = exports.NO_PROJECT_ROOT_DIRECTORY = 'The project root directory `rootDir` is not configured.';
|
36
36
|
const NON_EXPORT_NAMED_DECLARATION = exports.NON_EXPORT_NAMED_DECLARATION = 'The return value of stylex.defineVars() must be bound to a named export.';
|
37
37
|
const ANONYMOUS_THEME = exports.ANONYMOUS_THEME = 'stylex.createTheme() must be bound to a named constant.';
|
38
|
-
const ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = exports.ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = 'Only named parameters are allowed in Dynamic Style functions. Destructuring, spreading or default values are not allowed.';
|
38
|
+
const ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = exports.ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS = 'Only named parameters are allowed in Dynamic Style functions. Destructuring, spreading or default values are not allowed.';
|
39
|
+
const NON_CONTIGUOUS_VARS = exports.NON_CONTIGUOUS_VARS = 'All variables passed to `stylex.firstThatWorks` must be contiguous.';
|
package/lib/messages.js.flow
CHANGED
@@ -42,3 +42,4 @@ declare export const NO_PROJECT_ROOT_DIRECTORY: 'The project root directory `roo
|
|
42
42
|
declare export const NON_EXPORT_NAMED_DECLARATION: 'The return value of stylex.defineVars() must be bound to a named export.';
|
43
43
|
declare export const ANONYMOUS_THEME: 'stylex.createTheme() must be bound to a named constant.';
|
44
44
|
declare export const ONLY_NAMED_PARAMETERS_IN_DYNAMIC_STYLE_FUNCTIONS: 'Only named parameters are allowed in Dynamic Style functions. Destructuring, spreading or default values are not allowed.';
|
45
|
+
declare export const NON_CONTIGUOUS_VARS: 'All variables passed to `stylex.firstThatWorks` must be contiguous.';
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.default = styleXCreateTheme;
|
7
7
|
var _hash = _interopRequireDefault(require("./hash"));
|
8
|
+
var _stylexVarsUtils = require("./stylex-vars-utils");
|
9
|
+
var _types = require("./types");
|
8
10
|
var _defaultOptions = require("./utils/default-options");
|
9
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
10
12
|
function styleXCreateTheme(themeVars, variables, options) {
|
@@ -17,48 +19,36 @@ function styleXCreateTheme(themeVars, variables, options) {
|
|
17
19
|
..._defaultOptions.defaultOptions,
|
18
20
|
...options
|
19
21
|
};
|
22
|
+
const rulesByAtRule = {};
|
20
23
|
const sortedKeys = Object.keys(variables).sort();
|
21
|
-
const
|
22
|
-
|
23
|
-
const
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if (atRules[key] == null) {
|
34
|
-
atRules[key] = [definedVarStringForAtRule];
|
35
|
-
} else {
|
36
|
-
atRules[key].push(definedVarStringForAtRule);
|
37
|
-
}
|
38
|
-
}
|
39
|
-
});
|
40
|
-
return definedVarString;
|
41
|
-
}
|
42
|
-
return varNameHash != null && typeof value !== 'object' ? `${varNameHash}:${value};` : '';
|
43
|
-
}).join('');
|
44
|
-
const sortedAtRules = Object.keys(atRules).sort();
|
45
|
-
const atRulesStringForHash = sortedAtRules.map(atRule => {
|
46
|
-
return `${atRule}{${atRules[atRule].sort().join('')}}`;
|
47
|
-
}).join('');
|
48
|
-
const overrideClassName = classNamePrefix + (0, _hash.default)(cssVariablesOverrideString + atRulesStringForHash);
|
49
|
-
const stylesToInject = {
|
50
|
-
[overrideClassName]: {
|
51
|
-
ltr: `.${overrideClassName}{${cssVariablesOverrideString}}`,
|
52
|
-
priority: 0.8,
|
53
|
-
rtl: undefined
|
54
|
-
}
|
55
|
-
};
|
24
|
+
for (const key of sortedKeys) {
|
25
|
+
const value = (0, _types.isCSSType)(variables[key]) ? variables[key].value : variables[key];
|
26
|
+
const nameHash = themeVars[key].slice(6, -1);
|
27
|
+
(0, _stylexVarsUtils.collectVarsByAtRule)(key, {
|
28
|
+
nameHash,
|
29
|
+
value
|
30
|
+
}, rulesByAtRule);
|
31
|
+
}
|
32
|
+
const sortedAtRules = Object.keys(rulesByAtRule).sort((a, b) => a === 'default' ? -1 : b === 'default' ? 1 : a.localeCompare(b));
|
33
|
+
const atRulesStringForHash = sortedAtRules.map(atRule => (0, _stylexVarsUtils.wrapWithAtRules)(rulesByAtRule[atRule].join(''), atRule)).join('');
|
34
|
+
const overrideClassName = classNamePrefix + (0, _hash.default)(atRulesStringForHash);
|
35
|
+
const stylesToInject = {};
|
56
36
|
for (const atRule of sortedAtRules) {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
37
|
+
const decls = rulesByAtRule[atRule].join('');
|
38
|
+
const rule = `.${overrideClassName}{${decls}}`;
|
39
|
+
if (atRule === 'default') {
|
40
|
+
stylesToInject[overrideClassName] = {
|
41
|
+
ltr: rule,
|
42
|
+
priority: 0.5,
|
43
|
+
rtl: null
|
44
|
+
};
|
45
|
+
} else {
|
46
|
+
stylesToInject[overrideClassName + '-' + (0, _hash.default)(atRule)] = {
|
47
|
+
ltr: (0, _stylexVarsUtils.wrapWithAtRules)(rule, atRule),
|
48
|
+
priority: 0.5 + 0.1 * (0, _stylexVarsUtils.priorityForAtRule)(atRule),
|
49
|
+
rtl: null
|
50
|
+
};
|
51
|
+
}
|
62
52
|
}
|
63
53
|
return [{
|
64
54
|
$$css: true,
|
@@ -8,13 +8,9 @@
|
|
8
8
|
*/
|
9
9
|
|
10
10
|
import type { InjectableStyle, StyleXOptions } from './common-types';
|
11
|
-
type VarsConfig
|
12
|
-
[$$Key$$: string]:
|
13
|
-
| string
|
14
|
-
| Readonly<{ default: string; [$$Key$$: string]: string }>;
|
15
|
-
}>;
|
11
|
+
import type { VarsConfig } from './stylex-vars-utils';
|
16
12
|
type VarsObject<Vars extends VarsConfig> = Readonly</**
|
17
|
-
* >
|
13
|
+
* > 14 | ...$ObjMapConst<Vars, string>,
|
18
14
|
* | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Unsupported feature: Translating "object types with complex spreads" is currently not supported.
|
19
15
|
**/
|
20
16
|
any>;
|
@@ -7,6 +7,8 @@ exports.default = styleXDefineVars;
|
|
7
7
|
var _hash = _interopRequireDefault(require("./hash"));
|
8
8
|
var _objectUtils = require("./utils/object-utils");
|
9
9
|
var _defaultOptions = require("./utils/default-options");
|
10
|
+
var _stylexVarsUtils = require("./stylex-vars-utils");
|
11
|
+
var _types = require("./types");
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
13
|
function styleXDefineVars(variables, options) {
|
12
14
|
const {
|
@@ -17,8 +19,20 @@ function styleXDefineVars(variables, options) {
|
|
17
19
|
...options
|
18
20
|
};
|
19
21
|
const themeNameHash = classNamePrefix + (0, _hash.default)(themeName);
|
22
|
+
const typedVariables = {};
|
20
23
|
const variablesMap = (0, _objectUtils.objMap)(variables, (value, key) => {
|
21
24
|
const nameHash = classNamePrefix + (0, _hash.default)(`${themeName}.${key}`);
|
25
|
+
if ((0, _types.isCSSType)(value)) {
|
26
|
+
const v = value;
|
27
|
+
typedVariables[nameHash] = {
|
28
|
+
initialValue: (0, _stylexVarsUtils.getDefaultValue)(v.value),
|
29
|
+
syntax: v.syntax
|
30
|
+
};
|
31
|
+
return {
|
32
|
+
nameHash,
|
33
|
+
value: v.value
|
34
|
+
};
|
35
|
+
}
|
22
36
|
return {
|
23
37
|
nameHash,
|
24
38
|
value
|
@@ -31,42 +45,47 @@ function styleXDefineVars(variables, options) {
|
|
31
45
|
return `var(--${nameHash})`;
|
32
46
|
});
|
33
47
|
const injectableStyles = constructCssVariablesString(variablesMap, themeNameHash);
|
48
|
+
const injectableTypes = (0, _objectUtils.objMap)(typedVariables, (_ref2, nameHash) => {
|
49
|
+
let {
|
50
|
+
initialValue: iv,
|
51
|
+
syntax
|
52
|
+
} = _ref2;
|
53
|
+
return {
|
54
|
+
ltr: `@property --${nameHash} { syntax: "${syntax}"; inherits: true;${iv != null ? ` initial-value: ${iv}` : ''} }`,
|
55
|
+
rtl: null,
|
56
|
+
priority: 0
|
57
|
+
};
|
58
|
+
});
|
34
59
|
return [{
|
35
60
|
...themeVariablesObject,
|
36
61
|
__themeName__: themeNameHash
|
37
|
-
},
|
62
|
+
}, {
|
63
|
+
...injectableTypes,
|
64
|
+
...injectableStyles
|
65
|
+
}];
|
38
66
|
}
|
39
67
|
function constructCssVariablesString(variables, themeNameHash) {
|
40
|
-
const
|
68
|
+
const rulesByAtRule = {};
|
41
69
|
for (const [key, {
|
42
70
|
nameHash,
|
43
71
|
value
|
44
|
-
}] of
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
const v = value;
|
50
|
-
for (const [key, value] of (0, _objectUtils.objEntries)(v)) {
|
51
|
-
ruleByAtRule[key] ??= [];
|
52
|
-
ruleByAtRule[key].push(`--${nameHash}:${value};`);
|
53
|
-
}
|
54
|
-
} else {
|
55
|
-
ruleByAtRule.default ??= [];
|
56
|
-
ruleByAtRule.default.push(`--${nameHash}:${value};`);
|
57
|
-
}
|
72
|
+
}] of Object.entries(variables)) {
|
73
|
+
(0, _stylexVarsUtils.collectVarsByAtRule)(key, {
|
74
|
+
nameHash,
|
75
|
+
value
|
76
|
+
}, rulesByAtRule);
|
58
77
|
}
|
59
78
|
const result = {};
|
60
|
-
for (const [
|
61
|
-
const suffix =
|
79
|
+
for (const [atRule, value] of Object.entries(rulesByAtRule)) {
|
80
|
+
const suffix = atRule === 'default' ? '' : `-${(0, _hash.default)(atRule)}`;
|
62
81
|
let ltr = `:root{${value.join('')}}`;
|
63
|
-
if (
|
64
|
-
ltr =
|
82
|
+
if (atRule !== 'default') {
|
83
|
+
ltr = (0, _stylexVarsUtils.wrapWithAtRules)(ltr, atRule);
|
65
84
|
}
|
66
85
|
result[themeNameHash + suffix] = {
|
67
86
|
ltr,
|
68
87
|
rtl: null,
|
69
|
-
priority:
|
88
|
+
priority: (0, _stylexVarsUtils.priorityForAtRule)(atRule) * 0.1
|
70
89
|
};
|
71
90
|
}
|
72
91
|
return result;
|
@@ -8,10 +8,7 @@
|
|
8
8
|
*/
|
9
9
|
|
10
10
|
import type { InjectableStyle, StyleXOptions } from './common-types';
|
11
|
-
|
12
|
-
type VarsConfig = $ReadOnly<{
|
13
|
-
[string]: string | $ReadOnly<{ default: string, [string]: string }>,
|
14
|
-
}>;
|
11
|
+
import type { VarsConfig } from './stylex-vars-utils';
|
15
12
|
|
16
13
|
type VarsObject<Vars: VarsConfig> = $ReadOnly<{
|
17
14
|
...$ObjMapConst<Vars, string>,
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
+
*
|
4
|
+
* This source code is licensed under the MIT license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
import type { CSSType } from './types';
|
11
|
+
export type VarsConfigValue =
|
12
|
+
| string
|
13
|
+
| Readonly<{ default: VarsConfigValue; [$$Key$$: string]: VarsConfigValue }>;
|
14
|
+
export type VarsConfig = Readonly<{
|
15
|
+
[$$Key$$: string]: VarsConfigValue | CSSType;
|
16
|
+
}>;
|
17
|
+
export declare function collectVarsByAtRule(
|
18
|
+
key: string,
|
19
|
+
$$PARAM_1$$: { readonly nameHash: string; readonly value: VarsConfigValue },
|
20
|
+
collection: { [$$Key$$: string]: Array<string> },
|
21
|
+
atRules: Array<string>,
|
22
|
+
): void;
|
23
|
+
export declare function wrapWithAtRules(ltr: string, atRule: string): string;
|
24
|
+
export declare function priorityForAtRule(atRule: string): number;
|
25
|
+
export declare function getDefaultValue(
|
26
|
+
value: VarsConfigValue,
|
27
|
+
): null | undefined | string;
|
@@ -0,0 +1,69 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.collectVarsByAtRule = collectVarsByAtRule;
|
7
|
+
exports.getDefaultValue = getDefaultValue;
|
8
|
+
exports.priorityForAtRule = priorityForAtRule;
|
9
|
+
exports.wrapWithAtRules = wrapWithAtRules;
|
10
|
+
const SPLIT_TOKEN = '__$$__';
|
11
|
+
function collectVarsByAtRule(key, _ref) {
|
12
|
+
let {
|
13
|
+
nameHash,
|
14
|
+
value
|
15
|
+
} = _ref;
|
16
|
+
let collection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
17
|
+
let atRules = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
18
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
19
|
+
const val = typeof value === 'number' ? value.toString() : value;
|
20
|
+
const key = atRules.length === 0 ? 'default' : [...atRules].sort().join(SPLIT_TOKEN);
|
21
|
+
collection[key] ??= [];
|
22
|
+
collection[key].push(`--${nameHash}:${val};`);
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
if (value === null) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
if (Array.isArray(value)) {
|
29
|
+
throw new Error('Array is not supported in stylex.defineVars');
|
30
|
+
}
|
31
|
+
if (typeof value === 'object') {
|
32
|
+
if (value.default === undefined) {
|
33
|
+
throw new Error('Default value is not defined for ' + key + ' variable.');
|
34
|
+
}
|
35
|
+
for (const atRule of Object.keys(value)) {
|
36
|
+
collectVarsByAtRule(key, {
|
37
|
+
nameHash,
|
38
|
+
value: value[atRule]
|
39
|
+
}, collection, atRule === 'default' ? atRules : [...atRules, atRule]);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
function wrapWithAtRules(ltr, atRule) {
|
44
|
+
return atRule.split(SPLIT_TOKEN).reduce((acc, atRule) => `${atRule}{${acc}}`, ltr);
|
45
|
+
}
|
46
|
+
function priorityForAtRule(atRule) {
|
47
|
+
if (atRule === 'default') {
|
48
|
+
return 0;
|
49
|
+
}
|
50
|
+
return atRule.split(SPLIT_TOKEN).length;
|
51
|
+
}
|
52
|
+
function getDefaultValue(value) {
|
53
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
54
|
+
return value.toString();
|
55
|
+
}
|
56
|
+
if (value == null) {
|
57
|
+
return null;
|
58
|
+
}
|
59
|
+
if (Array.isArray(value)) {
|
60
|
+
throw new Error('Array is not supported in stylex.defineVars');
|
61
|
+
}
|
62
|
+
if (typeof value === 'object') {
|
63
|
+
if (value.default === undefined) {
|
64
|
+
throw new Error('Default value is not defined for variable.');
|
65
|
+
}
|
66
|
+
return getDefaultValue(value.default);
|
67
|
+
}
|
68
|
+
throw new Error('Invalid value in stylex.defineVars');
|
69
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
|
+
*
|
4
|
+
* This source code is licensed under the MIT license found in the
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
6
|
+
*
|
7
|
+
* @flow strict
|
8
|
+
*/
|
9
|
+
|
10
|
+
import type { CSSType } from './types';
|
11
|
+
|
12
|
+
export type VarsConfigValue =
|
13
|
+
| string
|
14
|
+
| $ReadOnly<{ default: VarsConfigValue, [string]: VarsConfigValue }>;
|
15
|
+
|
16
|
+
export type VarsConfig = $ReadOnly<{
|
17
|
+
[string]: VarsConfigValue | CSSType<>,
|
18
|
+
}>;
|
19
|
+
|
20
|
+
declare export function collectVarsByAtRule(
|
21
|
+
key: string,
|
22
|
+
{ +nameHash: string, +value: VarsConfigValue },
|
23
|
+
collection: { [string]: Array<string> },
|
24
|
+
atRules: Array<string>,
|
25
|
+
): void;
|
26
|
+
|
27
|
+
declare export function wrapWithAtRules(ltr: string, atRule: string): string;
|
28
|
+
|
29
|
+
declare export function priorityForAtRule(atRule: string): number;
|
30
|
+
|
31
|
+
declare export function getDefaultValue(value: VarsConfigValue): ?string;
|