@stylexjs/shared 0.1.0-beta.6 → 0.2.0-beta.8

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.
@@ -0,0 +1,5 @@
1
+ export const BANNED_PROPERTIES: { [key: string]: string };
2
+ export const expandedKeys: $ReadOnlyArray<string>;
3
+ export default function flatMapExpandedShorthands<T>(
4
+ objEntry: [string, T]
5
+ ): Array<[string, T]>;
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.BANNED_PROPERTIES = void 0;
6
7
  exports.default = flatMapExpandedShorthands;
8
+ exports.expandedKeys = void 0;
7
9
  var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
8
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
11
  /**
@@ -65,70 +67,236 @@ function splitValue(str) {
65
67
 
66
68
  /**
67
69
  * Shorthand properties:
68
- * - [x] all - Should be banned
69
- * - [ ] animation
70
- * - [ ] background
71
- * - [-] border
72
- * - [x] border-block-end
73
- * - [x] border-block-start
74
- * - [ ] border-bottom
75
- * - [x] border-color
76
- * - [x] border-image
77
- * - [x] border-inline-end
78
- * - [x] border-inline-start
79
- * - [ ] border-left
70
+ * - [!] all - BANNED
71
+ * - [!] animation - BANNED
72
+ * - [!] background - BANNED
73
+ * - [x] border - Expanded to border-{direction}. Not to border-*-(width|style|color).
74
+ * This is to limit the number of atoms to 4 instead of 12.
75
+ * - [o] border-top - Only the shorthand is allowed.
76
+ * - [o] border-end - Only the shorthand is allowed.
77
+ * - [o] border-bottom - Only the shorthand is allowed.
78
+ * - [o] border-start - Only the shorthand is allowed.
79
+ * - [!] border-left - BANNED
80
+ * - [!] border-right
81
+ * - [!] border-*-width - BANNED
82
+ * - [!] border-*-style - BANNED
83
+ * - [!] border-*-color - BANNED
84
+ * - [ ] border-block-end
85
+ * - [ ] border-block-start
86
+ * - [ ] border-inline-start
87
+ * - [ ] border-inline-end
88
+ * - [!] border-image - BANNED
80
89
  * - [x] border-radius
81
- * - [ ] border-right
82
- * - [x] border-style
83
- * - [ ] border-top
84
- * - [x] border-width
85
- * - [ ] column-rule
86
- * - [ ] columns
87
- * - [ ] flex
88
- * - [ ] flex-flow
89
- * - [ ] font
90
- * - [ ] gap
91
- * - [ ] grid
92
- * - [ ] grid-area
93
- * - [ ] grid-column
94
- * - [ ] grid-row
95
- * - [ ] grid-template
96
- * - [ ] list-style
90
+ * - [o] column-rule - Only the shorthand is allowed.
91
+ * - [!] columns - BANNED
92
+ * - [!] flex - BANNED
93
+ * - [!] flex-flow - BANNED
94
+ * - [!] font - BANNED
95
+ * - [x] gap
96
+ * - [!] grid - BANNED
97
+ * - [!] grid-area - BANNED
98
+ * - [!] grid-column - BANNED
99
+ * - [!] grid-row - BANNED
100
+ * - [!] grid-template - BANNED
101
+ * - [!] grid-template-areas - BANNED
102
+ *
103
+ * - [o] list-style - Only the shorthand is allowed.
97
104
  * - [x] margin
98
- * - [ ] mask
99
- * - [ ] offset
100
- * - [ ] outline
105
+ * - [o] mask - Only the shorthand is allowed.
106
+ * - [o] offset - Only the shorthand is allowed.
107
+ * - [o] outline - Only the shorthand is allowed.
101
108
  * - [x] overflow
102
109
  * - [x] padding
103
- * - [ ] place-content
104
- * - [ ] place-items
105
- * - [ ] place-self
106
- * - [ ] scroll-margin
107
- * - [ ] scroll-padding
108
- * - [ ] text-decoration
109
- * - [ ] text-emphasis
110
- * - [ ] transition
110
+ * - [x] place-content
111
+ * - [x] place-items
112
+ * - [x] place-self
113
+ * - [X] scroll-margin
114
+ * - [x] scroll-padding
115
+ * - [o] text-decoration - Only the shorthand is allowed.
116
+ * - [o] text-emphasis - Only the shorthand is allowed.
117
+ * - [!] transition - BANNED
111
118
  */
112
119
 
120
+ const BANNED_PROPERTIES = {
121
+ all: '`all` is not supported. Use individual properties instead.',
122
+ animation: '`animation` is not supported. Use individual properties like `animationName`, `animationDuration`, etc. instead.',
123
+ background: '`background` is not supported. Use individual properties like `backgroundImage`, `backgroundPosition`, etc. instead.',
124
+ borderColor: '`borderColor` is not supported. Use `border`, `borderTop`, `borderEnd`, `borderBottom` or `borderStart` instead.',
125
+ borderStyle: '`borderStyle` is not supported. Use `border`, `borderTop`, `borderEnd`, `borderBottom` or `borderStart` instead.',
126
+ borderWidth: '`borderWidth` is not supported. Use `border`, `borderTop`, `borderEnd`, `borderBottom` or `borderStart` instead.',
127
+ borderTopColor: '`borderTopColor` is not supported. Use `borderTop` instead.',
128
+ borderTopStyle: '`borderTopStyle` is not supported. Use `borderTop` instead.',
129
+ borderTopWidth: '`borderTopWidth` is not supported. Use `borderTop` instead.',
130
+ borderEndColor: '`borderEndColor` is not supported. Use `borderEnd` instead.',
131
+ borderEndStyle: '`borderEndStyle` is not supported. Use `borderEnd` instead.',
132
+ borderEndWidth: '`borderEndWidth` is not supported. Use `borderEnd` instead.',
133
+ borderBottomColor: '`borderBottomColor` is not supported. Use `borderBottom` instead.',
134
+ borderBottomStyle: '`borderBottomStyle` is not supported. Use `borderBottom` instead.',
135
+ borderBottomWidth: '`borderBottomWidth` is not supported. Use `borderBottom` instead.',
136
+ borderStartColor: '`borderStartColor` is not supported. Use `borderStart` instead.',
137
+ borderStartStyle: '`borderStartStyle` is not supported. Use `borderStart` instead.',
138
+ borderStartWidth: '`borderStartWidth` is not supported. Use `borderStart` instead.',
139
+ borderBlockStartColor: '`borderBlockStartColor` is not supported. Use `borderTop` instead.',
140
+ borderBlockStartStyle: '`borderBlockStartStyle` is not supported. Use `borderTop` instead.',
141
+ borderBlockStartWidth: '`borderBlockStartWidth` is not supported. Use `borderTop` instead.',
142
+ borderBlockEndColor: '`borderBlockEndColor` is not supported. Use `borderBottom` instead.',
143
+ borderBlockEndStyle: '`borderBlockEndStyle` is not supported. Use `borderBottom` instead.',
144
+ borderBlockEndWidth: '`borderBlockEndWidth` is not supported. Use `borderBottom` instead.',
145
+ borderInlineStartColor: '`borderInlineStartColor` is not supported. Use `borderStart` instead.',
146
+ borderInlineStartStyle: '`borderInlineStartStyle` is not supported. Use `borderStart` instead.',
147
+ borderInlineStartWidth: '`borderInlineStartWidth` is not supported. Use `borderStart` instead.',
148
+ borderInlineEndColor: '`borderInlineEndColor` is not supported. Use `borderEnd` instead.',
149
+ borderInlineEndStyle: '`borderInlineEndStyle` is not supported. Use `borderEnd` instead.',
150
+ borderInlineEndWidth: '`borderInlineEndWidth` is not supported. Use `borderEnd` instead.',
151
+ borderLeft: '`borderLeft` is not supported. Use `borderStart` instead.',
152
+ borderLeftColor: '`borderLeftColor` is not supported. Use `borderStart` instead.',
153
+ borderLeftStyle: '`borderLeftStyle` is not supported. Use `borderStart` instead.',
154
+ borderLeftWidth: '`borderLeftWidth` is not supported. Use `borderStart` instead.',
155
+ borderRight: '`borderRight` is not supported. Use `borderEnd` instead.',
156
+ borderRightColor: '`borderRightColor` is not supported. Use `borderEnd` instead.',
157
+ borderRightStyle: '`borderRightStyle` is not supported. Use `borderEnd` instead.',
158
+ borderRightWidth: '`borderRightWidth` is not supported. Use `borderEnd` instead.',
159
+ borderTopLeftRadius: '`borderTopLeftRadius` is not supported. Use `borderTopStartRadius` instead.',
160
+ borderTopRightRadius: '`borderTopRightRadius` is not supported. Use `borderTopEndRadius` instead.',
161
+ borderBottomLeftRadius: '`borderBottomLeftRadius` is not supported. Use `borderBottomStartRadius` instead.',
162
+ borderBottomRightRadius: '`borderBottomRightRadius` is not supported. Use `borderBottomEndRadius` instead.',
163
+ borderImageSource: '`borderImageSource` is not supported. Use `borderImage` instead.',
164
+ borderImageSlice: '`borderImageSlice` is not supported. Use `borderImage` instead.',
165
+ borderImageWidth: '`borderImageWidth` is not supported. Use `borderImage` instead.',
166
+ borderImageOutset: '`borderImageOutset` is not supported. Use `borderImage` instead.',
167
+ borderImageRepeat: '`borderImageRepeat` is not supported. Use `borderImage` instead.',
168
+ marginLeft: '`marginLeft` is not supported. Use `marginStart` instead.',
169
+ marginRight: '`marginRight` is not supported. Use `marginEnd` instead.',
170
+ paddingLeft: '`paddingLeft` is not supported. Use `paddingStart` instead.',
171
+ paddingRight: '`paddingRight` is not supported. Use `paddingEnd` instead.',
172
+ columnRuleWidth: '`columnRuleWidth` is not supported. Use `columnRule` instead.',
173
+ columnRuleStyle: '`columnRuleStyle` is not supported. Use `columnRule` instead.',
174
+ columnRuleColor: '`columnRuleColor` is not supported. Use `columnRule` instead.',
175
+ columns: '`columns` is not supported. Use `columnCount` and `columnWidth` instead.',
176
+ flex: '`flex` is not supported. Use `flexGrow`, `flexShrink`, and `flexBasis` instead.',
177
+ flexFlow: '`flexFlow` is not supported. Use `flexDirection` and `flexWrap` instead.',
178
+ font: '`font` is not supported. Use individual properties like `fontFamily`, `fontSize`, etc. instead.',
179
+ grid: '`grid` is not supported. Use individual properties like `gridTemplateColumns`, `gridTemplateRows`, etc. instead.',
180
+ gridColumn: '`gridColumn` is not supported. Use `gridColumnStart` and `gridColumnEnd` instead.',
181
+ gridRow: '`gridRow` is not supported. Use `gridRowStart` and `gridRowEnd` instead.',
182
+ gridArea: '`gridArea` is not supported. Use `gridRowStart`, `gridColumnStart`, `gridRowEnd`, and `gridColumnEnd` instead.',
183
+ gridTemplate: '`gridTemplate` is not supported. Use individual properties like `gridTemplateColumns`, `gridTemplateRows`, etc. instead.',
184
+ gridTemplateAreas: '`gridTemplateAreas` is not supported. Use `gridTemplateRows` and `gridTemplateColumns` instead.',
185
+ listStyleImage: '`listStyleImage` is not supported. Use `listStyle` instead.',
186
+ listStylePosition: '`listStylePosition` is not supported. Use `listStyle` instead.',
187
+ listStyleType: '`listStyleType` is not supported. Use `listStyle` instead.',
188
+ maskClip: '`maskClip` is not supported. Use `mask` instead.',
189
+ maskComposite: '`maskComposite` is not supported. Use `mask` instead.',
190
+ maskImage: '`maskImage` is not supported. Use `mask` instead.',
191
+ maskMode: '`maskMode` is not supported. Use `mask` instead.',
192
+ maskOrigin: '`maskOrigin` is not supported. Use `mask` instead.',
193
+ maskPosition: '`maskPosition` is not supported. Use `mask` instead.',
194
+ maskRepeat: '`maskRepeat` is not supported. Use `mask` instead.',
195
+ maskSize: '`maskSize` is not supported. Use `mask` instead.',
196
+ offsetAnchor: '`offsetAnchor` is not supported. Use `offset` instead.',
197
+ offsetDistance: '`offsetDistance` is not supported. Use `offset` instead.',
198
+ offsetPath: '`offsetPath` is not supported. Use `offset` instead.',
199
+ offsetPosition: '`offsetPosition` is not supported. Use `offset` instead.',
200
+ offsetRotate: '`offsetRotate` is not supported. Use `offset` instead.',
201
+ outlineColor: '`outlineColor` is not supported. Use `outline` instead.',
202
+ outlineStyle: '`outlineStyle` is not supported. Use `outline` instead.',
203
+ outlineWidth: '`outlineWidth` is not supported. Use `outline` instead.',
204
+ textDecorationColor: '`textDecorationColor` is not supported. Use `textDecoration` instead.',
205
+ textDecorationLine: '`textDecorationLine` is not supported. Use `textDecoration` instead.',
206
+ textDecorationStyle: '`textDecorationStyle` is not supported. Use `textDecoration` instead.',
207
+ textDecorationThickness: '`textDecorationThickness` is not supported. Use `textDecoration` instead.',
208
+ textEmphasisColor: '`textEmphasisColor` is not supported. Use `textEmphasis` instead.',
209
+ textEmphasisStyle: '`textEmphasisStyle` is not supported. Use `textEmphasis` instead.',
210
+ transition: '`transition` is not supported. Use individual properties like `transitionProperty`, `transitionDuration`, etc. instead.'
211
+ };
212
+ exports.BANNED_PROPERTIES = BANNED_PROPERTIES;
113
213
  const expansions = {
114
- // ...aliases,
115
214
  border: rawValue => {
116
215
  return [['borderTop', rawValue], ['borderEnd', rawValue], ['borderBottom', rawValue], ['borderStart', rawValue]];
117
216
  },
118
- /*
119
- // Add this later, as this will be a breaking change
120
- border: (rawValue: string) => {
121
- if (typeof rawValue === 'number') {
122
- return expansions.borderWidth(rawValue);
123
- }
124
- const [width, style, color] = splitValue(rawValue);
125
- return [
126
- ...expansions.borderWidth(width),
127
- ...expansions.borderStyle(style),
128
- ...expansions.borderColor(color),
129
- ];
130
- }
131
- */
217
+ // border: (rawValue: string) => {
218
+ // if (typeof rawValue === 'number') {
219
+ // return expansions.borderWidth(rawValue);
220
+ // }
221
+ // const [width, style, color, more] = splitValue(rawValue);
222
+ // if (more != null) {
223
+ // throw new Error(messages.MULTIPLE_DIRECTIONS_IN_SHORTHAND);
224
+ // }
225
+ // if (style == null || color == null) {
226
+ // throw new Error(
227
+ // 'Border shorthand requires at least 2 values - width, style and color.'
228
+ // );
229
+ // }
230
+ // return [
231
+ // ...expansions.borderWidth(width),
232
+ // ...expansions.borderStyle(style),
233
+ // ...expansions.borderColor(color),
234
+ // ];
235
+ // },
236
+ // borderTop: (rawValue: string) => {
237
+ // if (typeof rawValue === 'number') {
238
+ // return [['borderTopWidth', rawValue + 'px']];
239
+ // }
240
+ // const [width, style, color] = splitValue(rawValue);
241
+ // if (style == null || color == null) {
242
+ // throw new Error(
243
+ // 'BorderTop shorthand requires at least 2 values - width, style and color.'
244
+ // );
245
+ // }
246
+ // return [
247
+ // ['borderTopWidth', width],
248
+ // ['borderTopStyle', style],
249
+ // ['borderTopColor', color],
250
+ // ];
251
+ // },
252
+ // borderEnd: (rawValue: string) => {
253
+ // if (typeof rawValue === 'number') {
254
+ // return [['borderEndWidth', rawValue + 'px']];
255
+ // }
256
+ // const [width, style, color] = splitValue(rawValue);
257
+ // if (style == null || color == null) {
258
+ // throw new Error(
259
+ // 'BorderEnd shorthand requires at least 2 values - width, style and color.'
260
+ // );
261
+ // }
262
+ // return [
263
+ // ['borderEndWidth', width],
264
+ // ['borderEndStyle', style],
265
+ // ['borderEndColor', color],
266
+ // ];
267
+ // },
268
+ // borderBottom: (rawValue: string) => {
269
+ // if (typeof rawValue === 'number') {
270
+ // return [['borderBottomWidth', rawValue + 'px']];
271
+ // }
272
+ // const [width, style, color] = splitValue(rawValue);
273
+ // if (style == null || color == null) {
274
+ // throw new Error(
275
+ // 'BorderBottom shorthand requires at least 2 values - width, style and color.'
276
+ // );
277
+ // }
278
+ // return [
279
+ // ['borderBottomWidth', width],
280
+ // ['borderBottomStyle', style],
281
+ // ['borderBottomColor', color],
282
+ // ];
283
+ // },
284
+ // borderStart: (rawValue: string) => {
285
+ // if (typeof rawValue === 'number') {
286
+ // return [['borderStartWidth', rawValue + 'px']];
287
+ // }
288
+ // const [width, style, color] = splitValue(rawValue);
289
+ // if (style == null || color == null) {
290
+ // throw new Error(
291
+ // 'BorderStart shorthand requires at least 2 values - width, style and color.'
292
+ // );
293
+ // }
294
+ // return [
295
+ // ['borderStartWidth', width],
296
+ // ['borderStartStyle', style],
297
+ // ['borderStartColor', color],
298
+ // ];
299
+ // },
132
300
  borderColor: rawValue => {
133
301
  const [top, right = top, bottom = top, left = right] = splitValue(rawValue);
134
302
  return [['borderTopColor', top], ['borderEndColor', right], ['borderBottomColor', bottom], ['borderStartColor', left]];
@@ -175,8 +343,37 @@ const expansions = {
175
343
  },
176
344
  paddingVertical: rawValue => {
177
345
  return [['paddingTop', rawValue], ['paddingBottom', rawValue]];
346
+ },
347
+ gap: rawValue => {
348
+ if (typeof rawValue === 'number') {
349
+ return [['rowGap', rawValue], ['columnGap', rawValue]];
350
+ }
351
+ const [row, column = row] = splitValue(rawValue);
352
+ return [['rowGap', row], ['columnGap', column]];
353
+ },
354
+ placeContent: rawValue => {
355
+ const [align, justify = align] = splitValue(rawValue);
356
+ return [['alignContent', align], ['justifyContent', justify]];
357
+ },
358
+ placeItems: rawValue => {
359
+ const [align, justify = align] = splitValue(rawValue);
360
+ return [['alignItems', align], ['justifyItems', justify]];
361
+ },
362
+ placeSelf: rawValue => {
363
+ const [align, justify = align] = splitValue(rawValue);
364
+ return [['alignSelf', align], ['justifySelf', justify]];
365
+ },
366
+ scrollMargin: rawValue => {
367
+ const [top, right = top, bottom = top, left = right] = typeof rawValue === 'number' ? [rawValue] : splitValue(rawValue);
368
+ return [['scrollMarginTop', top], ['scrollMarginEnd', right], ['scrollMarginBottom', bottom], ['scrollMarginStart', left]];
369
+ },
370
+ scrollPadding: rawValue => {
371
+ const [top, right = top, bottom = top, left = right] = typeof rawValue === 'number' ? [rawValue] : splitValue(rawValue);
372
+ return [['scrollPaddingTop', top], ['scrollPaddingEnd', right], ['scrollPaddingBottom', bottom], ['scrollPaddingStart', left]];
178
373
  }
179
374
  };
375
+ const expandedKeys = [...Object.keys(expansions), ...Object.keys(BANNED_PROPERTIES)];
376
+ exports.expandedKeys = expandedKeys;
180
377
  function flatMapExpandedShorthands(objEntry) {
181
378
  const [key, value] = objEntry;
182
379
  const expansion = expansions[key];
package/lib/index.d.ts CHANGED
@@ -25,10 +25,12 @@ export type InjectableStyle = {
25
25
  export type StyleRule = readonly [string, string, InjectableStyle];
26
26
 
27
27
  export type CompiledStyles = {
28
- readonly [key: string]: string | { readonly [key: string]: string };
28
+ readonly [key: string]: string | null;
29
+ readonly $$css: true;
29
30
  };
30
31
  export type MutableCompiledStyles = {
31
- [key: string]: string | { [key: string]: string };
32
+ [key: string]: string | null;
33
+ $$css: true;
32
34
  };
33
35
 
34
36
  export type CompiledNamespaces = { readonly [key: string]: CompiledStyles };
@@ -62,6 +64,7 @@ export type StyleXOptions = {
62
64
  stylexSheetName?: string | undefined;
63
65
  classNamePrefix: string;
64
66
  definedStylexCSSVariables?: { [key: string]: any };
67
+ allowUnsafeProperties: boolean;
65
68
  [key: string]: any;
66
69
  };
67
70
 
package/lib/messages.js CHANGED
@@ -13,7 +13,7 @@
13
13
  Object.defineProperty(exports, "__esModule", {
14
14
  value: true
15
15
  });
16
- exports.UNKNOWN_PROP_KEY = exports.UNKNOWN_NAMESPACE = exports.UNEXPECTED_ARGUMENT = exports.UNBOUND_STYLEX_CALL_VALUE = exports.ONLY_TOP_LEVEL = exports.NO_PARENT_PATH = exports.NON_STATIC_VALUE = exports.NON_OBJECT_FOR_STYLEX_CALL = exports.LOCAL_ONLY = exports.LINT_UNCLOSED_FUNCTION = exports.INVALID_SPREAD = 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_ARGUMENT_LENGTH = exports.EXPECTED_FUNCTION_CALL = exports.ESCAPED_STYLEX_VALUE = void 0;
16
+ exports.UNKNOWN_PROP_KEY = exports.UNKNOWN_NAMESPACE = exports.UNEXPECTED_ARGUMENT = exports.UNBOUND_STYLEX_CALL_VALUE = exports.ONLY_TOP_LEVEL = exports.NO_PARENT_PATH = exports.NO_CONDITIONAL_SHORTHAND = exports.NON_STATIC_VALUE = exports.NON_OBJECT_FOR_STYLEX_CALL = exports.MULTIPLE_DIRECTIONS_IN_SHORTHAND = exports.LOCAL_ONLY = exports.LINT_UNCLOSED_FUNCTION = exports.INVALID_SPREAD = 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_ARGUMENT_LENGTH = exports.EXPECTED_FUNCTION_CALL = exports.ESCAPED_STYLEX_VALUE = void 0;
17
17
  const ILLEGAL_ARGUMENT_LENGTH = 'stylex() should have 1 argument.';
18
18
  exports.ILLEGAL_ARGUMENT_LENGTH = ILLEGAL_ARGUMENT_LENGTH;
19
19
  const NON_STATIC_VALUE = 'Only static values are allowed inside of a stylex.create() call.';
@@ -30,6 +30,8 @@ const UNKNOWN_PROP_KEY = 'Unknown property key';
30
30
  exports.UNKNOWN_PROP_KEY = UNKNOWN_PROP_KEY;
31
31
  const INVALID_PSEUDO = 'Invalid pseudo selector, not on the whitelist.';
32
32
  exports.INVALID_PSEUDO = INVALID_PSEUDO;
33
+ const NO_CONDITIONAL_SHORTHAND = 'You cannot use conditional style values for a shorthand property.';
34
+ exports.NO_CONDITIONAL_SHORTHAND = NO_CONDITIONAL_SHORTHAND;
33
35
  const ILLEGAL_NAMESPACE_TYPE = 'Only a string literal namespace is allowed here.';
34
36
  exports.ILLEGAL_NAMESPACE_TYPE = ILLEGAL_NAMESPACE_TYPE;
35
37
  const UNKNOWN_NAMESPACE = 'Unknown namespace';
@@ -53,4 +55,6 @@ exports.UNEXPECTED_ARGUMENT = UNEXPECTED_ARGUMENT;
53
55
  const EXPECTED_FUNCTION_CALL = 'Expected a simple function call but found something else.';
54
56
  exports.EXPECTED_FUNCTION_CALL = EXPECTED_FUNCTION_CALL;
55
57
  const NO_PARENT_PATH = 'Unexpected AST node without a parent path.';
56
- exports.NO_PARENT_PATH = NO_PARENT_PATH;
58
+ exports.NO_PARENT_PATH = NO_PARENT_PATH;
59
+ const MULTIPLE_DIRECTIONS_IN_SHORTHAND = 'Shorthand properties cannot contain different values for different directions.';
60
+ exports.MULTIPLE_DIRECTIONS_IN_SHORTHAND = MULTIPLE_DIRECTIONS_IN_SHORTHAND;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = styleXCreateSet;
7
7
  var _convertToClassName = _interopRequireDefault(require("./convert-to-className"));
8
- var _expandShorthands = _interopRequireDefault(require("./expand-shorthands"));
8
+ var _expandShorthands = _interopRequireWildcard(require("./expand-shorthands"));
9
9
  var _objectUtils = require("./utils/object-utils");
10
10
  var messages = _interopRequireWildcard(require("./messages"));
11
11
  var _stylexInclude = require("./stylex-include");
@@ -41,7 +41,11 @@ function styleXCreateSet(namespaces) {
41
41
  throw new Error(messages.ILLEGAL_NAMESPACE_VALUE);
42
42
  }
43
43
  const [resolvedNamespace, injected] = styleXCreateNamespace(namespace, options);
44
- resolvedNamespaces[namespaceName] = (0, _objectUtils.flattenObject)(resolvedNamespace);
44
+ const compiledNamespace = (0, _objectUtils.flattenObject)(resolvedNamespace);
45
+ resolvedNamespaces[namespaceName] = {
46
+ ...compiledNamespace,
47
+ $$css: true
48
+ };
45
49
  for (const cn of Object.keys(injected)) {
46
50
  if (injectedStyles[cn] == null) {
47
51
  injectedStyles[cn] = injected[cn];
@@ -77,7 +81,7 @@ function styleXCreateNamespace(style, options) {
77
81
  return [[key, value]];
78
82
  }
79
83
  if (value != null && typeof value === 'object' && !Array.isArray(value)) {
80
- if (!key.startsWith(':') && !key.startsWith('@')) {
84
+ if (!key.startsWith(':') && !key.startsWith('@') && _expandShorthands.expandedKeys.includes(key)) {
81
85
  throw new Error(messages.INVALID_PSEUDO);
82
86
  }
83
87
  return [[key, (0, _objectUtils.objFromEntries)((0, _objectUtils.objEntries)(value).flatMap(_ref2 => {
@@ -85,15 +89,21 @@ function styleXCreateNamespace(style, options) {
85
89
  if (innerValue != null && typeof innerValue === 'object' && !Array.isArray(innerValue)) {
86
90
  throw new Error(messages.ILLEGAL_NESTED_PSEUDO);
87
91
  }
92
+ if (!options.allowUnsafeProperties && _expandShorthands.BANNED_PROPERTIES[key]) {
93
+ throw new Error(_expandShorthands.BANNED_PROPERTIES[key]);
94
+ }
88
95
  return (0, _expandShorthands.default)([innerKey, innerValue]);
89
96
  }))]];
90
97
  } else {
91
- if (typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value)) {
98
+ if (value !== null && typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value)) {
92
99
  throw new Error(messages.ILLEGAL_PROP_VALUE);
93
100
  }
94
101
  if (Array.isArray(value) && value.some(val => typeof val === 'object')) {
95
102
  throw new Error(messages.ILLEGAL_PROP_ARRAY_VALUE);
96
103
  }
104
+ if (!options.allowUnsafeProperties && _expandShorthands.BANNED_PROPERTIES[key]) {
105
+ throw new Error(_expandShorthands.BANNED_PROPERTIES[key]);
106
+ }
97
107
  return (0, _expandShorthands.default)([key, value]);
98
108
  }
99
109
  });
@@ -109,18 +119,42 @@ function styleXCreateNamespace(style, options) {
109
119
  if (val instanceof _stylexInclude.IncludedStyles) {
110
120
  resolvedNamespace[key] = val;
111
121
  } else if (val != null && typeof val === 'object' && !Array.isArray(val)) {
112
- const pseudo = key;
113
- const innerObj = {};
114
- for (const [innerKey, innerVal] of (0, _objectUtils.objEntries)(val)) {
115
- const [updatedKey, className, cssRule] = (0, _convertToClassName.default)([innerKey, innerVal], pseudo, options);
116
- innerObj[updatedKey] = className;
117
- injectedStyles[updatedKey + pseudo] = [className, cssRule];
122
+ if (key.startsWith(':') || key.startsWith('@')) {
123
+ const pseudo = key;
124
+ const innerObj = {};
125
+ for (const [innerKey, innerVal] of (0, _objectUtils.objEntries)(val)) {
126
+ if (innerVal === null) {
127
+ innerObj[innerKey] = null;
128
+ } else {
129
+ const [updatedKey, className, cssRule] = (0, _convertToClassName.default)([innerKey, innerVal], pseudo, options);
130
+ innerObj[updatedKey] = className;
131
+ injectedStyles[updatedKey + pseudo] = [className, cssRule];
132
+ }
133
+ }
134
+ resolvedNamespace[key] = innerObj;
135
+ } else {
136
+ const propKey = key;
137
+ const classNames = [];
138
+ for (const [pseudo, innerVal] of (0, _objectUtils.objEntries)(val)) {
139
+ if (pseudo !== 'default' && !pseudo.startsWith(':') && !pseudo.startsWith('@')) {
140
+ throw new Error(messages.INVALID_PSEUDO);
141
+ }
142
+ if (innerVal !== null) {
143
+ const [updatedKey, className, cssRule] = (0, _convertToClassName.default)([propKey, innerVal], pseudo === 'default' ? undefined : pseudo, options);
144
+ injectedStyles[updatedKey + pseudo] = [className, cssRule];
145
+ classNames.push(className);
146
+ }
147
+ }
148
+ resolvedNamespace[key] = classNames.join(' ');
118
149
  }
119
- resolvedNamespace[key] = innerObj;
120
150
  } else {
121
- const [updatedKey, className, cssRule] = (0, _convertToClassName.default)([key, val], undefined, options);
122
- resolvedNamespace[updatedKey] = className;
123
- injectedStyles[updatedKey] = [className, cssRule];
151
+ if (val === null) {
152
+ resolvedNamespace[key] = null;
153
+ } else {
154
+ const [updatedKey, className, cssRule] = (0, _convertToClassName.default)([key, val], undefined, options);
155
+ resolvedNamespace[updatedKey] = className;
156
+ injectedStyles[updatedKey] = [className, cssRule];
157
+ }
124
158
  }
125
159
  }
126
160
  const finalInjectedStyles = (0, _objectUtils.objFromEntries)((0, _objectUtils.objValues)(injectedStyles));
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StylexValueBuilder = void 0;
7
+ exports.default = stylexDefaultValue;
8
+ var messages = _interopRequireWildcard(require("./messages"));
9
+ var _dashify = _interopRequireDefault(require("./utils/dashify"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
14
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
15
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
16
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
17
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
18
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
19
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
20
+ var _set = /*#__PURE__*/new WeakSet();
21
+ var _mediaWidths = /*#__PURE__*/new WeakMap();
22
+ var _mediaHeights = /*#__PURE__*/new WeakMap();
23
+ class StylexValueBuilder {
24
+ constructor(defaultValue) {
25
+ _classPrivateMethodInitSpec(this, _set);
26
+ _classPrivateFieldInitSpec(this, _mediaWidths, {
27
+ writable: true,
28
+ value: []
29
+ });
30
+ _classPrivateFieldInitSpec(this, _mediaHeights, {
31
+ writable: true,
32
+ value: []
33
+ });
34
+ this.default = defaultValue;
35
+ }
36
+ mediaWidth(_ref, value) {
37
+ let [min, max] = _ref;
38
+ if (_classPrivateFieldGet(this, _mediaWidths).some(_ref2 => {
39
+ let [m, M] = _ref2;
40
+ return m <= min && min < M || m < max && max <= M || min <= m && max >= M;
41
+ })) {
42
+ throw new Error(messages.OVERLAPPING_MEDIA_WIDTHS);
43
+ }
44
+ _classPrivateFieldGet(this, _mediaWidths).push([min, max]);
45
+ if (min > 0 && max < Infinity) {
46
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (min-width: ${min}px and max-width: ${max}px)`, value);
47
+ } else if (min === 0) {
48
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (max-width: ${max}px)`, value);
49
+ } else if (max === Infinity) {
50
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (min-width: ${min}px)`, value);
51
+ }
52
+ throw new Error(messages.INVALID_MEDIA_QUERY);
53
+ }
54
+ mediaHeight(_ref3, value) {
55
+ let [min, max] = _ref3;
56
+ if (_classPrivateFieldGet(this, _mediaHeights).some(_ref4 => {
57
+ let [m, M] = _ref4;
58
+ return m <= min && min < M || m < max && max <= M || min <= m && max >= M;
59
+ })) {
60
+ throw new Error(messages.OVERLAPPING_MEDIA_HEIGHTS);
61
+ }
62
+ _classPrivateFieldGet(this, _mediaHeights).push([min, max]);
63
+ if (min > 0 && max < Infinity) {
64
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (min-height: ${min}px and max-height: ${max}px)`, value);
65
+ } else if (min === 0) {
66
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (max-height: ${max}px)`, value);
67
+ } else if (max === Infinity) {
68
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media (min-height: ${min}px)`, value);
69
+ }
70
+ throw new Error(messages.INVALID_MEDIA_QUERY);
71
+ }
72
+
73
+ // mediaAspectRatio<TAddedValue>(
74
+ // [min, max]: [number, number],
75
+ // value: TAddedValue
76
+ // ): StylexValueBuilder<TValue | TAddedValue> {
77
+ // if (min > 0 && max < Infinity) {
78
+ // return this.#set(
79
+ // `@media (min-aspect-ratio: ${min} and max-aspect-ratio: $, })`,
80
+ // value
81
+ // );
82
+ // } else if (min === 0) {
83
+ // return this.#set(`@media (max-aspect-ratio: ${max})`, value);
84
+ // } else if (max === Infinity) {
85
+ // return this.#set(`@media (min-aspect-ratio: ${min})`, value);
86
+ // }
87
+ // throw new Error(messages.INVALID_MEDIA_QUERY);
88
+ // }
89
+
90
+ // mediaPortrait<TAddedValue>(
91
+ // value: TAddedValue
92
+ // ): StylexValueBuilder<TValue | TAddedValue> {
93
+ // return this.#set('@media (orientation: portrait)', value);
94
+ // }
95
+
96
+ // mediaLandscape<TAddedValue>(
97
+ // value: TAddedValue
98
+ // ): StylexValueBuilder<TValue | TAddedValue> {
99
+ // return this.#set('@media (orientation: landscape)', value);
100
+ // }
101
+
102
+ // mediaSRGBDisplay<TAddedValue>(
103
+ // value: TAddedValue
104
+ // ): StylexValueBuilder<TValue | TAddedValue> {
105
+ // return this.#set('@media (color-gamut: srgb)', value);
106
+ // }
107
+
108
+ // mediaP3Display<TAddedValue>(
109
+ // value: TAddedValue
110
+ // ): StylexValueBuilder<TValue | TAddedValue> {
111
+ // return this.#set('@media (color-gamut: p3)', value);
112
+ // }
113
+
114
+ // mediaRec2020Display<TAddedValue>(
115
+ // value: TAddedValue
116
+ // ): StylexValueBuilder<TValue | TAddedValue> {
117
+ // return this.#set('@media (color-gamut: rec2020)', value);
118
+ // }
119
+
120
+ // mediaIsFullscreen<TAddedValue>(
121
+ // value: TAddedValue
122
+ // ): StylexValueBuilder<TValue | TAddedValue> {
123
+ // return this.#set('@media (display-mode: fullscreen)', value);
124
+ // }
125
+
126
+ // These are confusing, so skipping them for now
127
+ // mediaIsStandalone
128
+ // mediaIsMinimalUI
129
+
130
+ // mediaSDRDisplay<TAddedValue>(
131
+ // value: TAddedValue
132
+ // ): StylexValueBuilder<TValue | TAddedValue> {
133
+ // return this.#set('@media (dynamic-range: standard)', value);
134
+ // }
135
+
136
+ // mediaHDRDisplay<TAddedValue>(
137
+ // value: TAddedValue
138
+ // ): StylexValueBuilder<TValue | TAddedValue> {
139
+ // return this.#set('@media (dynamic-range: high)', value);
140
+ // }
141
+
142
+ // mediaSupportsHDRVideo<TAddedValue>(
143
+ // value: TAddedValue
144
+ // ): StylexValueBuilder<TValue | TAddedValue> {
145
+ // return this.#set('@media (video-dynamic-range: high)', value);
146
+ // }
147
+
148
+ //<TAddedValue> mediaHasColor(value: TAddedValue): StylexValueBuilder<TValue | TAddedValue> {
149
+ // return this.#set('@media (color)', value);
150
+ // }
151
+
152
+ // primaryInputCanHover<TAddedValue>(
153
+ // value: TAddedValue
154
+ // ): StylexValueBuilder<TValue | TAddedValue> {
155
+ // return this.#set('@media (hover: hover)', value);
156
+ // }
157
+ // primaryInputCanNotHover<TAddedValue>(
158
+ // value: TAddedValue
159
+ // ): StylexValueBuilder<TValue | TAddedValue> {
160
+ // return this.#set('@media (hover: none)', value);
161
+ // }
162
+
163
+ // someInputCanHover<TAddedValue>(
164
+ // value: TAddedValue
165
+ // ): StylexValueBuilder<TValue | TAddedValue> {
166
+ // return this.#set('@media (any-hover: hover)', value);
167
+ // }
168
+
169
+ // noInputCanHover<TAddedValue>(
170
+ // value: TAddedValue
171
+ // ): StylexValueBuilder<TValue | TAddedValue> {
172
+ // return this.#set('@media (any-hover: none)', value);
173
+ // }
174
+
175
+ // somePointerIsFine<TAddedValue>(
176
+ // value: TAddedValue
177
+ // ): StylexValueBuilder<TValue | TAddedValue> {
178
+ // return this.#set('@media (any-pointer: fine)', value);
179
+ // }
180
+
181
+ // somePointerIsCoarse<TAddedValue>(
182
+ // value: TAddedValue
183
+ // ): StylexValueBuilder<TValue | TAddedValue> {
184
+ // return this.#set('@media (any-pointer: coarse)', value);
185
+ // }
186
+
187
+ // primaryPointerIsFine<TAddedValue>(
188
+ // value: TAddedValue
189
+ // ): StylexValueBuilder<TValue | TAddedValue> {
190
+ // return this.#set('@media (pointer: fine)', value);
191
+ // }
192
+
193
+ // primaryPointerIsCoarse<TAddedValue>(
194
+ // value: TAddedValue
195
+ // ): StylexValueBuilder<TValue | TAddedValue> {
196
+ // return this.#set('@media (pointer: coarse)', value);
197
+ // }
198
+
199
+ // lightMode<TAddedValue>(
200
+ // value: TAddedValue
201
+ // ): StylexValueBuilder<TValue | TAddedValue> {
202
+ // return this.#set('@media (prefers-color-scheme: light)', value);
203
+ // }
204
+
205
+ // darkMode<TAddedValue>(
206
+ // value: TAddedValue
207
+ // ): StylexValueBuilder<TValue | TAddedValue> {
208
+ // return this.#set('@media (prefers-color-scheme: dark)', value);
209
+ // }
210
+
211
+ // userPrefersMoreContrast<TAddedValue>(
212
+ // value: TAddedValue
213
+ // ): StylexValueBuilder<TValue | TAddedValue> {
214
+ // return this.#set('@media (prefers-contrast: more)', value);
215
+ // }
216
+
217
+ // userPrefersLessContrast<TAddedValue>(
218
+ // value: TAddedValue
219
+ // ): StylexValueBuilder<TValue | TAddedValue> {
220
+ // return this.#set('@media (prefers-contrast: less)', value);
221
+ // }
222
+
223
+ // userPrefersReducedMotion<TAddedValue>(
224
+ // value: TAddedValue
225
+ // ): StylexValueBuilder<TValue | TAddedValue> {
226
+ // return this.#set('@media (prefers-reduced-motion)', value);
227
+ // }
228
+
229
+ // noScript<TAddedValue>(
230
+ // value: TAddedValue
231
+ // ): StylexValueBuilder<TValue | TAddedValue> {
232
+ // return this.#set('@media (scripting: none)', value);
233
+ // }
234
+
235
+ // Choosing a catch-all for now for familiarity
236
+ matchMedia(query, value) {
237
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@media ${query}`, value);
238
+ }
239
+ supports(selector, value) {
240
+ const toSelector = _ref5 => {
241
+ let [k, v] = _ref5;
242
+ return `(${(0, _dashify.default)(k)}: ${String(v)})`;
243
+ };
244
+ const query = Object.entries(selector).map(toSelector).join(' and ');
245
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@supports ${query}`, value);
246
+ }
247
+ supportsNot(selector, value) {
248
+ const toSelector = _ref6 => {
249
+ let [k, v] = _ref6;
250
+ return `(not (${(0, _dashify.default)(k)}: ${String(v)}))`;
251
+ };
252
+ const query = Object.entries(selector).map(toSelector).join(' and ');
253
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `@supports ${query}`, value);
254
+ }
255
+
256
+ // Pseudo Classes
257
+
258
+ hover(value) {
259
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':hover', value);
260
+ }
261
+ focus(value) {
262
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':focus', value);
263
+ }
264
+ focusVisible(value) {
265
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':focus-visible', value);
266
+ }
267
+ focusWithin(value) {
268
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':focus-within', value);
269
+ }
270
+ active(value) {
271
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':active', value);
272
+ }
273
+ anyLink(value) {
274
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':any-link', value);
275
+ }
276
+ autofill(value) {
277
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':autofill', value);
278
+ }
279
+ checked(value) {
280
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':checked', value);
281
+ }
282
+ defaultSelection(value) {
283
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':default', value);
284
+ }
285
+ disabled(value) {
286
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':disabled', value);
287
+ }
288
+ empty(value) {
289
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':empty', value);
290
+ }
291
+ enabled(value) {
292
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':enabled', value);
293
+ }
294
+ fullscreen(value) {
295
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':fullscreen', value);
296
+ }
297
+ indeterminate(value) {
298
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':indeterminate', value);
299
+ }
300
+ invalid(value) {
301
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':invalid', value);
302
+ }
303
+ lang(value) {
304
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':lang', value);
305
+ }
306
+ dirRTLUNSFAE(value) {
307
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':dir(rtl)', value);
308
+ }
309
+ link(value) {
310
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':link', value);
311
+ }
312
+ optional(value) {
313
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':optional', value);
314
+ }
315
+ pictureInPicture(value) {
316
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':picture-in-picture', value);
317
+ }
318
+ placeholderShown(value) {
319
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':placeholder-shown', value);
320
+ }
321
+ paused(value) {
322
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':paused', value);
323
+ }
324
+ playing(value) {
325
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':playing', value);
326
+ }
327
+ readOnly(value) {
328
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':read-only', value);
329
+ }
330
+ readWrite(value) {
331
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':read-write', value);
332
+ }
333
+ required(value) {
334
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':required', value);
335
+ }
336
+ target(value) {
337
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':target', value);
338
+ }
339
+ valid(value) {
340
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':valid', value);
341
+ }
342
+ visited(value) {
343
+ return _classPrivateMethodGet(this, _set, _set2).call(this, ':visited', value);
344
+ }
345
+ get not() {
346
+ return {
347
+ hover: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:hover)', value),
348
+ focus: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:focus)', value),
349
+ focusVisible: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:focus-visible)', value),
350
+ focusWithin: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:focus-within)', value),
351
+ active: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:active)', value),
352
+ anyLink: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:any-link)', value),
353
+ autofill: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:autofill)', value),
354
+ checked: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:checked)', value),
355
+ defaultSelection: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:default)', value),
356
+ disabled: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:disabled)', value),
357
+ empty: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:empty)', value),
358
+ enabled: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:enabled)', value),
359
+ fullscreen: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:fullscreen)', value),
360
+ indeterminate: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:indeterminate)', value),
361
+ invalid: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:invalid)', value),
362
+ lang: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:lang)', value),
363
+ dirRTLUNSFAE: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:dir-rtlunsfae)', value),
364
+ link: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:link)', value),
365
+ optional: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:optional)', value),
366
+ pictureInPicture: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:picture-in-picture)', value),
367
+ placeholderShown: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:placeholder-shown)', value),
368
+ paused: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:paused)', value),
369
+ playing: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:playing)', value),
370
+ readOnly: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:read-only)', value),
371
+ readWrite: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:read-write)', value),
372
+ required: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:required)', value),
373
+ target: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:target)', value),
374
+ valid: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:valid)', value),
375
+ visited: value => _classPrivateMethodGet(this, _set, _set2).call(this, ':not(:visited)', value)
376
+ };
377
+ }
378
+ pseudoUNSAFE(selector, value) {
379
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `:${selector}`, value);
380
+ }
381
+ // These can be used to write arbitrary CSS selectors
382
+ // Which is UNSAFE!
383
+ _isUNSAFE(selector, value) {
384
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `:is(${selector})`, value);
385
+ }
386
+ _notUNSAFE(selector, value) {
387
+ return _classPrivateMethodGet(this, _set, _set2).call(this, `:not(${selector})`, value);
388
+ }
389
+ }
390
+ exports.StylexValueBuilder = StylexValueBuilder;
391
+ function _set2(key, value) {
392
+ this[key] = value;
393
+ return this;
394
+ }
395
+ function stylexDefaultValue(value) {
396
+ return new StylexValueBuilder(value);
397
+ }
@@ -26,7 +26,7 @@ var _stylexInclude = require("../stylex-include");
26
26
  function flattenObject(obj) {
27
27
  const result = {};
28
28
  for (const [key, value] of objEntries(obj)) {
29
- if (typeof value === 'string') {
29
+ if (typeof value === 'string' || value == null) {
30
30
  result[key] = value;
31
31
  } else if (value instanceof _stylexInclude.IncludedStyles) {
32
32
  result[key] = value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stylexjs/shared",
3
- "version": "0.1.0-beta.6",
3
+ "version": "0.2.0-beta.8",
4
4
  "description": "Shared Code for Stylex compile and runtime.",
5
5
  "main": "lib/index.js",
6
6
  "repository": "https://www.github.com/facebookexternal/stylex",