@master/css 2.0.0-rc.60 → 2.0.0-rc.62

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.
Files changed (122) hide show
  1. package/dist/animation-rule.cjs +24 -0
  2. package/dist/animation-rule.d.ts +11 -0
  3. package/dist/animation-rule.mjs +22 -0
  4. package/dist/common.cjs +50 -1
  5. package/dist/common.d.ts +14 -0
  6. package/dist/common.mjs +45 -2
  7. package/dist/config/at.cjs +13 -10
  8. package/dist/config/at.d.ts +4 -1
  9. package/dist/config/at.mjs +13 -10
  10. package/dist/config/index.cjs +3 -0
  11. package/dist/config/index.d.ts +2 -1
  12. package/dist/config/index.mjs +3 -1
  13. package/dist/config/modes.d.ts +4 -2
  14. package/dist/config/rules.cjs +28 -46
  15. package/dist/config/rules.d.ts +4 -2
  16. package/dist/config/rules.mjs +28 -46
  17. package/dist/config/screens.cjs +17 -0
  18. package/dist/config/screens.d.ts +14 -0
  19. package/dist/config/screens.mjs +15 -0
  20. package/dist/config/selectors.cjs +11 -15
  21. package/dist/config/selectors.d.ts +10 -8
  22. package/dist/config/selectors.mjs +11 -15
  23. package/dist/config/utilities.cjs +3 -0
  24. package/dist/config/utilities.d.ts +3 -0
  25. package/dist/config/utilities.mjs +3 -0
  26. package/dist/config/variables.cjs +0 -13
  27. package/dist/config/variables.d.ts +0 -13
  28. package/dist/config/variables.mjs +0 -13
  29. package/dist/core.cjs +438 -476
  30. package/dist/core.d.ts +14 -6
  31. package/dist/core.mjs +438 -476
  32. package/dist/factories/with-syntax-layer.cjs +37 -260
  33. package/dist/factories/with-syntax-layer.mjs +37 -260
  34. package/dist/index.cjs +38 -12
  35. package/dist/index.d.ts +19 -7
  36. package/dist/index.mjs +17 -7
  37. package/dist/layer.cjs +11 -7
  38. package/dist/layer.d.ts +4 -3
  39. package/dist/layer.mjs +11 -7
  40. package/dist/non-layer.cjs +10 -17
  41. package/dist/non-layer.d.ts +1 -1
  42. package/dist/non-layer.mjs +10 -17
  43. package/dist/rule.cjs +4 -6
  44. package/dist/rule.d.ts +3 -10
  45. package/dist/rule.mjs +4 -6
  46. package/dist/syntax-rule-type.cjs +7 -8
  47. package/dist/syntax-rule-type.d.ts +7 -7
  48. package/dist/syntax-rule-type.mjs +7 -8
  49. package/dist/syntax-rule.cjs +125 -315
  50. package/dist/syntax-rule.d.ts +18 -21
  51. package/dist/syntax-rule.mjs +126 -316
  52. package/dist/types/common.d.ts +2 -0
  53. package/dist/types/config.d.ts +12 -7
  54. package/dist/types/syntax.d.ts +5 -24
  55. package/dist/utils/compare-rule-priority.cjs +143 -0
  56. package/dist/utils/compare-rule-priority.d.ts +7 -0
  57. package/dist/utils/compare-rule-priority.mjs +138 -0
  58. package/dist/utils/equal-at-rules.cjs +22 -0
  59. package/dist/utils/equal-at-rules.d.ts +2 -0
  60. package/dist/utils/equal-at-rules.mjs +20 -0
  61. package/dist/utils/equal-declarations.cjs +10 -0
  62. package/dist/utils/equal-declarations.d.ts +2 -0
  63. package/dist/utils/equal-declarations.mjs +8 -0
  64. package/dist/utils/equal-selectors.cjs +70 -0
  65. package/dist/utils/equal-selectors.d.ts +2 -0
  66. package/dist/utils/equal-selectors.mjs +68 -0
  67. package/dist/utils/equal-variants.cjs +10 -0
  68. package/dist/utils/equal-variants.d.ts +2 -0
  69. package/dist/utils/equal-variants.mjs +8 -0
  70. package/dist/utils/extend-config.cjs +0 -1
  71. package/dist/utils/extend-config.mjs +0 -1
  72. package/dist/utils/generate-at.cjs +30 -0
  73. package/dist/utils/generate-at.d.ts +2 -0
  74. package/dist/utils/generate-at.mjs +28 -0
  75. package/dist/utils/generate-selector.cjs +49 -0
  76. package/dist/utils/generate-selector.d.ts +2 -0
  77. package/dist/utils/generate-selector.mjs +47 -0
  78. package/dist/utils/get-single-at-number-rule-node.cjs +9 -0
  79. package/dist/utils/get-single-at-number-rule-node.d.ts +2 -0
  80. package/dist/utils/get-single-at-number-rule-node.mjs +7 -0
  81. package/dist/utils/parse-at.cjs +157 -0
  82. package/dist/utils/parse-at.d.ts +39 -0
  83. package/dist/utils/parse-at.mjs +155 -0
  84. package/dist/utils/parse-pair.cjs +51 -0
  85. package/dist/utils/parse-pair.d.ts +8 -0
  86. package/dist/utils/parse-pair.mjs +49 -0
  87. package/dist/utils/parse-selector.cjs +112 -0
  88. package/dist/utils/parse-selector.d.ts +19 -0
  89. package/dist/utils/parse-selector.mjs +110 -0
  90. package/dist/utils/parse-value.cjs +39 -0
  91. package/dist/utils/parse-value.d.ts +2 -0
  92. package/dist/utils/parse-value.mjs +37 -0
  93. package/dist/utils/replace-char-outside-quotes.cjs +21 -0
  94. package/dist/utils/replace-char-outside-quotes.d.ts +1 -0
  95. package/dist/utils/replace-char-outside-quotes.mjs +19 -0
  96. package/dist/utils/sort-readable-classes.cjs +74 -0
  97. package/dist/utils/{reorder-for-readable-classes.d.ts → sort-readable-classes.d.ts} +1 -1
  98. package/dist/utils/sort-readable-classes.mjs +72 -0
  99. package/dist/utils/split-char-outside-quotes.cjs +29 -0
  100. package/dist/utils/split-char-outside-quotes.d.ts +1 -0
  101. package/dist/utils/split-char-outside-quotes.mjs +27 -0
  102. package/dist/variable-rule.cjs +86 -0
  103. package/dist/variable-rule.d.ts +23 -0
  104. package/dist/variable-rule.mjs +81 -0
  105. package/package.json +1 -1
  106. package/dist/utils/are-rule-at-equal.cjs +0 -22
  107. package/dist/utils/are-rule-at-equal.d.ts +0 -2
  108. package/dist/utils/are-rule-at-equal.mjs +0 -20
  109. package/dist/utils/are-rule-modes-equal.cjs +0 -7
  110. package/dist/utils/are-rule-modes-equal.d.ts +0 -2
  111. package/dist/utils/are-rule-modes-equal.mjs +0 -5
  112. package/dist/utils/are-rule-selectors-equal.cjs +0 -29
  113. package/dist/utils/are-rule-selectors-equal.d.ts +0 -2
  114. package/dist/utils/are-rule-selectors-equal.mjs +0 -27
  115. package/dist/utils/are-rule-states-equal.cjs +0 -11
  116. package/dist/utils/are-rule-states-equal.d.ts +0 -2
  117. package/dist/utils/are-rule-states-equal.mjs +0 -9
  118. package/dist/utils/are-rules-duplicated.cjs +0 -17
  119. package/dist/utils/are-rules-duplicated.d.ts +0 -2
  120. package/dist/utils/are-rules-duplicated.mjs +0 -15
  121. package/dist/utils/reorder-for-readable-classes.cjs +0 -62
  122. package/dist/utils/reorder-for-readable-classes.mjs +0 -60
@@ -1,4 +1,6 @@
1
- import { Rule } from '../rule.mjs';
1
+ import AnimationRule from '../animation-rule.mjs';
2
+ import compareRulePriority from '../utils/compare-rule-priority.mjs';
3
+ import VariableRule from '../variable-rule.mjs';
2
4
 
3
5
  function withSyntaxLayer(Base) {
4
6
  return class SyntaxLayer extends Base {
@@ -11,172 +13,13 @@ function withSyntaxLayer(Base) {
11
13
  * media width
12
14
  * media width selectors
13
15
  */ insert(syntaxRule) {
14
- if (this.rules.includes(syntaxRule)) return;
15
- let index;
16
- /**
17
- * 必須按斷點值遞增,並透過索引插入,
18
- * 以實現響應式先後套用的規則
19
- * @example <1 <2 <3 ALL >=1 >=2 >=3
20
- * @description
21
- */ const endIndex = this.rules.length - 1;
22
- const { at, atToken, order, priority } = syntaxRule;
23
- const findIndex = (startIndex, stopCheck, matchCheck)=>{
24
- let i = startIndex;
25
- for(; i <= endIndex; i++){
26
- const eachSyntaxRule = this.rules[i];
27
- if (stopCheck?.(eachSyntaxRule)) return matchCheck ? -1 : i - 1;
28
- if (matchCheck?.(eachSyntaxRule)) return i;
29
- }
30
- return matchCheck ? -1 : i - 1;
31
- };
32
- let matchStartIndex;
33
- let matchEndIndex;
34
- if (atToken) {
35
- const mediaStartIndex = this.rules.findIndex((eachSyntaxRule)=>eachSyntaxRule.at?.media);
36
- if (mediaStartIndex === -1) {
37
- index = endIndex + 1;
38
- } else {
39
- const maxWidthFeature = at.media?.find(({ name })=>name === 'max-width');
40
- const minWidthFeature = at.media?.find(({ name })=>name === 'min-width');
41
- if (maxWidthFeature || minWidthFeature) {
42
- const mediaWidthStartIndex = this.rules.findIndex((eachSyntaxRule)=>eachSyntaxRule.at?.media?.find(({ name })=>name === 'max-width' || name === 'min-width'));
43
- if (mediaWidthStartIndex === -1) {
44
- index = endIndex + 1;
45
- } else {
46
- if (maxWidthFeature && minWidthFeature) {
47
- /**
48
- * 範圍越小 ( 越限定 越侷限 ) 越優先,
49
- * 按照範圍 max-width - min-width 遞減排序
50
- * find 第一個所遇到同樣 feature 且範圍值比自己大的 rule,
51
- * 並插入在該 rule 之後,讓自己優先被套用
52
- */ if (priority === -1) {
53
- matchStartIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.priority !== -1, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width'));
54
- matchEndIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.priority !== -1);
55
- } else {
56
- matchStartIndex = findIndex(mediaWidthStartIndex, undefined, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1);
57
- matchEndIndex = endIndex;
58
- }
59
- if (matchStartIndex !== -1) {
60
- const range = maxWidthFeature.value - minWidthFeature.value;
61
- let i = matchEndIndex;
62
- const endI = matchStartIndex;
63
- matchStartIndex = matchEndIndex + 1;
64
- for(; i >= endI; i--){
65
- const eachSyntaxRule = this.rules[i];
66
- const eachMaxWidthFeature = eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width');
67
- const eachMinWidthFeature = eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width');
68
- if (!eachMaxWidthFeature || !eachMinWidthFeature) {
69
- break;
70
- } else {
71
- const eachRange = eachMaxWidthFeature.value - eachMinWidthFeature.value;
72
- if (eachRange < range) {
73
- matchEndIndex = i - 1;
74
- } else if (eachRange === range) {
75
- matchStartIndex = i;
76
- } else {
77
- break;
78
- }
79
- }
80
- }
81
- }
82
- } else if (minWidthFeature) {
83
- /**
84
- * find 第一個所遇到同樣 feature 且值比自己大的 rule,
85
- * 並插入在該 rule 之後,讓自己優先被套用
86
- */ if (priority === -1) {
87
- matchStartIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') || eachSyntaxRule.priority !== -1, (eachSyntaxRule)=>!eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width'));
88
- matchEndIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') || eachSyntaxRule.priority !== -1);
89
- } else {
90
- matchStartIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1, (eachSyntaxRule)=>!eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1);
91
- matchEndIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1);
92
- }
93
- if (matchStartIndex !== -1) {
94
- for(let i = matchEndIndex; i >= matchStartIndex; i--){
95
- const feature = this.rules[i].at.media?.find(({ name })=>name === 'min-width');
96
- if (!feature) continue;
97
- if (feature.value > minWidthFeature.value) {
98
- matchEndIndex = i - 1;
99
- } else if (feature.value < minWidthFeature.value) {
100
- matchStartIndex = i + 1;
101
- break;
102
- }
103
- }
104
- }
105
- } else {
106
- /**
107
- * find 第一個所遇到同樣 feature 且值比自己大的 rule,
108
- * 並插入在該 rule 之後,讓自己優先被套用
109
- */ if (priority === -1) {
110
- matchStartIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') || eachSyntaxRule.priority !== -1, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width'));
111
- matchEndIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') || eachSyntaxRule.priority !== -1);
112
- } else {
113
- matchStartIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width') && eachSyntaxRule.priority !== -1);
114
- matchEndIndex = findIndex(mediaWidthStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'min-width') && eachSyntaxRule.priority !== -1);
115
- }
116
- if (matchStartIndex !== -1) {
117
- for(let i = matchEndIndex; i >= matchStartIndex; i--){
118
- const feature = this.rules[i].at.media?.find(({ name })=>name === 'max-width');
119
- if (!feature) continue;
120
- if (feature.value < maxWidthFeature.value) {
121
- matchEndIndex = i - 1;
122
- } else if (feature.value > maxWidthFeature.value) {
123
- matchStartIndex = i + 1;
124
- break;
125
- }
126
- }
127
- }
128
- }
129
- }
130
- } else {
131
- if (priority === -1) {
132
- matchStartIndex = mediaStartIndex;
133
- matchEndIndex = findIndex(mediaStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width' || name === 'min-width') || eachSyntaxRule.priority !== -1);
134
- } else {
135
- matchStartIndex = findIndex(mediaStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width' || name === 'min-width'), (eachSyntaxRule)=>eachSyntaxRule.priority !== -1);
136
- matchEndIndex = findIndex(mediaStartIndex, (eachSyntaxRule)=>eachSyntaxRule.at.media?.find(({ name })=>name === 'max-width' || name === 'min-width'));
137
- }
138
- }
139
- }
140
- } else {
141
- if (priority === -1) {
142
- matchStartIndex = 0;
143
- matchEndIndex = findIndex(0, (eachSyntax)=>eachSyntax.atToken || eachSyntax.priority !== -1);
144
- } else {
145
- matchStartIndex = findIndex(0, (eachSyntax)=>eachSyntax.atToken, (eachSyntax)=>eachSyntax.priority !== -1);
146
- matchEndIndex = findIndex(0, (eachSyntax)=>eachSyntax.atToken);
147
- }
148
- }
149
- if (index === undefined && matchEndIndex !== undefined && matchStartIndex !== undefined) {
150
- if (matchStartIndex === -1) {
151
- index = matchEndIndex + 1;
152
- } else {
153
- if (priority === -1) {
154
- for(let i = matchStartIndex; i <= matchEndIndex; i++){
155
- const currentSyntaxRule = this.rules[i];
156
- if (currentSyntaxRule.order >= order) {
157
- index = i;
158
- break;
159
- }
160
- }
161
- } else {
162
- for(let i = matchStartIndex; i <= matchEndIndex; i++){
163
- const currentSyntaxRule = this.rules[i];
164
- if (currentSyntaxRule.priority < priority) {
165
- index = i;
166
- break;
167
- } else if (currentSyntaxRule.priority === priority) {
168
- if (currentSyntaxRule.order >= order) {
169
- index = i;
170
- break;
171
- }
172
- } else {
173
- index = i + 1;
174
- }
175
- }
176
- }
177
- if (index === undefined) {
178
- index = matchEndIndex + 1;
179
- }
16
+ if (this.rules.includes(syntaxRule) || !syntaxRule.valid) return;
17
+ let index = this.rules.length;
18
+ for(let i = 0; i < this.rules.length; i++){
19
+ const rule = this.rules[i];
20
+ if (compareRulePriority(syntaxRule, rule) < 0) {
21
+ index = i;
22
+ break;
180
23
  }
181
24
  }
182
25
  super.insert(syntaxRule, index);
@@ -197,108 +40,42 @@ function withSyntaxLayer(Base) {
197
40
  layer.tokenCounts.set(layerToken, count - 1);
198
41
  }
199
42
  };
200
- if (syntaxRule.variableNames) {
201
- for (const eachVariableName of syntaxRule.variableNames){
202
- deleteLayerToken(eachVariableName, this.css.themeLayer);
203
- }
204
- }
205
- if (syntaxRule.animationNames) {
206
- for (const eachKeyframeName of syntaxRule.animationNames){
207
- deleteLayerToken(eachKeyframeName, this.css.animationsNonLayer);
208
- }
209
- }
43
+ syntaxRule.variableNames?.forEach((eachVariableName)=>{
44
+ deleteLayerToken(eachVariableName, this.css.themeLayer);
45
+ });
46
+ syntaxRule.animationNames?.forEach((eachAnimationName)=>{
47
+ deleteLayerToken(eachAnimationName, this.css.animationsNonLayer);
48
+ });
210
49
  syntaxRule.definition.delete?.call(syntaxRule, syntaxRule.name);
211
50
  return syntaxRule;
212
51
  }
213
52
  insertVariables(syntaxRule) {
214
- if (syntaxRule.variableNames) {
215
- for (const eachVariableName of syntaxRule.variableNames){
53
+ syntaxRule.variableNames?.forEach((eachVariableName)=>{
54
+ if (this.css.themeLayer.rules.find(({ name })=>name === eachVariableName)) {
55
+ const count = this.css.themeLayer.tokenCounts.get(eachVariableName) || 0;
56
+ this.css.themeLayer.tokenCounts.set(eachVariableName, count + 1);
57
+ } else {
216
58
  const variable = this.css.variables.get(eachVariableName);
217
- if (this.css.themeLayer.rules.find(({ name })=>name === eachVariableName)) {
218
- const count = this.css.themeLayer.tokenCounts.get(eachVariableName) || 0;
219
- this.css.themeLayer.tokenCounts.set(eachVariableName, count + 1);
220
- } else {
221
- const newRule = new Rule(eachVariableName);
222
- const addNative = (mode, _variable)=>{
223
- let isDefaultMode = false;
224
- let preifxCssRuleText;
225
- let selectorText;
226
- let endCurlyBracketCount = 1;
227
- if (mode) {
228
- switch(this.css.config.modes?.[mode]){
229
- case 'media':
230
- selectorText = ':root';
231
- preifxCssRuleText = `@media(prefers-color-scheme:${mode}){${selectorText}`;
232
- endCurlyBracketCount++;
233
- break;
234
- case 'host':
235
- preifxCssRuleText = selectorText = `:host(.${mode})`;
236
- if (!variable?.value && this.css.config.defaultMode === mode) {
237
- preifxCssRuleText += ',:host';
238
- isDefaultMode = true;
239
- }
240
- break;
241
- case 'class':
242
- preifxCssRuleText = selectorText = `.${mode}`;
243
- if (!variable?.value && this.css.config.defaultMode === mode) {
244
- preifxCssRuleText += ',:root';
245
- isDefaultMode = true;
246
- }
247
- break;
248
- default:
249
- return;
250
- }
251
- } else {
252
- preifxCssRuleText = selectorText = ':root';
253
- }
254
- const cssRuleText = `${preifxCssRuleText}{--${eachVariableName}:${String(_variable.value)}${'}'.repeat(endCurlyBracketCount)}`;
255
- if (isDefaultMode) {
256
- newRule.nodes.unshift({
257
- selectorText,
258
- text: cssRuleText
259
- });
260
- } else {
261
- newRule.nodes.push({
262
- text: cssRuleText
263
- });
264
- }
265
- };
266
- if (variable?.value !== undefined) {
267
- addNative('', variable);
268
- }
269
- if (variable?.modes) {
270
- for(const mode in variable.modes){
271
- addNative(mode, variable.modes[mode]);
272
- }
273
- }
274
- this.css.themeLayer.insert(newRule);
275
- this.css.themeLayer.tokenCounts.set(eachVariableName, 1);
276
- }
59
+ if (!variable) return;
60
+ const newRule = new VariableRule(eachVariableName, variable, this.css);
61
+ this.css.themeLayer.insert(newRule);
62
+ this.css.themeLayer.tokenCounts.set(eachVariableName, 1);
277
63
  }
278
- }
64
+ });
279
65
  }
280
66
  insertAnimations(syntaxRule) {
281
- if (syntaxRule.animationNames) {
282
- for (const eachAnimationName of syntaxRule.animationNames){
283
- if (this.css.animationsNonLayer.rules.find(({ name })=>name === eachAnimationName)) {
284
- const count = this.css.animationsNonLayer.tokenCounts.get(eachAnimationName) || 0;
285
- this.css.animationsNonLayer.tokenCounts.set(eachAnimationName, count + 1);
286
- } else {
287
- const keyframes = this.css.animations.get(eachAnimationName);
288
- if (!keyframes) continue;
289
- const keyframeText = Object.entries(keyframes).reduce((acc, [key, variables])=>{
290
- const variableText = Object.entries(variables).map(([name, value])=>`${name}:${value}`).join(';');
291
- return acc + `${key}{${variableText}}`;
292
- }, '');
293
- this.css.animationsNonLayer.insert(new Rule(eachAnimationName, [
294
- {
295
- text: `@keyframes ${eachAnimationName}{${keyframeText}}`
296
- }
297
- ]));
298
- this.css.animationsNonLayer.tokenCounts.set(eachAnimationName, 1);
299
- }
67
+ syntaxRule.animationNames?.forEach((eachAnimationName)=>{
68
+ if (this.css.animationsNonLayer.rules.find(({ name })=>name === eachAnimationName)) {
69
+ const count = this.css.animationsNonLayer.tokenCounts.get(eachAnimationName) || 0;
70
+ this.css.animationsNonLayer.tokenCounts.set(eachAnimationName, count + 1);
71
+ } else {
72
+ const keyframes = this.css.animations.get(eachAnimationName);
73
+ if (!keyframes) return;
74
+ const newRule = new AnimationRule(eachAnimationName, keyframes, this.css);
75
+ this.css.animationsNonLayer.insert(newRule);
76
+ this.css.animationsNonLayer.tokenCounts.set(eachAnimationName, 1);
300
77
  }
301
- }
78
+ });
302
79
  }
303
80
  };
304
81
  }
package/dist/index.cjs CHANGED
@@ -11,16 +11,25 @@ var layer = require('./layer.cjs');
11
11
  var syntaxLayer = require('./syntax-layer.cjs');
12
12
  var nonLayer = require('./non-layer.cjs');
13
13
  var syntaxRuleType = require('./syntax-rule-type.cjs');
14
+ var variableRule = require('./variable-rule.cjs');
15
+ var animationRule = require('./animation-rule.cjs');
14
16
  var withSyntaxLayer = require('./factories/with-syntax-layer.cjs');
15
17
  var extendConfig = require('./utils/extend-config.cjs');
16
- var reorderForReadableClasses = require('./utils/reorder-for-readable-classes.cjs');
17
- var areRuleModesEqual = require('./utils/are-rule-modes-equal.cjs');
18
- var areRuleAtEqual = require('./utils/are-rule-at-equal.cjs');
19
- var areRuleSelectorsEqual = require('./utils/are-rule-selectors-equal.cjs');
20
- var areRuleStatesEqual = require('./utils/are-rule-states-equal.cjs');
21
- var areRulesDuplicated = require('./utils/are-rules-duplicated.cjs');
18
+ var sortReadableClasses = require('./utils/sort-readable-classes.cjs');
19
+ var equalAtRules = require('./utils/equal-at-rules.cjs');
20
+ var equalSelectors = require('./utils/equal-selectors.cjs');
21
+ var equalVariants = require('./utils/equal-variants.cjs');
22
+ var equalDeclarations = require('./utils/equal-declarations.cjs');
22
23
  var generateCss = require('./utils/generate-css.cjs');
23
24
  var isCoreRule = require('./utils/is-core-rule.cjs');
25
+ var parsePair = require('./utils/parse-pair.cjs');
26
+ var parseValue = require('./utils/parse-value.cjs');
27
+ var parseAt = require('./utils/parse-at.cjs');
28
+ var generateAt = require('./utils/generate-at.cjs');
29
+ var parseSelector = require('./utils/parse-selector.cjs');
30
+ var generateSelector = require('./utils/generate-selector.cjs');
31
+ var getSingleAtNumberRuleNode = require('./utils/get-single-at-number-rule-node.cjs');
32
+ var compareRulePriority = require('./utils/compare-rule-priority.cjs');
24
33
  var at = require('./config/at.cjs');
25
34
  var selectors = require('./config/selectors.cjs');
26
35
  var utilities = require('./config/utilities.cjs');
@@ -29,11 +38,16 @@ var functions = require('./config/functions.cjs');
29
38
  var animations = require('./config/animations.cjs');
30
39
  var variables = require('./config/variables.cjs');
31
40
  var modes = require('./config/modes.cjs');
41
+ var screens = require('./config/screens.cjs');
32
42
 
33
43
 
34
44
 
35
45
  exports.config = index.config;
36
46
  exports.ANIMATION_SIGN = common.ANIMATION_SIGN;
47
+ exports.AT_COMPARABLE_FEATURES = common.AT_COMPARABLE_FEATURES;
48
+ exports.AT_COMPARISON_OPERATORS = common.AT_COMPARISON_OPERATORS;
49
+ exports.AT_IDENTIFIERS = common.AT_IDENTIFIERS;
50
+ exports.AT_LOGICAL_OPERATORS = common.AT_LOGICAL_OPERATORS;
37
51
  exports.AT_SIGN = common.AT_SIGN;
38
52
  exports.BASE_UNIT_REGEX = common.BASE_UNIT_REGEX;
39
53
  exports.BORDER_STYLE_VALUES = common.BORDER_STYLE_VALUES;
@@ -41,12 +55,14 @@ exports.CLASS_ATTRIBUTES = common.CLASS_ATTRIBUTES;
41
55
  exports.CLASS_DECLARATIONS = common.CLASS_DECLARATIONS;
42
56
  exports.CLASS_FUNCTIONS = common.CLASS_FUNCTIONS;
43
57
  exports.COLOR_VALUE_REGEX = common.COLOR_VALUE_REGEX;
58
+ exports.COMPARISION_OPERATORS = common.COMPARISION_OPERATORS;
44
59
  exports.DELIMITER_SIGN = common.DELIMITER_SIGN;
45
60
  exports.IMAGE_VALUE_REGEX = common.IMAGE_VALUE_REGEX;
46
61
  exports.NUMBER_VALUE_REGEX = common.NUMBER_VALUE_REGEX;
47
62
  exports.OFFICIAL_URL = common.OFFICIAL_URL;
48
63
  exports.QUERY_COMPARISON_OPERATORS = common.QUERY_COMPARISON_OPERATORS;
49
64
  exports.QUERY_LOGICAL_OPERATORS = common.QUERY_LOGICAL_OPERATORS;
65
+ exports.SELECTOR_COMBINATORS = common.SELECTOR_COMBINATORS;
50
66
  exports.SELECTOR_SIGNS = common.SELECTOR_SIGNS;
51
67
  exports.SEPARATOR_SIGN = common.SEPARATOR_SIGN;
52
68
  exports.SEPARATOR_SIGNS = common.SEPARATOR_SIGNS;
@@ -62,16 +78,25 @@ exports.Layer = layer;
62
78
  exports.SyntaxLayer = syntaxLayer;
63
79
  exports.NonLayer = nonLayer;
64
80
  exports.SyntaxRuleType = syntaxRuleType;
81
+ exports.VariableRule = variableRule.default;
82
+ exports.AnimationRule = animationRule;
65
83
  exports.withSyntaxLayer = withSyntaxLayer;
66
84
  exports.extendConfig = extendConfig;
67
- exports.reorderForReadableClasses = reorderForReadableClasses;
68
- exports.areRuleModesEqual = areRuleModesEqual;
69
- exports.areRuleAtEqual = areRuleAtEqual;
70
- exports.areRuleSelectorsEqual = areRuleSelectorsEqual;
71
- exports.areRuleStatesEqual = areRuleStatesEqual;
72
- exports.areRulesDuplicated = areRulesDuplicated;
85
+ exports.sortReadableClasses = sortReadableClasses;
86
+ exports.equalAtRules = equalAtRules;
87
+ exports.equalSelectors = equalSelectors;
88
+ exports.equalVariants = equalVariants;
89
+ exports.equalDeclarations = equalDeclarations;
73
90
  exports.generateCSS = generateCss;
74
91
  exports.isCoreRule = isCoreRule;
92
+ exports.parsePair = parsePair;
93
+ exports.parseValue = parseValue;
94
+ exports.parseAt = parseAt;
95
+ exports.generateAt = generateAt;
96
+ exports.parseSelector = parseSelector;
97
+ exports.generateSelector = generateSelector;
98
+ exports.getSingleAtNumberRuleNode = getSingleAtNumberRuleNode;
99
+ exports.compareRulePriority = compareRulePriority.default;
75
100
  exports.at = at;
76
101
  exports.selectors = selectors;
77
102
  exports.utilities = utilities;
@@ -80,3 +105,4 @@ exports.functions = functions;
80
105
  exports.animations = animations;
81
106
  exports.variables = variables;
82
107
  exports.modes = modes;
108
+ exports.screens = screens;
package/dist/index.d.ts CHANGED
@@ -7,16 +7,28 @@ export { default as Layer } from './layer';
7
7
  export { default as SyntaxLayer } from './syntax-layer';
8
8
  export { default as NonLayer } from './non-layer';
9
9
  export { default as SyntaxRuleType } from './syntax-rule-type';
10
- export { default as MasterCSS, default } from './core';
10
+ export { default as VariableRule } from './variable-rule';
11
+ export { default as AnimationRule } from './animation-rule';
11
12
  export * from './types/config';
12
13
  export * from './types/syntax';
14
+ export * from './types/common';
13
15
  export { default as withSyntaxLayer } from './factories/with-syntax-layer';
14
16
  export { default as extendConfig } from './utils/extend-config';
15
- export { default as reorderForReadableClasses } from './utils/reorder-for-readable-classes';
16
- export { default as areRuleModesEqual } from './utils/are-rule-modes-equal';
17
- export { default as areRuleAtEqual } from './utils/are-rule-at-equal';
18
- export { default as areRuleSelectorsEqual } from './utils/are-rule-selectors-equal';
19
- export { default as areRuleStatesEqual } from './utils/are-rule-states-equal';
20
- export { default as areRulesDuplicated } from './utils/are-rules-duplicated';
17
+ export { default as sortReadableClasses } from './utils/sort-readable-classes';
18
+ export { default as equalAtRules } from './utils/equal-at-rules';
19
+ export { default as equalSelectors } from './utils/equal-selectors';
20
+ export { default as equalVariants } from './utils/equal-variants';
21
+ export { default as equalDeclarations } from './utils/equal-declarations';
21
22
  export { default as generateCSS } from './utils/generate-css';
22
23
  export { default as isCoreRule } from './utils/is-core-rule';
24
+ export { default as parsePair } from './utils/parse-pair';
25
+ export { default as parseValue } from './utils/parse-value';
26
+ export { default as parseAt } from './utils/parse-at';
27
+ export type * from './utils/parse-at';
28
+ export { default as generateAt } from './utils/generate-at';
29
+ export { default as parseSelector } from './utils/parse-selector';
30
+ export type * from './utils/parse-selector';
31
+ export { default as generateSelector } from './utils/generate-selector';
32
+ export { default as getSingleAtNumberRuleNode } from './utils/get-single-at-number-rule-node';
33
+ export { default as compareRulePriority } from './utils/compare-rule-priority';
34
+ export { default as MasterCSS, default } from './core';
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  export { config } from './config/index.mjs';
2
- export { ANIMATION_SIGN, AT_SIGN, BASE_UNIT_REGEX, BORDER_STYLE_VALUES, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, COLOR_VALUE_REGEX, DELIMITER_SIGN, IMAGE_VALUE_REGEX, NUMBER_VALUE_REGEX, OFFICIAL_URL, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_SIGNS, SEPARATOR_SIGN, SEPARATOR_SIGNS, TRANSITION_SIGN, UNIT_REGEX, VALUE_DELIMITERS, VALUE_UNITS } from './common.mjs';
2
+ export { ANIMATION_SIGN, AT_COMPARABLE_FEATURES, AT_COMPARISON_OPERATORS, AT_IDENTIFIERS, AT_LOGICAL_OPERATORS, AT_SIGN, BASE_UNIT_REGEX, BORDER_STYLE_VALUES, CLASS_ATTRIBUTES, CLASS_DECLARATIONS, CLASS_FUNCTIONS, COLOR_VALUE_REGEX, COMPARISION_OPERATORS, DELIMITER_SIGN, IMAGE_VALUE_REGEX, NUMBER_VALUE_REGEX, OFFICIAL_URL, QUERY_COMPARISON_OPERATORS, QUERY_LOGICAL_OPERATORS, SELECTOR_COMBINATORS, SELECTOR_SIGNS, SEPARATOR_SIGN, SEPARATOR_SIGNS, TRANSITION_SIGN, UNIT_REGEX, VALUE_DELIMITERS, VALUE_UNITS } from './common.mjs';
3
3
  export { default as MasterCSS, default } from './core.mjs';
4
4
  export { SyntaxRule } from './syntax-rule.mjs';
5
5
  export { Rule } from './rule.mjs';
@@ -7,16 +7,25 @@ export { default as Layer } from './layer.mjs';
7
7
  export { default as SyntaxLayer } from './syntax-layer.mjs';
8
8
  export { default as NonLayer } from './non-layer.mjs';
9
9
  export { default as SyntaxRuleType } from './syntax-rule-type.mjs';
10
+ export { default as VariableRule } from './variable-rule.mjs';
11
+ export { default as AnimationRule } from './animation-rule.mjs';
10
12
  export { default as withSyntaxLayer } from './factories/with-syntax-layer.mjs';
11
13
  export { default as extendConfig } from './utils/extend-config.mjs';
12
- export { default as reorderForReadableClasses } from './utils/reorder-for-readable-classes.mjs';
13
- export { default as areRuleModesEqual } from './utils/are-rule-modes-equal.mjs';
14
- export { default as areRuleAtEqual } from './utils/are-rule-at-equal.mjs';
15
- export { default as areRuleSelectorsEqual } from './utils/are-rule-selectors-equal.mjs';
16
- export { default as areRuleStatesEqual } from './utils/are-rule-states-equal.mjs';
17
- export { default as areRulesDuplicated } from './utils/are-rules-duplicated.mjs';
14
+ export { default as sortReadableClasses } from './utils/sort-readable-classes.mjs';
15
+ export { default as equalAtRules } from './utils/equal-at-rules.mjs';
16
+ export { default as equalSelectors } from './utils/equal-selectors.mjs';
17
+ export { default as equalVariants } from './utils/equal-variants.mjs';
18
+ export { default as equalDeclarations } from './utils/equal-declarations.mjs';
18
19
  export { default as generateCSS } from './utils/generate-css.mjs';
19
20
  export { default as isCoreRule } from './utils/is-core-rule.mjs';
21
+ export { default as parsePair } from './utils/parse-pair.mjs';
22
+ export { default as parseValue } from './utils/parse-value.mjs';
23
+ export { default as parseAt } from './utils/parse-at.mjs';
24
+ export { default as generateAt } from './utils/generate-at.mjs';
25
+ export { default as parseSelector } from './utils/parse-selector.mjs';
26
+ export { default as generateSelector } from './utils/generate-selector.mjs';
27
+ export { default as getSingleAtNumberRuleNode } from './utils/get-single-at-number-rule-node.mjs';
28
+ export { default as compareRulePriority } from './utils/compare-rule-priority.mjs';
20
29
  export { default as at } from './config/at.mjs';
21
30
  export { default as selectors } from './config/selectors.mjs';
22
31
  export { default as utilities } from './config/utilities.mjs';
@@ -25,3 +34,4 @@ export { default as functions } from './config/functions.mjs';
25
34
  export { default as animations } from './config/animations.mjs';
26
35
  export { default as variables } from './config/variables.mjs';
27
36
  export { default as modes } from './config/modes.mjs';
37
+ export { default as screens } from './config/screens.mjs';
package/dist/layer.cjs CHANGED
@@ -19,20 +19,22 @@ class Layer {
19
19
  }
20
20
  insert(rule, index = this.rules.length) {
21
21
  if (this.rules.find(({ key })=>key === rule.key)) return;
22
+ this.rules.splice(index, 0, rule);
23
+ // should attach after inserting, because this.text is possibly empty
22
24
  if (!this.css.rules.includes(this)) {
23
25
  this.attach();
24
26
  }
25
- this.rules.splice(index, 0, rule);
26
27
  return index;
27
28
  }
28
29
  delete(key) {
29
- const rule = this.rules.find((rule)=>rule.key === key);
30
- if (!rule) return;
31
- if (this.rules.length === 1) {
30
+ const index = this.rules.findIndex((rule)=>rule.key === key);
31
+ if (index === -1) return;
32
+ const deletedRule = this.rules[index];
33
+ this.rules.splice(index, 1);
34
+ if (this.rules.length === 0) {
32
35
  this.detach();
33
36
  }
34
- this.rules.splice(this.rules.indexOf(rule), 1);
35
- return rule;
37
+ return deletedRule;
36
38
  }
37
39
  reset() {
38
40
  this.rules.length = 0;
@@ -43,7 +45,9 @@ class Layer {
43
45
  this.tokenCounts.clear();
44
46
  }
45
47
  get text() {
46
- return '@layer ' + this.name + '{' + this.rules.map(({ text })=>text).join('') + '}';
48
+ const ruleText = this.rules.map(({ text })=>text).join('');
49
+ if (!ruleText) return '';
50
+ return '@layer ' + this.name + '{' + ruleText + '}';
47
51
  }
48
52
  }
49
53
 
package/dist/layer.d.ts CHANGED
@@ -1,15 +1,16 @@
1
1
  import { Rule } from './rule';
2
2
  import MasterCSS from './core';
3
+ import VariableRule from './variable-rule';
3
4
  export default class Layer {
4
5
  name: string;
5
6
  css: MasterCSS;
6
- readonly rules: Rule[];
7
+ readonly rules: (Rule | VariableRule)[];
7
8
  readonly tokenCounts: Map<string, number>;
8
9
  constructor(name: string, css: MasterCSS);
9
10
  attach(): void;
10
11
  detach(): void;
11
- insert(rule: Rule, index?: number): number | undefined;
12
- delete(key: string): Rule | undefined;
12
+ insert(rule: Rule | VariableRule, index?: number): number | undefined;
13
+ delete(key: string): Rule | VariableRule | undefined;
13
14
  reset(): void;
14
15
  get text(): string;
15
16
  }
package/dist/layer.mjs CHANGED
@@ -17,20 +17,22 @@ class Layer {
17
17
  }
18
18
  insert(rule, index = this.rules.length) {
19
19
  if (this.rules.find(({ key })=>key === rule.key)) return;
20
+ this.rules.splice(index, 0, rule);
21
+ // should attach after inserting, because this.text is possibly empty
20
22
  if (!this.css.rules.includes(this)) {
21
23
  this.attach();
22
24
  }
23
- this.rules.splice(index, 0, rule);
24
25
  return index;
25
26
  }
26
27
  delete(key) {
27
- const rule = this.rules.find((rule)=>rule.key === key);
28
- if (!rule) return;
29
- if (this.rules.length === 1) {
28
+ const index = this.rules.findIndex((rule)=>rule.key === key);
29
+ if (index === -1) return;
30
+ const deletedRule = this.rules[index];
31
+ this.rules.splice(index, 1);
32
+ if (this.rules.length === 0) {
30
33
  this.detach();
31
34
  }
32
- this.rules.splice(this.rules.indexOf(rule), 1);
33
- return rule;
35
+ return deletedRule;
34
36
  }
35
37
  reset() {
36
38
  this.rules.length = 0;
@@ -41,7 +43,9 @@ class Layer {
41
43
  this.tokenCounts.clear();
42
44
  }
43
45
  get text() {
44
- return '@layer ' + this.name + '{' + this.rules.map(({ text })=>text).join('') + '}';
46
+ const ruleText = this.rules.map(({ text })=>text).join('');
47
+ if (!ruleText) return '';
48
+ return '@layer ' + this.name + '{' + ruleText + '}';
45
49
  }
46
50
  }
47
51