@master/css 2.0.0-rc.52 → 2.0.0-rc.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import cssEscape from '../shared/utils/css-escape.mjs';
2
2
  import SyntaxRuleType from '../syntax-rule-type.mjs';
3
- import { VALUE_DELIMITERS, NUMBER_VALUE_REGEX, COLOR_VALUE_REGEX, BORDER_STYLE_VALUES, IMAGE_VALUE_REGEX } from '../common.mjs';
3
+ import { NUMBER_VALUE_REGEX, BORDER_STYLE_VALUES, COLOR_VALUE_REGEX, IMAGE_VALUE_REGEX, VALUE_DELIMITERS } from '../common.mjs';
4
4
  import autofillSolidStyle from '../utils/autofill-solid-style.mjs';
5
5
 
6
6
  const rules = {
package/dist/core.cjs CHANGED
@@ -90,7 +90,7 @@ class MasterCSS {
90
90
  for (const eachNewSelectorText of Array.isArray(eachResolvedSelectorText) ? eachResolvedSelectorText : [
91
91
  eachResolvedSelectorText
92
92
  ]){
93
- const vendor = eachNewSelectorText.match(/^::-[a-z]+-/m)?.[0] ?? '';
93
+ const vendor = eachNewSelectorText.match(/^:(?::)?-(webkit|moz|ms|o)-/m)?.[1] ?? '';
94
94
  let selectorValues = this.selectors[vendor];
95
95
  if (!selectorValues) {
96
96
  selectorValues = this.selectors[vendor] = [];
@@ -522,6 +522,89 @@ class MasterCSS {
522
522
  }
523
523
  return syntaxRules.filter((eachSyntax)=>eachSyntax?.text);
524
524
  }
525
+ generateVendorSelectors(selectorText) {
526
+ const vendorSelectors = {};
527
+ const transformSelector = (selectorText, selectorValues, selectors, matched)=>{
528
+ for (const [regexp, newSelectorTexts] of selectorValues){
529
+ if (regexp.test(selectorText)) {
530
+ for (const eachNewSelectorText of newSelectorTexts){
531
+ transformSelector(selectorText.replace(regexp, eachNewSelectorText), selectorValues, selectors, true);
532
+ }
533
+ return;
534
+ }
535
+ }
536
+ if (matched) {
537
+ selectors.push(selectorText);
538
+ }
539
+ };
540
+ const spacedSelectorToken = (selectorText)=>{
541
+ // 1. \'123\'
542
+ // 2. [href='http://localhost']
543
+ const transformedSelectorText = selectorText.split(/(\\'(?:.*?)[^\\]\\')(?=[*_>~+,)])|(\[[^=]+='(?:.*?)[^\\]'\])/).map((eachToken, i)=>i % 3 ? eachToken : eachToken.replace(/(^|[^_])_(?!_)/g, '$1 ')).join('');
544
+ const selectors = [];
545
+ let currentSelector = '';
546
+ let symbolCount = 0;
547
+ for(let i = 0; i < transformedSelectorText.length; i++){
548
+ const char = transformedSelectorText[i];
549
+ if (char === '\\') {
550
+ currentSelector += char + transformedSelectorText[++i];
551
+ continue;
552
+ }
553
+ if (!symbolCount && char === ',') {
554
+ selectors.push(currentSelector);
555
+ currentSelector = '';
556
+ } else {
557
+ currentSelector += char;
558
+ if (symbolCount && char === ')') {
559
+ symbolCount--;
560
+ } else if (char === '(') {
561
+ symbolCount++;
562
+ }
563
+ }
564
+ }
565
+ if (currentSelector) {
566
+ selectors.push(currentSelector);
567
+ }
568
+ return selectors;
569
+ };
570
+ const transformedSelectors = [];
571
+ if ('' in this.selectors) {
572
+ transformSelector(selectorText, this.selectors[''], transformedSelectors, true);
573
+ } else {
574
+ transformedSelectors.push(selectorText);
575
+ }
576
+ const unspacedVendorSelectors = {};
577
+ for (const [vendor, selectorValues] of Object.entries(this.selectors)){
578
+ if (!vendor) continue;
579
+ const newUnspacedVendorSelectors = [];
580
+ for (const eachTransformedSelector of transformedSelectors){
581
+ transformSelector(eachTransformedSelector, selectorValues, newUnspacedVendorSelectors, false);
582
+ }
583
+ if (newUnspacedVendorSelectors.length) {
584
+ unspacedVendorSelectors[vendor] = newUnspacedVendorSelectors;
585
+ }
586
+ }
587
+ const insertVendorSelectors = (vendor, selectorTexts)=>{
588
+ const groupedSelectorTexts = selectorTexts.reduce((arr, eachSuffixSelector)=>{
589
+ arr.push(...spacedSelectorToken(eachSuffixSelector));
590
+ return arr;
591
+ }, []);
592
+ if (vendor in vendorSelectors) {
593
+ vendorSelectors[vendor].push(...groupedSelectorTexts);
594
+ } else {
595
+ vendorSelectors[vendor] = groupedSelectorTexts;
596
+ }
597
+ };
598
+ const vendors = Object.keys(unspacedVendorSelectors);
599
+ if (vendors.length) {
600
+ for (const eachVendor of vendors){
601
+ insertVendorSelectors(eachVendor, unspacedVendorSelectors[eachVendor]);
602
+ }
603
+ } else {
604
+ insertVendorSelectors('', transformedSelectors);
605
+ }
606
+ return vendorSelectors;
607
+ }
525
608
  /**
526
609
  * Create syntax rule from given class name
527
610
  * @param className
@@ -562,7 +645,8 @@ class MasterCSS {
562
645
  '>',
563
646
  '+',
564
647
  '~',
565
- ':'
648
+ ':',
649
+ ','
566
650
  ].includes(char)) {
567
651
  break;
568
652
  }
package/dist/core.d.ts CHANGED
@@ -6,6 +6,7 @@ import Layer from './layer';
6
6
  import NonLayer from './non-layer';
7
7
  import { DefinedRule, Variable } from './types/syntax';
8
8
  import { AnimationDefinitions, Config } from './types/config';
9
+ import { Vendors } from './types/common';
9
10
  export default class MasterCSS {
10
11
  customConfig?: Config | undefined;
11
12
  static config: Config;
@@ -35,6 +36,7 @@ export default class MasterCSS {
35
36
  * @returns SyntaxRule[]
36
37
  */
37
38
  generate(className: string, mode?: string): SyntaxRule[];
39
+ generateVendorSelectors(selectorText: string): Record<string, string[]>;
38
40
  /**
39
41
  * Create syntax rule from given class name
40
42
  * @param className
@@ -58,6 +60,7 @@ export default class MasterCSS {
58
60
  }
59
61
  export declare const masterCSSs: MasterCSS[];
60
62
  export default interface MasterCSS {
63
+ supportVendors: Set<Vendors>;
61
64
  style: HTMLStyleElement | null;
62
65
  components: Record<string, string[]>;
63
66
  selectors: Record<string, [RegExp, string[]][]>;
package/dist/core.mjs CHANGED
@@ -86,7 +86,7 @@ class MasterCSS {
86
86
  for (const eachNewSelectorText of Array.isArray(eachResolvedSelectorText) ? eachResolvedSelectorText : [
87
87
  eachResolvedSelectorText
88
88
  ]){
89
- const vendor = eachNewSelectorText.match(/^::-[a-z]+-/m)?.[0] ?? '';
89
+ const vendor = eachNewSelectorText.match(/^:(?::)?-(webkit|moz|ms|o)-/m)?.[1] ?? '';
90
90
  let selectorValues = this.selectors[vendor];
91
91
  if (!selectorValues) {
92
92
  selectorValues = this.selectors[vendor] = [];
@@ -518,6 +518,89 @@ class MasterCSS {
518
518
  }
519
519
  return syntaxRules.filter((eachSyntax)=>eachSyntax?.text);
520
520
  }
521
+ generateVendorSelectors(selectorText) {
522
+ const vendorSelectors = {};
523
+ const transformSelector = (selectorText, selectorValues, selectors, matched)=>{
524
+ for (const [regexp, newSelectorTexts] of selectorValues){
525
+ if (regexp.test(selectorText)) {
526
+ for (const eachNewSelectorText of newSelectorTexts){
527
+ transformSelector(selectorText.replace(regexp, eachNewSelectorText), selectorValues, selectors, true);
528
+ }
529
+ return;
530
+ }
531
+ }
532
+ if (matched) {
533
+ selectors.push(selectorText);
534
+ }
535
+ };
536
+ const spacedSelectorToken = (selectorText)=>{
537
+ // 1. \'123\'
538
+ // 2. [href='http://localhost']
539
+ const transformedSelectorText = selectorText.split(/(\\'(?:.*?)[^\\]\\')(?=[*_>~+,)])|(\[[^=]+='(?:.*?)[^\\]'\])/).map((eachToken, i)=>i % 3 ? eachToken : eachToken.replace(/(^|[^_])_(?!_)/g, '$1 ')).join('');
540
+ const selectors = [];
541
+ let currentSelector = '';
542
+ let symbolCount = 0;
543
+ for(let i = 0; i < transformedSelectorText.length; i++){
544
+ const char = transformedSelectorText[i];
545
+ if (char === '\\') {
546
+ currentSelector += char + transformedSelectorText[++i];
547
+ continue;
548
+ }
549
+ if (!symbolCount && char === ',') {
550
+ selectors.push(currentSelector);
551
+ currentSelector = '';
552
+ } else {
553
+ currentSelector += char;
554
+ if (symbolCount && char === ')') {
555
+ symbolCount--;
556
+ } else if (char === '(') {
557
+ symbolCount++;
558
+ }
559
+ }
560
+ }
561
+ if (currentSelector) {
562
+ selectors.push(currentSelector);
563
+ }
564
+ return selectors;
565
+ };
566
+ const transformedSelectors = [];
567
+ if ('' in this.selectors) {
568
+ transformSelector(selectorText, this.selectors[''], transformedSelectors, true);
569
+ } else {
570
+ transformedSelectors.push(selectorText);
571
+ }
572
+ const unspacedVendorSelectors = {};
573
+ for (const [vendor, selectorValues] of Object.entries(this.selectors)){
574
+ if (!vendor) continue;
575
+ const newUnspacedVendorSelectors = [];
576
+ for (const eachTransformedSelector of transformedSelectors){
577
+ transformSelector(eachTransformedSelector, selectorValues, newUnspacedVendorSelectors, false);
578
+ }
579
+ if (newUnspacedVendorSelectors.length) {
580
+ unspacedVendorSelectors[vendor] = newUnspacedVendorSelectors;
581
+ }
582
+ }
583
+ const insertVendorSelectors = (vendor, selectorTexts)=>{
584
+ const groupedSelectorTexts = selectorTexts.reduce((arr, eachSuffixSelector)=>{
585
+ arr.push(...spacedSelectorToken(eachSuffixSelector));
586
+ return arr;
587
+ }, []);
588
+ if (vendor in vendorSelectors) {
589
+ vendorSelectors[vendor].push(...groupedSelectorTexts);
590
+ } else {
591
+ vendorSelectors[vendor] = groupedSelectorTexts;
592
+ }
593
+ };
594
+ const vendors = Object.keys(unspacedVendorSelectors);
595
+ if (vendors.length) {
596
+ for (const eachVendor of vendors){
597
+ insertVendorSelectors(eachVendor, unspacedVendorSelectors[eachVendor]);
598
+ }
599
+ } else {
600
+ insertVendorSelectors('', transformedSelectors);
601
+ }
602
+ return vendorSelectors;
603
+ }
521
604
  /**
522
605
  * Create syntax rule from given class name
523
606
  * @param className
@@ -558,7 +641,8 @@ class MasterCSS {
558
641
  '>',
559
642
  '+',
560
643
  '~',
561
- ':'
644
+ ':',
645
+ ','
562
646
  ].includes(char)) {
563
647
  break;
564
648
  }
package/dist/index.cjs CHANGED
@@ -23,11 +23,11 @@ var isCoreRule = require('./utils/is-core-rule.cjs');
23
23
  var at = require('./config/at.cjs');
24
24
  var selectors = require('./config/selectors.cjs');
25
25
  var utilities = require('./config/utilities.cjs');
26
+ var rules = require('./config/rules.cjs');
26
27
  var functions = require('./config/functions.cjs');
27
28
  var animations = require('./config/animations.cjs');
28
29
  var variables = require('./config/variables.cjs');
29
30
  var modes = require('./config/modes.cjs');
30
- var rules = require('./config/rules.cjs');
31
31
 
32
32
 
33
33
 
@@ -74,8 +74,8 @@ exports.isCoreRule = isCoreRule;
74
74
  exports.at = at;
75
75
  exports.selectors = selectors;
76
76
  exports.utilities = utilities;
77
+ exports.rules = rules;
77
78
  exports.functions = functions;
78
79
  exports.animations = animations;
79
80
  exports.variables = variables;
80
81
  exports.modes = modes;
81
- exports.rules = rules;
package/dist/index.mjs CHANGED
@@ -19,8 +19,8 @@ export { default as isCoreRule } from './utils/is-core-rule.mjs';
19
19
  export { default as at } from './config/at.mjs';
20
20
  export { default as selectors } from './config/selectors.mjs';
21
21
  export { default as utilities } from './config/utilities.mjs';
22
+ export { default as rules } from './config/rules.mjs';
22
23
  export { default as functions } from './config/functions.mjs';
23
24
  export { default as animations } from './config/animations.mjs';
24
25
  export { default as variables } from './config/variables.mjs';
25
26
  export { default as modes } from './config/modes.mjs';
26
- export { default as rules } from './config/rules.mjs';
package/dist/layer.cjs CHANGED
@@ -50,12 +50,13 @@ class Layer {
50
50
  }
51
51
  for(let i = 0; i < rule.nodes.length;){
52
52
  try {
53
- const nativeRule = rule.nodes[i];
54
- this.native.insertRule(nativeRule.text, cssRuleIndex);
55
- nativeRule.native = this.native.cssRules[cssRuleIndex++];
53
+ const node = rule.nodes[i];
54
+ const insertedIndex = this.native.insertRule(node.text, cssRuleIndex);
55
+ node.native = this.native.cssRules.item(insertedIndex);
56
+ cssRuleIndex++;
56
57
  i++;
57
58
  } catch (error) {
58
- console.error(error);
59
+ console.error(error, rule.nodes[i]);
59
60
  rule.nodes.splice(i, 1);
60
61
  }
61
62
  }
package/dist/layer.mjs CHANGED
@@ -48,12 +48,13 @@ class Layer {
48
48
  }
49
49
  for(let i = 0; i < rule.nodes.length;){
50
50
  try {
51
- const nativeRule = rule.nodes[i];
52
- this.native.insertRule(nativeRule.text, cssRuleIndex);
53
- nativeRule.native = this.native.cssRules[cssRuleIndex++];
51
+ const node = rule.nodes[i];
52
+ const insertedIndex = this.native.insertRule(node.text, cssRuleIndex);
53
+ node.native = this.native.cssRules.item(insertedIndex);
54
+ cssRuleIndex++;
54
55
  i++;
55
56
  } catch (error) {
56
- console.error(error);
57
+ console.error(error, rule.nodes[i]);
57
58
  rule.nodes.splice(i, 1);
58
59
  }
59
60
  }
package/dist/rule.d.ts CHANGED
@@ -7,5 +7,8 @@ export declare class Rule {
7
7
  }
8
8
  export interface RuleNode {
9
9
  text: string;
10
+ selectorText?: string;
10
11
  native?: CSSRule;
12
+ suffixSelectors?: string[];
13
+ prefixSelectors?: string[];
11
14
  }
@@ -218,22 +218,24 @@ class SyntaxLayer extends layer {
218
218
  const addNative = (mode, _variable)=>{
219
219
  let isDefaultMode = false;
220
220
  let preifxCssRuleText;
221
+ let selectorText;
221
222
  let endCurlyBracketCount = 1;
222
223
  if (mode) {
223
224
  switch(this.css.config.modes?.[mode]){
224
225
  case 'media':
225
- preifxCssRuleText = `@media(prefers-color-scheme:${mode}){:root`;
226
+ selectorText = ':root';
227
+ preifxCssRuleText = `@media(prefers-color-scheme:${mode}){${selectorText}`;
226
228
  endCurlyBracketCount++;
227
229
  break;
228
230
  case 'host':
229
- preifxCssRuleText = `:host(.${mode})`;
231
+ preifxCssRuleText = selectorText = `:host(.${mode})`;
230
232
  if (!variable.value && this.css.config.defaultMode === mode) {
231
233
  preifxCssRuleText += ',:host';
232
234
  isDefaultMode = true;
233
235
  }
234
236
  break;
235
237
  case 'class':
236
- preifxCssRuleText = `.${mode}`;
238
+ preifxCssRuleText = selectorText = `.${mode}`;
237
239
  if (!variable.value && this.css.config.defaultMode === mode) {
238
240
  preifxCssRuleText += ',:root';
239
241
  isDefaultMode = true;
@@ -243,11 +245,12 @@ class SyntaxLayer extends layer {
243
245
  return;
244
246
  }
245
247
  } else {
246
- preifxCssRuleText = ':root';
248
+ preifxCssRuleText = selectorText = ':root';
247
249
  }
248
250
  const cssRuleText = `${preifxCssRuleText}{--${eachVariableName}:${String(_variable.value)}${'}'.repeat(endCurlyBracketCount)}`;
249
251
  if (isDefaultMode) {
250
252
  newRule.nodes.unshift({
253
+ selectorText,
251
254
  text: cssRuleText
252
255
  });
253
256
  } else {
@@ -216,22 +216,24 @@ class SyntaxLayer extends Layer {
216
216
  const addNative = (mode, _variable)=>{
217
217
  let isDefaultMode = false;
218
218
  let preifxCssRuleText;
219
+ let selectorText;
219
220
  let endCurlyBracketCount = 1;
220
221
  if (mode) {
221
222
  switch(this.css.config.modes?.[mode]){
222
223
  case 'media':
223
- preifxCssRuleText = `@media(prefers-color-scheme:${mode}){:root`;
224
+ selectorText = ':root';
225
+ preifxCssRuleText = `@media(prefers-color-scheme:${mode}){${selectorText}`;
224
226
  endCurlyBracketCount++;
225
227
  break;
226
228
  case 'host':
227
- preifxCssRuleText = `:host(.${mode})`;
229
+ preifxCssRuleText = selectorText = `:host(.${mode})`;
228
230
  if (!variable.value && this.css.config.defaultMode === mode) {
229
231
  preifxCssRuleText += ',:host';
230
232
  isDefaultMode = true;
231
233
  }
232
234
  break;
233
235
  case 'class':
234
- preifxCssRuleText = `.${mode}`;
236
+ preifxCssRuleText = selectorText = `.${mode}`;
235
237
  if (!variable.value && this.css.config.defaultMode === mode) {
236
238
  preifxCssRuleText += ',:root';
237
239
  isDefaultMode = true;
@@ -241,11 +243,12 @@ class SyntaxLayer extends Layer {
241
243
  return;
242
244
  }
243
245
  } else {
244
- preifxCssRuleText = ':root';
246
+ preifxCssRuleText = selectorText = ':root';
245
247
  }
246
248
  const cssRuleText = `${preifxCssRuleText}{--${eachVariableName}:${String(_variable.value)}${'}'.repeat(endCurlyBracketCount)}`;
247
249
  if (isDefaultMode) {
248
250
  newRule.nodes.unshift({
251
+ selectorText,
249
252
  text: cssRuleText
250
253
  });
251
254
  } else {
@@ -255,7 +255,7 @@ class SyntaxRule extends rule.Rule {
255
255
  const { analyze, transformValue, declare, transformValueComponents, create, type, unit } = definition;
256
256
  this.type = type;
257
257
  const { scope, important, modes } = css.config;
258
- const { selectors, at, animations } = css;
258
+ const { at, animations } = css;
259
259
  if (create) create.call(this, name);
260
260
  // 1. value / selectorToken
261
261
  this.declarations = definition.declarations;
@@ -285,92 +285,14 @@ class SyntaxRule extends rule.Rule {
285
285
  }
286
286
  this.stateToken = stateToken;
287
287
  // 3. prefix selector
288
- const generateVendorSelectors = (selectorText, vendorSelectors)=>{
289
- const transformSelector = (selectorText, selectorValues, selectors, matched)=>{
290
- for (const [regexp, newSelectorTexts] of selectorValues){
291
- if (regexp.test(selectorText)) {
292
- for (const eachNewSelectorText of newSelectorTexts){
293
- transformSelector(selectorText.replace(regexp, eachNewSelectorText), selectorValues, selectors, true);
294
- }
295
- return;
296
- }
297
- }
298
- if (matched) {
299
- selectors.push(selectorText);
300
- }
301
- };
302
- const spacedSelectorToken = (selectorText)=>{
303
- // 1. \'123\'
304
- // 2. [href='http://localhost']
305
- const transformedSelectorText = selectorText.split(/(\\'(?:.*?)[^\\]\\')(?=[*_>~+,)])|(\[[^=]+='(?:.*?)[^\\]'\])/).map((eachToken, i)=>i % 3 ? eachToken : eachToken.replace(/(^|[^_])_(?!_)/g, '$1 ')).join('');
306
- const selectors = [];
307
- let currentSelector = '';
308
- for(let i = 0; i < transformedSelectorText.length; i++){
309
- const char = transformedSelectorText[i];
310
- if (char === '\\') {
311
- currentSelector += char + transformedSelectorText[++i];
312
- continue;
313
- }
314
- currentSelector += char;
315
- }
316
- if (currentSelector) {
317
- selectors.push(currentSelector);
318
- }
319
- return selectors;
320
- };
321
- const transformedSelectors = [];
322
- if ('' in selectors) {
323
- transformSelector(selectorText, selectors[''], transformedSelectors, true);
324
- } else {
325
- transformedSelectors.push(selectorText);
326
- }
327
- const unspacedVendorSelectors = {};
328
- for (const [vendor, selectorValues] of Object.entries(selectors)){
329
- if (!vendor) continue;
330
- const newUnspacedVendorSelectors = [];
331
- for (const eachTransformedSelector of transformedSelectors){
332
- transformSelector(eachTransformedSelector, selectorValues, newUnspacedVendorSelectors, false);
333
- }
334
- if (newUnspacedVendorSelectors.length) {
335
- unspacedVendorSelectors[vendor] = newUnspacedVendorSelectors;
336
- }
337
- }
338
- const insertVendorSelectors = (vendor, selectorTexts)=>{
339
- const groupedSelectorTexts = selectorTexts.reduce((arr, eachSuffixSelector)=>{
340
- arr.push(...spacedSelectorToken(eachSuffixSelector));
341
- return arr;
342
- }, []);
343
- if (vendor in vendorSelectors) {
344
- vendorSelectors[vendor].push(...groupedSelectorTexts);
345
- } else {
346
- vendorSelectors[vendor] = groupedSelectorTexts;
347
- }
348
- };
349
- const vendors = Object.keys(unspacedVendorSelectors);
350
- if (vendors.length) {
351
- for (const eachVendor of vendors){
352
- insertVendorSelectors(eachVendor, unspacedVendorSelectors[eachVendor]);
353
- }
354
- } else {
355
- insertVendorSelectors('', transformedSelectors);
356
- }
357
- };
358
288
  if (prefixToken) {
359
- this.vendorPrefixSelectors = {};
360
- generateVendorSelectors(prefixToken, this.vendorPrefixSelectors);
361
- } else {
362
- this.vendorPrefixSelectors = {
363
- '': [
364
- ''
365
- ]
366
- };
289
+ this.vendorPrefixSelectors = css.generateVendorSelectors(prefixToken);
367
290
  }
368
291
  // 4. suffix selector
369
292
  const stateTokens = stateToken.split('@');
370
293
  const suffixSelector = stateTokens[0];
371
294
  if (suffixSelector) {
372
- this.vendorSuffixSelectors = {};
373
- generateVendorSelectors(suffixSelector, this.vendorSuffixSelectors);
295
+ this.vendorSuffixSelectors = css.generateVendorSelectors(suffixSelector);
374
296
  for (const suffixSelectors of Object.values(this.vendorSuffixSelectors)){
375
297
  for (const eachSuffixSelector of suffixSelectors){
376
298
  const SORTED_SELECTORS = [
@@ -389,29 +311,11 @@ class SyntaxRule extends rule.Rule {
389
311
  }
390
312
  }
391
313
  }
392
- } else {
393
- this.vendorSuffixSelectors = {
394
- '': [
395
- ''
396
- ]
397
- };
398
314
  }
399
315
  // selector combinations
400
316
  const suffixSelectorVendorsByPrefixSelectorVendor = {};
401
- const isPrefixSelectorWithoutVendor = Object.prototype.hasOwnProperty.call(this.vendorPrefixSelectors, '');
402
- const isSuffixSelectorWithoutVendor = Object.prototype.hasOwnProperty.call(this.vendorSuffixSelectors, '');
403
- if (isPrefixSelectorWithoutVendor) {
404
- suffixSelectorVendorsByPrefixSelectorVendor[''] = isSuffixSelectorWithoutVendor ? [
405
- ''
406
- ] : Object.keys(this.vendorSuffixSelectors);
407
- } else {
408
- if (isSuffixSelectorWithoutVendor) {
409
- for(const vendor in this.vendorPrefixSelectors){
410
- suffixSelectorVendorsByPrefixSelectorVendor[vendor] = [
411
- ''
412
- ];
413
- }
414
- } else {
317
+ if (this.vendorPrefixSelectors) {
318
+ if (this.vendorSuffixSelectors) {
415
319
  for(const prefixSelectorVendor in this.vendorPrefixSelectors){
416
320
  const suffixSelectorVendors = suffixSelectorVendorsByPrefixSelectorVendor[prefixSelectorVendor] = [];
417
321
  if (Object.prototype.hasOwnProperty.call(this.vendorSuffixSelectors, prefixSelectorVendor)) {
@@ -422,7 +326,17 @@ class SyntaxRule extends rule.Rule {
422
326
  }
423
327
  }
424
328
  }
329
+ } else {
330
+ for(const vendor in this.vendorPrefixSelectors){
331
+ suffixSelectorVendorsByPrefixSelectorVendor[vendor] = [
332
+ ''
333
+ ];
334
+ }
425
335
  }
336
+ } else {
337
+ suffixSelectorVendorsByPrefixSelectorVendor[''] = this.vendorSuffixSelectors ? Object.keys(this.vendorSuffixSelectors) : [
338
+ ''
339
+ ];
426
340
  }
427
341
  // 5. atTokens
428
342
  for(let i = 1; i < stateTokens.length; i++){
@@ -600,13 +514,20 @@ class SyntaxRule extends rule.Rule {
600
514
  if (propertiesText.length) {
601
515
  for(const prefixSelectorVendor in suffixSelectorVendorsByPrefixSelectorVendor){
602
516
  for (const eachSuffixSelectorVendor of suffixSelectorVendorsByPrefixSelectorVendor[prefixSelectorVendor]){
517
+ const prefixSelectors = this.vendorPrefixSelectors?.[prefixSelectorVendor];
518
+ const suffixSelectors = this.vendorSuffixSelectors?.[eachSuffixSelectorVendor];
519
+ if (this.css.supportVendors) {
520
+ if (prefixSelectorVendor && !this.css.supportVendors?.has(prefixSelectorVendor) || eachSuffixSelectorVendor && !this.css.supportVendors?.has(eachSuffixSelectorVendor)) {
521
+ continue;
522
+ }
523
+ }
603
524
  let prefixText = '';
604
525
  if (this.direction) {
605
526
  prefixText += '[dir=' + this.direction + '] ';
606
527
  }
607
- const prefixSelectors = this.vendorPrefixSelectors[prefixSelectorVendor];
608
- const suffixSelectors = this.vendorSuffixSelectors[eachSuffixSelectorVendor];
609
- const prefixTexts = prefixSelectors.map((eachPrefixSelector)=>eachPrefixSelector + prefixText);
528
+ const prefixTexts = prefixSelectors ? prefixSelectors.map((eachPrefixSelector)=>eachPrefixSelector + prefixText) : [
529
+ prefixText
530
+ ];
610
531
  const getCssText = (name)=>prefixTexts.map((eachPrefixText)=>{
611
532
  let modePrefix = '';
612
533
  if (this.mode) {
@@ -617,22 +538,27 @@ class SyntaxRule extends rule.Rule {
617
538
  }
618
539
  return modePrefix + (scope ? scope + ' ' : '') + eachPrefixText;
619
540
  }).reduce((arr, eachPrefixText)=>{
620
- arr.push(suffixSelectors.reduce((_arr, eachSuffixSelector)=>{
541
+ arr.push(suffixSelectors ? suffixSelectors.reduce((_arr, eachSuffixSelector)=>{
621
542
  _arr.push(eachPrefixText + '.' + cssEscape(name) + eachSuffixSelector);
622
543
  return _arr;
623
- }, []).join(','));
544
+ }, []).join(',') : eachPrefixText + '.' + cssEscape(name));
624
545
  return arr;
625
546
  }, []).join(',');
626
- let cssText = getCssText(fixedClass ?? name) + '{' + propertiesText.join(';') + '}';
547
+ const selectorText = getCssText(fixedClass ?? name);
548
+ let cssText = selectorText + '{' + propertiesText.join(';') + '}';
627
549
  for (const key of Object.keys(this.at).sort((_a, b)=>b === 'supports' ? -1 : 1)){
628
550
  cssText = '@' + key + (key.includes(' ') ? '' : ' ') + this.at[key].map((eachAtComponent)=>this.resolveAtComponent(eachAtComponent)).join(' ') + '{' + cssText + '}';
629
551
  }
630
552
  if (this.mode && modes?.[this.mode] === 'media') {
631
553
  cssText = `@media(prefers-color-scheme:${this.mode}){` + cssText + '}';
632
554
  }
633
- this.nodes.push({
634
- text: cssText
635
- });
555
+ const node = {
556
+ text: cssText,
557
+ selectorText
558
+ };
559
+ if (prefixSelectors) node.prefixSelectors = prefixSelectors;
560
+ if (suffixSelectors) node.suffixSelectors = suffixSelectors;
561
+ this.nodes.push(node);
636
562
  }
637
563
  }
638
564
  }
@@ -253,7 +253,7 @@ class SyntaxRule extends Rule {
253
253
  const { analyze, transformValue, declare, transformValueComponents, create, type, unit } = definition;
254
254
  this.type = type;
255
255
  const { scope, important, modes } = css.config;
256
- const { selectors, at, animations } = css;
256
+ const { at, animations } = css;
257
257
  if (create) create.call(this, name);
258
258
  // 1. value / selectorToken
259
259
  this.declarations = definition.declarations;
@@ -283,92 +283,14 @@ class SyntaxRule extends Rule {
283
283
  }
284
284
  this.stateToken = stateToken;
285
285
  // 3. prefix selector
286
- const generateVendorSelectors = (selectorText, vendorSelectors)=>{
287
- const transformSelector = (selectorText, selectorValues, selectors, matched)=>{
288
- for (const [regexp, newSelectorTexts] of selectorValues){
289
- if (regexp.test(selectorText)) {
290
- for (const eachNewSelectorText of newSelectorTexts){
291
- transformSelector(selectorText.replace(regexp, eachNewSelectorText), selectorValues, selectors, true);
292
- }
293
- return;
294
- }
295
- }
296
- if (matched) {
297
- selectors.push(selectorText);
298
- }
299
- };
300
- const spacedSelectorToken = (selectorText)=>{
301
- // 1. \'123\'
302
- // 2. [href='http://localhost']
303
- const transformedSelectorText = selectorText.split(/(\\'(?:.*?)[^\\]\\')(?=[*_>~+,)])|(\[[^=]+='(?:.*?)[^\\]'\])/).map((eachToken, i)=>i % 3 ? eachToken : eachToken.replace(/(^|[^_])_(?!_)/g, '$1 ')).join('');
304
- const selectors = [];
305
- let currentSelector = '';
306
- for(let i = 0; i < transformedSelectorText.length; i++){
307
- const char = transformedSelectorText[i];
308
- if (char === '\\') {
309
- currentSelector += char + transformedSelectorText[++i];
310
- continue;
311
- }
312
- currentSelector += char;
313
- }
314
- if (currentSelector) {
315
- selectors.push(currentSelector);
316
- }
317
- return selectors;
318
- };
319
- const transformedSelectors = [];
320
- if ('' in selectors) {
321
- transformSelector(selectorText, selectors[''], transformedSelectors, true);
322
- } else {
323
- transformedSelectors.push(selectorText);
324
- }
325
- const unspacedVendorSelectors = {};
326
- for (const [vendor, selectorValues] of Object.entries(selectors)){
327
- if (!vendor) continue;
328
- const newUnspacedVendorSelectors = [];
329
- for (const eachTransformedSelector of transformedSelectors){
330
- transformSelector(eachTransformedSelector, selectorValues, newUnspacedVendorSelectors, false);
331
- }
332
- if (newUnspacedVendorSelectors.length) {
333
- unspacedVendorSelectors[vendor] = newUnspacedVendorSelectors;
334
- }
335
- }
336
- const insertVendorSelectors = (vendor, selectorTexts)=>{
337
- const groupedSelectorTexts = selectorTexts.reduce((arr, eachSuffixSelector)=>{
338
- arr.push(...spacedSelectorToken(eachSuffixSelector));
339
- return arr;
340
- }, []);
341
- if (vendor in vendorSelectors) {
342
- vendorSelectors[vendor].push(...groupedSelectorTexts);
343
- } else {
344
- vendorSelectors[vendor] = groupedSelectorTexts;
345
- }
346
- };
347
- const vendors = Object.keys(unspacedVendorSelectors);
348
- if (vendors.length) {
349
- for (const eachVendor of vendors){
350
- insertVendorSelectors(eachVendor, unspacedVendorSelectors[eachVendor]);
351
- }
352
- } else {
353
- insertVendorSelectors('', transformedSelectors);
354
- }
355
- };
356
286
  if (prefixToken) {
357
- this.vendorPrefixSelectors = {};
358
- generateVendorSelectors(prefixToken, this.vendorPrefixSelectors);
359
- } else {
360
- this.vendorPrefixSelectors = {
361
- '': [
362
- ''
363
- ]
364
- };
287
+ this.vendorPrefixSelectors = css.generateVendorSelectors(prefixToken);
365
288
  }
366
289
  // 4. suffix selector
367
290
  const stateTokens = stateToken.split('@');
368
291
  const suffixSelector = stateTokens[0];
369
292
  if (suffixSelector) {
370
- this.vendorSuffixSelectors = {};
371
- generateVendorSelectors(suffixSelector, this.vendorSuffixSelectors);
293
+ this.vendorSuffixSelectors = css.generateVendorSelectors(suffixSelector);
372
294
  for (const suffixSelectors of Object.values(this.vendorSuffixSelectors)){
373
295
  for (const eachSuffixSelector of suffixSelectors){
374
296
  const SORTED_SELECTORS = [
@@ -387,29 +309,11 @@ class SyntaxRule extends Rule {
387
309
  }
388
310
  }
389
311
  }
390
- } else {
391
- this.vendorSuffixSelectors = {
392
- '': [
393
- ''
394
- ]
395
- };
396
312
  }
397
313
  // selector combinations
398
314
  const suffixSelectorVendorsByPrefixSelectorVendor = {};
399
- const isPrefixSelectorWithoutVendor = Object.prototype.hasOwnProperty.call(this.vendorPrefixSelectors, '');
400
- const isSuffixSelectorWithoutVendor = Object.prototype.hasOwnProperty.call(this.vendorSuffixSelectors, '');
401
- if (isPrefixSelectorWithoutVendor) {
402
- suffixSelectorVendorsByPrefixSelectorVendor[''] = isSuffixSelectorWithoutVendor ? [
403
- ''
404
- ] : Object.keys(this.vendorSuffixSelectors);
405
- } else {
406
- if (isSuffixSelectorWithoutVendor) {
407
- for(const vendor in this.vendorPrefixSelectors){
408
- suffixSelectorVendorsByPrefixSelectorVendor[vendor] = [
409
- ''
410
- ];
411
- }
412
- } else {
315
+ if (this.vendorPrefixSelectors) {
316
+ if (this.vendorSuffixSelectors) {
413
317
  for(const prefixSelectorVendor in this.vendorPrefixSelectors){
414
318
  const suffixSelectorVendors = suffixSelectorVendorsByPrefixSelectorVendor[prefixSelectorVendor] = [];
415
319
  if (Object.prototype.hasOwnProperty.call(this.vendorSuffixSelectors, prefixSelectorVendor)) {
@@ -420,7 +324,17 @@ class SyntaxRule extends Rule {
420
324
  }
421
325
  }
422
326
  }
327
+ } else {
328
+ for(const vendor in this.vendorPrefixSelectors){
329
+ suffixSelectorVendorsByPrefixSelectorVendor[vendor] = [
330
+ ''
331
+ ];
332
+ }
423
333
  }
334
+ } else {
335
+ suffixSelectorVendorsByPrefixSelectorVendor[''] = this.vendorSuffixSelectors ? Object.keys(this.vendorSuffixSelectors) : [
336
+ ''
337
+ ];
424
338
  }
425
339
  // 5. atTokens
426
340
  for(let i = 1; i < stateTokens.length; i++){
@@ -598,13 +512,20 @@ class SyntaxRule extends Rule {
598
512
  if (propertiesText.length) {
599
513
  for(const prefixSelectorVendor in suffixSelectorVendorsByPrefixSelectorVendor){
600
514
  for (const eachSuffixSelectorVendor of suffixSelectorVendorsByPrefixSelectorVendor[prefixSelectorVendor]){
515
+ const prefixSelectors = this.vendorPrefixSelectors?.[prefixSelectorVendor];
516
+ const suffixSelectors = this.vendorSuffixSelectors?.[eachSuffixSelectorVendor];
517
+ if (this.css.supportVendors) {
518
+ if (prefixSelectorVendor && !this.css.supportVendors?.has(prefixSelectorVendor) || eachSuffixSelectorVendor && !this.css.supportVendors?.has(eachSuffixSelectorVendor)) {
519
+ continue;
520
+ }
521
+ }
601
522
  let prefixText = '';
602
523
  if (this.direction) {
603
524
  prefixText += '[dir=' + this.direction + '] ';
604
525
  }
605
- const prefixSelectors = this.vendorPrefixSelectors[prefixSelectorVendor];
606
- const suffixSelectors = this.vendorSuffixSelectors[eachSuffixSelectorVendor];
607
- const prefixTexts = prefixSelectors.map((eachPrefixSelector)=>eachPrefixSelector + prefixText);
526
+ const prefixTexts = prefixSelectors ? prefixSelectors.map((eachPrefixSelector)=>eachPrefixSelector + prefixText) : [
527
+ prefixText
528
+ ];
608
529
  const getCssText = (name)=>prefixTexts.map((eachPrefixText)=>{
609
530
  let modePrefix = '';
610
531
  if (this.mode) {
@@ -615,22 +536,27 @@ class SyntaxRule extends Rule {
615
536
  }
616
537
  return modePrefix + (scope ? scope + ' ' : '') + eachPrefixText;
617
538
  }).reduce((arr, eachPrefixText)=>{
618
- arr.push(suffixSelectors.reduce((_arr, eachSuffixSelector)=>{
539
+ arr.push(suffixSelectors ? suffixSelectors.reduce((_arr, eachSuffixSelector)=>{
619
540
  _arr.push(eachPrefixText + '.' + cssEscape(name) + eachSuffixSelector);
620
541
  return _arr;
621
- }, []).join(','));
542
+ }, []).join(',') : eachPrefixText + '.' + cssEscape(name));
622
543
  return arr;
623
544
  }, []).join(',');
624
- let cssText = getCssText(fixedClass ?? name) + '{' + propertiesText.join(';') + '}';
545
+ const selectorText = getCssText(fixedClass ?? name);
546
+ let cssText = selectorText + '{' + propertiesText.join(';') + '}';
625
547
  for (const key of Object.keys(this.at).sort((_a, b)=>b === 'supports' ? -1 : 1)){
626
548
  cssText = '@' + key + (key.includes(' ') ? '' : ' ') + this.at[key].map((eachAtComponent)=>this.resolveAtComponent(eachAtComponent)).join(' ') + '{' + cssText + '}';
627
549
  }
628
550
  if (this.mode && modes?.[this.mode] === 'media') {
629
551
  cssText = `@media(prefers-color-scheme:${this.mode}){` + cssText + '}';
630
552
  }
631
- this.nodes.push({
632
- text: cssText
633
- });
553
+ const node = {
554
+ text: cssText,
555
+ selectorText
556
+ };
557
+ if (prefixSelectors) node.prefixSelectors = prefixSelectors;
558
+ if (suffixSelectors) node.suffixSelectors = suffixSelectors;
559
+ this.nodes.push(node);
634
560
  }
635
561
  }
636
562
  }
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
@@ -0,0 +1 @@
1
+ export type Vendors = 'webkit' | 'moz' | 'ms' | 'o';
@@ -0,0 +1 @@
1
+
@@ -2,8 +2,8 @@
2
2
 
3
3
  function areRuleSelectorsEqual(aSyntaxRule, bSyntaxRule) {
4
4
  // suffix
5
- const aVendorSuffixSelectorKeys = Object.keys(aSyntaxRule.vendorSuffixSelectors);
6
- const bVendorSuffixSelectorKeys = Object.keys(bSyntaxRule.vendorSuffixSelectors);
5
+ const aVendorSuffixSelectorKeys = aSyntaxRule.vendorSuffixSelectors ? Object.keys(aSyntaxRule.vendorSuffixSelectors) : [];
6
+ const bVendorSuffixSelectorKeys = bSyntaxRule.vendorSuffixSelectors ? Object.keys(bSyntaxRule.vendorSuffixSelectors) : [];
7
7
  if (aVendorSuffixSelectorKeys.length !== bVendorSuffixSelectorKeys.length) return false;
8
8
  const isSameVendorSuffixSelectors = aVendorSuffixSelectorKeys.every((eachAKey)=>{
9
9
  if (!Object.prototype.hasOwnProperty.call(bSyntaxRule.vendorSuffixSelectors, eachAKey)) return false;
@@ -13,13 +13,13 @@ function areRuleSelectorsEqual(aSyntaxRule, bSyntaxRule) {
13
13
  });
14
14
  if (!isSameVendorSuffixSelectors) return false;
15
15
  // prefix
16
- const aVendorPrefixSelectorKeys = Object.keys(aSyntaxRule.vendorPrefixSelectors);
17
- const bVendorPrefixSelectorKeys = Object.keys(bSyntaxRule.vendorPrefixSelectors);
16
+ const aVendorPrefixSelectorKeys = aSyntaxRule.vendorPrefixSelectors ? Object.keys(aSyntaxRule.vendorPrefixSelectors) : [];
17
+ const bVendorPrefixSelectorKeys = bSyntaxRule.vendorPrefixSelectors ? Object.keys(bSyntaxRule.vendorPrefixSelectors) : [];
18
18
  if (aVendorPrefixSelectorKeys.length !== bVendorPrefixSelectorKeys.length) return false;
19
19
  const isSameVendorPrefixSelectors = aVendorPrefixSelectorKeys.every((eachAKey)=>{
20
20
  if (!Object.prototype.hasOwnProperty.call(bSyntaxRule.vendorPrefixSelectors, eachAKey)) return false;
21
- const aValues = aSyntaxRule.vendorPrefixSelectors[eachAKey];
22
- const bValues = bSyntaxRule.vendorPrefixSelectors[eachAKey];
21
+ const aValues = aSyntaxRule.vendorPrefixSelectors?.[eachAKey] || [];
22
+ const bValues = bSyntaxRule.vendorPrefixSelectors?.[eachAKey] || [];
23
23
  return aValues.length === bValues.length && aValues.every((eachAValue)=>bValues.includes(eachAValue));
24
24
  });
25
25
  if (!isSameVendorPrefixSelectors) return false;
@@ -1,7 +1,7 @@
1
1
  function areRuleSelectorsEqual(aSyntaxRule, bSyntaxRule) {
2
2
  // suffix
3
- const aVendorSuffixSelectorKeys = Object.keys(aSyntaxRule.vendorSuffixSelectors);
4
- const bVendorSuffixSelectorKeys = Object.keys(bSyntaxRule.vendorSuffixSelectors);
3
+ const aVendorSuffixSelectorKeys = aSyntaxRule.vendorSuffixSelectors ? Object.keys(aSyntaxRule.vendorSuffixSelectors) : [];
4
+ const bVendorSuffixSelectorKeys = bSyntaxRule.vendorSuffixSelectors ? Object.keys(bSyntaxRule.vendorSuffixSelectors) : [];
5
5
  if (aVendorSuffixSelectorKeys.length !== bVendorSuffixSelectorKeys.length) return false;
6
6
  const isSameVendorSuffixSelectors = aVendorSuffixSelectorKeys.every((eachAKey)=>{
7
7
  if (!Object.prototype.hasOwnProperty.call(bSyntaxRule.vendorSuffixSelectors, eachAKey)) return false;
@@ -11,13 +11,13 @@ function areRuleSelectorsEqual(aSyntaxRule, bSyntaxRule) {
11
11
  });
12
12
  if (!isSameVendorSuffixSelectors) return false;
13
13
  // prefix
14
- const aVendorPrefixSelectorKeys = Object.keys(aSyntaxRule.vendorPrefixSelectors);
15
- const bVendorPrefixSelectorKeys = Object.keys(bSyntaxRule.vendorPrefixSelectors);
14
+ const aVendorPrefixSelectorKeys = aSyntaxRule.vendorPrefixSelectors ? Object.keys(aSyntaxRule.vendorPrefixSelectors) : [];
15
+ const bVendorPrefixSelectorKeys = bSyntaxRule.vendorPrefixSelectors ? Object.keys(bSyntaxRule.vendorPrefixSelectors) : [];
16
16
  if (aVendorPrefixSelectorKeys.length !== bVendorPrefixSelectorKeys.length) return false;
17
17
  const isSameVendorPrefixSelectors = aVendorPrefixSelectorKeys.every((eachAKey)=>{
18
18
  if (!Object.prototype.hasOwnProperty.call(bSyntaxRule.vendorPrefixSelectors, eachAKey)) return false;
19
- const aValues = aSyntaxRule.vendorPrefixSelectors[eachAKey];
20
- const bValues = bSyntaxRule.vendorPrefixSelectors[eachAKey];
19
+ const aValues = aSyntaxRule.vendorPrefixSelectors?.[eachAKey] || [];
20
+ const bValues = bSyntaxRule.vendorPrefixSelectors?.[eachAKey] || [];
21
21
  return aValues.length === bValues.length && aValues.every((eachAValue)=>bValues.includes(eachAValue));
22
22
  });
23
23
  if (!isSameVendorPrefixSelectors) return false;
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@master/css","type":"module","scripts":{"build":"techor build \"src/**/*.ts\"","dev":"pnpm build --watch","test":"vitest","type-check":"tsc --noEmit","lint":"eslint"},"license":"MIT","description":"The CSS language and framework for rapidly building modern and high-performance websites","author":"Aoyue Design LLC.","funding":"https://rc.css.master.co/sponsor","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/core"},"keywords":["style","styles","html","variants","virtual","virtual-css","utility","css","ui","lightweight","class","webpack","plugin","integration","vite","parcel","build-tools","mastercss"],"sideEffects":false,"main":"./dist/index.cjs","jsnext:main":"./dist/index.mjs","esnext":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.mjs"}},"bin":"./dist/bin/index.mjs","files":["dist"],"publishConfig":{"access":"public","provenance":true},"dependencies":{"@master/colors":"^2.1.0","@master/normal.css":"^3.1.0","@techor/extend":"^3.1.7","csstype":"^3.1.3"},"devDependencies":{"shared":"^2.0.0-rc.52"},"version":"2.0.0-rc.52"}
1
+ {"name":"@master/css","type":"module","scripts":{"build":"techor build \"src/**/*.ts\"","dev":"pnpm build --watch","test":"vitest","type-check":"tsc --noEmit","lint":"eslint"},"license":"MIT","description":"The CSS language and framework for rapidly building modern and high-performance websites","author":"Aoyue Design LLC.","funding":"https://rc.css.master.co/sponsor","homepage":"https://css.master.co","bugs":{"url":"https://github.com/master-co/css/issues"},"repository":{"type":"git","url":"https://github.com/master-co/css.git","directory":"packages/core"},"keywords":["style","styles","html","variants","virtual","virtual-css","utility","css","ui","lightweight","class","webpack","plugin","integration","vite","parcel","build-tools","mastercss"],"sideEffects":false,"main":"./dist/index.cjs","jsnext:main":"./dist/index.mjs","esnext":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.mjs"}},"bin":"./dist/bin/index.mjs","files":["dist"],"publishConfig":{"access":"public","provenance":true},"dependencies":{"@master/colors":"^2.1.0","@master/normal.css":"^3.1.0","@techor/extend":"^3.1.7","csstype":"^3.1.3"},"devDependencies":{"shared":"^2.0.0-rc.53"},"version":"2.0.0-rc.53"}