@master/css 2.0.0-rc.47 → 2.0.0-rc.49

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 (72) hide show
  1. package/dist/common.cjs +1 -1
  2. package/dist/common.mjs +1 -1
  3. package/dist/config/functions.d.ts +1 -1
  4. package/dist/config/index.cjs +3 -3
  5. package/dist/config/index.d.ts +3 -48
  6. package/dist/config/index.mjs +3 -3
  7. package/dist/config/modes.d.ts +1 -1
  8. package/dist/config/{syntaxes.cjs → rules.cjs} +282 -282
  9. package/dist/config/rules.d.ts +282 -0
  10. package/dist/config/{syntaxes.mjs → rules.mjs} +282 -282
  11. package/dist/core.cjs +229 -611
  12. package/dist/core.d.ts +36 -67
  13. package/dist/core.mjs +229 -611
  14. package/dist/index.cjs +14 -6
  15. package/dist/index.d.ts +8 -4
  16. package/dist/index.mjs +7 -3
  17. package/dist/layer.cjs +107 -23
  18. package/dist/layer.d.ts +13 -27
  19. package/dist/layer.mjs +107 -23
  20. package/dist/non-layer.cjs +65 -0
  21. package/dist/non-layer.d.ts +12 -0
  22. package/dist/non-layer.mjs +63 -0
  23. package/dist/rule.cjs +8 -708
  24. package/dist/rule.d.ts +6 -147
  25. package/dist/rule.mjs +8 -708
  26. package/dist/shared/utils/find-native-css-rule-index.cjs +12 -0
  27. package/dist/shared/utils/find-native-css-rule-index.mjs +10 -0
  28. package/dist/syntax-layer.cjs +291 -0
  29. package/dist/syntax-layer.d.ts +17 -0
  30. package/dist/syntax-layer.mjs +289 -0
  31. package/dist/syntax-rule-type.cjs +27 -0
  32. package/dist/syntax-rule-type.d.ts +28 -0
  33. package/dist/syntax-rule-type.mjs +25 -0
  34. package/dist/syntax-rule.cjs +717 -0
  35. package/dist/syntax-rule.d.ts +47 -0
  36. package/dist/syntax-rule.mjs +715 -0
  37. package/dist/types/config.cjs +2 -0
  38. package/dist/types/config.d.ts +70 -0
  39. package/dist/types/config.mjs +1 -0
  40. package/dist/types/syntax.cjs +2 -0
  41. package/dist/types/syntax.d.ts +106 -0
  42. package/dist/types/syntax.mjs +1 -0
  43. package/dist/utils/are-rule-at-equal.cjs +7 -7
  44. package/dist/utils/are-rule-at-equal.d.ts +2 -2
  45. package/dist/utils/are-rule-at-equal.mjs +7 -7
  46. package/dist/utils/are-rule-modes-equal.cjs +2 -2
  47. package/dist/utils/are-rule-modes-equal.d.ts +2 -2
  48. package/dist/utils/are-rule-modes-equal.mjs +2 -2
  49. package/dist/utils/are-rule-selectors-equal.cjs +11 -11
  50. package/dist/utils/are-rule-selectors-equal.d.ts +2 -2
  51. package/dist/utils/are-rule-selectors-equal.mjs +11 -11
  52. package/dist/utils/are-rule-states-equal.cjs +2 -2
  53. package/dist/utils/are-rule-states-equal.d.ts +2 -2
  54. package/dist/utils/are-rule-states-equal.mjs +2 -2
  55. package/dist/utils/are-rules-duplicated.cjs +17 -0
  56. package/dist/utils/are-rules-duplicated.d.ts +2 -0
  57. package/dist/utils/are-rules-duplicated.mjs +15 -0
  58. package/dist/utils/autofill-solid-style.d.ts +2 -2
  59. package/dist/utils/extend-config.cjs +5 -5
  60. package/dist/utils/extend-config.d.ts +1 -1
  61. package/dist/utils/extend-config.mjs +5 -5
  62. package/dist/utils/generate-css.cjs +1 -1
  63. package/dist/utils/generate-css.mjs +1 -1
  64. package/dist/utils/is-core-rule.cjs +2 -2
  65. package/dist/utils/is-core-rule.mjs +2 -2
  66. package/dist/utils/reorder-for-readable-classes.cjs +11 -11
  67. package/dist/utils/reorder-for-readable-classes.mjs +11 -11
  68. package/package.json +1 -1
  69. package/dist/config/syntaxes.d.ts +0 -282
  70. package/dist/utils/are-syntaxes-duplicated.cjs +0 -17
  71. package/dist/utils/are-syntaxes-duplicated.d.ts +0 -2
  72. package/dist/utils/are-syntaxes-duplicated.mjs +0 -15
package/dist/index.cjs CHANGED
@@ -3,17 +3,21 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var index = require('./config/index.cjs');
6
- var rule = require('./rule.cjs');
7
6
  var common = require('./common.cjs');
8
7
  var core = require('./core.cjs');
8
+ var syntaxRule = require('./syntax-rule.cjs');
9
+ var rule = require('./rule.cjs');
9
10
  var layer = require('./layer.cjs');
11
+ var syntaxLayer = require('./syntax-layer.cjs');
12
+ var nonLayer = require('./non-layer.cjs');
13
+ var syntaxRuleType = require('./syntax-rule-type.cjs');
10
14
  var extendConfig = require('./utils/extend-config.cjs');
11
15
  var reorderForReadableClasses = require('./utils/reorder-for-readable-classes.cjs');
12
16
  var areRuleModesEqual = require('./utils/are-rule-modes-equal.cjs');
13
17
  var areRuleAtEqual = require('./utils/are-rule-at-equal.cjs');
14
18
  var areRuleSelectorsEqual = require('./utils/are-rule-selectors-equal.cjs');
15
19
  var areRuleStatesEqual = require('./utils/are-rule-states-equal.cjs');
16
- var areSyntaxesDuplicated = require('./utils/are-syntaxes-duplicated.cjs');
20
+ var areRulesDuplicated = require('./utils/are-rules-duplicated.cjs');
17
21
  var generateCss = require('./utils/generate-css.cjs');
18
22
  var isCoreRule = require('./utils/is-core-rule.cjs');
19
23
  var at = require('./config/at.cjs');
@@ -23,12 +27,11 @@ var functions = require('./config/functions.cjs');
23
27
  var animations = require('./config/animations.cjs');
24
28
  var variables = require('./config/variables.cjs');
25
29
  var modes = require('./config/modes.cjs');
26
- var syntaxes = require('./config/syntaxes.cjs');
30
+ var rules = require('./config/rules.cjs');
27
31
 
28
32
 
29
33
 
30
34
  exports.config = index.config;
31
- exports.Rule = rule.Rule;
32
35
  exports.ANIMATION_SIGN = common.ANIMATION_SIGN;
33
36
  exports.AT_SIGN = common.AT_SIGN;
34
37
  exports.BASE_UNIT_REGEX = common.BASE_UNIT_REGEX;
@@ -53,14 +56,19 @@ exports.VALUE_UNITS = common.VALUE_UNITS;
53
56
  exports.MasterCSS = core.default;
54
57
  exports.default = core.default;
55
58
  exports.masterCSSs = core.masterCSSs;
59
+ exports.SyntaxRule = syntaxRule.SyntaxRule;
60
+ exports.Rule = rule.Rule;
56
61
  exports.Layer = layer;
62
+ exports.SyntaxLayer = syntaxLayer;
63
+ exports.NonLayer = nonLayer;
64
+ exports.SyntaxRuleType = syntaxRuleType;
57
65
  exports.extendConfig = extendConfig;
58
66
  exports.reorderForReadableClasses = reorderForReadableClasses;
59
67
  exports.areRuleModesEqual = areRuleModesEqual;
60
68
  exports.areRuleAtEqual = areRuleAtEqual;
61
69
  exports.areRuleSelectorsEqual = areRuleSelectorsEqual;
62
70
  exports.areRuleStatesEqual = areRuleStatesEqual;
63
- exports.areRulesDuplicated = areSyntaxesDuplicated;
71
+ exports.areRulesDuplicated = areRulesDuplicated;
64
72
  exports.generateCSS = generateCss;
65
73
  exports.isCoreRule = isCoreRule;
66
74
  exports.at = at;
@@ -70,4 +78,4 @@ exports.functions = functions;
70
78
  exports.animations = animations;
71
79
  exports.variables = variables;
72
80
  exports.modes = modes;
73
- exports.syntaxes = syntaxes;
81
+ exports.rules = rules;
package/dist/index.d.ts CHANGED
@@ -1,17 +1,21 @@
1
1
  export * from './config';
2
- export * from './rule';
3
2
  export * from './common';
4
3
  export * from './core';
5
- export { Rule } from './rule';
4
+ export * from './syntax-rule';
5
+ export * from './rule';
6
6
  export { default as Layer } from './layer';
7
+ export { default as SyntaxLayer } from './syntax-layer';
8
+ export { default as NonLayer } from './non-layer';
9
+ export { default as SyntaxRuleType } from './syntax-rule-type';
7
10
  export { default as MasterCSS, default } from './core';
11
+ export * from './types/config';
12
+ export * from './types/syntax';
8
13
  export { default as extendConfig } from './utils/extend-config';
9
14
  export { default as reorderForReadableClasses } from './utils/reorder-for-readable-classes';
10
15
  export { default as areRuleModesEqual } from './utils/are-rule-modes-equal';
11
16
  export { default as areRuleAtEqual } from './utils/are-rule-at-equal';
12
17
  export { default as areRuleSelectorsEqual } from './utils/are-rule-selectors-equal';
13
18
  export { default as areRuleStatesEqual } from './utils/are-rule-states-equal';
14
- export { default as areRulesDuplicated } from './utils/are-syntaxes-duplicated';
19
+ export { default as areRulesDuplicated } from './utils/are-rules-duplicated';
15
20
  export { default as generateCSS } from './utils/generate-css';
16
21
  export { default as isCoreRule } from './utils/is-core-rule';
17
- export type { NativeRule, MediaFeatureComponent, MediaQuery } from './rule';
package/dist/index.mjs CHANGED
@@ -1,15 +1,19 @@
1
1
  export { config } from './config/index.mjs';
2
- export { Rule } from './rule.mjs';
3
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';
4
3
  export { default as MasterCSS, default, masterCSSs } from './core.mjs';
4
+ export { SyntaxRule } from './syntax-rule.mjs';
5
+ export { Rule } from './rule.mjs';
5
6
  export { default as Layer } from './layer.mjs';
7
+ export { default as SyntaxLayer } from './syntax-layer.mjs';
8
+ export { default as NonLayer } from './non-layer.mjs';
9
+ export { default as SyntaxRuleType } from './syntax-rule-type.mjs';
6
10
  export { default as extendConfig } from './utils/extend-config.mjs';
7
11
  export { default as reorderForReadableClasses } from './utils/reorder-for-readable-classes.mjs';
8
12
  export { default as areRuleModesEqual } from './utils/are-rule-modes-equal.mjs';
9
13
  export { default as areRuleAtEqual } from './utils/are-rule-at-equal.mjs';
10
14
  export { default as areRuleSelectorsEqual } from './utils/are-rule-selectors-equal.mjs';
11
15
  export { default as areRuleStatesEqual } from './utils/are-rule-states-equal.mjs';
12
- export { default as areRulesDuplicated } from './utils/are-syntaxes-duplicated.mjs';
16
+ export { default as areRulesDuplicated } from './utils/are-rules-duplicated.mjs';
13
17
  export { default as generateCSS } from './utils/generate-css.mjs';
14
18
  export { default as isCoreRule } from './utils/is-core-rule.mjs';
15
19
  export { default as at } from './config/at.mjs';
@@ -19,4 +23,4 @@ export { default as functions } from './config/functions.mjs';
19
23
  export { default as animations } from './config/animations.mjs';
20
24
  export { default as variables } from './config/variables.mjs';
21
25
  export { default as modes } from './config/modes.mjs';
22
- export { default as syntaxes } from './config/syntaxes.mjs';
26
+ export { default as rules } from './config/rules.mjs';
package/dist/layer.cjs CHANGED
@@ -1,27 +1,111 @@
1
1
  'use strict';
2
2
 
3
- var Layer = /*#__PURE__*/ function(Layer) {
4
- /**
5
- * utility classes
6
- * @example block, inline
7
- */ Layer[Layer["Utility"] = -4] = "Utility";
8
- /**
9
- * native shorthand
10
- * @example border, padding, margin
11
- */ Layer[Layer["NativeShorthand"] = -3] = "NativeShorthand";
12
- /**
13
- * shorthand
14
- * @example px, py, mx, my
15
- */ Layer[Layer["Shorthand"] = -2] = "Shorthand";
16
- /**
17
- * native properties
18
- * @example color, background-color, font-size
19
- */ Layer[Layer["Native"] = -1] = "Native";
20
- /**
21
- * normal
22
- * @example grid-cols
23
- */ Layer[Layer["Normal"] = 0] = "Normal";
24
- return Layer;
25
- }(Layer || {});
3
+ var findNativeCssRuleIndex = require('./shared/utils/find-native-css-rule-index.cjs');
4
+
5
+ class Layer {
6
+ name;
7
+ css;
8
+ rules;
9
+ usages;
10
+ native;
11
+ constructor(name, css){
12
+ this.name = name;
13
+ this.css = css;
14
+ this.rules = [];
15
+ this.usages = {};
16
+ this.native = null;
17
+ }
18
+ insert(rule, index) {
19
+ if (this.rules.find(({ key })=>key === rule.key)) return;
20
+ if (!this.css.rules.includes(this)) {
21
+ this.css.rules.push(this);
22
+ const nativeSheet = this.css.style?.sheet;
23
+ if (nativeSheet && !this.native) {
24
+ const insertedIndex = nativeSheet.insertRule(this.text, nativeSheet.cssRules.length);
25
+ this.native = nativeSheet.cssRules.item(insertedIndex);
26
+ }
27
+ }
28
+ if (index === undefined) {
29
+ index = this.rules.length;
30
+ }
31
+ if (this.native) {
32
+ let cssRuleIndex = 0;
33
+ const lastCssRule = function getLastCssRule(layer, index) {
34
+ let lastCssRule;
35
+ const previouRule = layer.rules[index];
36
+ if (previouRule && 'nodes' in previouRule) {
37
+ if (!previouRule.nodes.length) return getLastCssRule(layer, index - 1);
38
+ const lastNativeRule = previouRule.nodes[previouRule.nodes.length - 1];
39
+ lastCssRule = lastNativeRule.native;
40
+ }
41
+ return lastCssRule;
42
+ }(this, index - 1);
43
+ if (lastCssRule) {
44
+ for(let i = 0; i < this.native.cssRules.length; i++){
45
+ if (this.native.cssRules[i] === lastCssRule) {
46
+ cssRuleIndex = i + 1;
47
+ break;
48
+ }
49
+ }
50
+ }
51
+ for(let i = 0; i < rule.nodes.length;){
52
+ try {
53
+ const nativeRule = rule.nodes[i];
54
+ this.native.insertRule(nativeRule.text, cssRuleIndex);
55
+ nativeRule.native = this.native.cssRules[cssRuleIndex++];
56
+ i++;
57
+ } catch (error) {
58
+ console.error(error);
59
+ rule.nodes.splice(i, 1);
60
+ }
61
+ }
62
+ }
63
+ this.rules.splice(index, 0, rule);
64
+ return index;
65
+ }
66
+ delete(key) {
67
+ const rule = this.rules.find((rule)=>rule.key === key);
68
+ if (!rule) return;
69
+ if (this.rules.length === 1) {
70
+ const indexOfLayer = this.css.rules.indexOf(this);
71
+ this.css.rules.splice(indexOfLayer, 1);
72
+ const nativeSheet = this.css.style?.sheet;
73
+ if (nativeSheet && this.native) {
74
+ const foundIndex = findNativeCssRuleIndex(nativeSheet.cssRules, this.native);
75
+ if (foundIndex !== -1) {
76
+ nativeSheet.deleteRule(foundIndex);
77
+ }
78
+ }
79
+ }
80
+ if (this.native?.cssRules && 'nodes' in rule) {
81
+ for (const node of rule.nodes){
82
+ if (node.native) {
83
+ const foundIndex = findNativeCssRuleIndex(this.native.cssRules, node.native);
84
+ if (foundIndex !== -1) {
85
+ // todo: Firefox throw "Uncaught NS_ERROR_FAILURE". Reproduce: Add '@fade|1s @fade|2s' and remove '@fade|1s @fade|2s'
86
+ this.native.deleteRule(foundIndex);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ this.rules.splice(this.rules.indexOf(rule), 1);
92
+ return rule;
93
+ }
94
+ reset() {
95
+ this.rules.length = 0;
96
+ const indexOfLayer = this.css.rules.indexOf(this);
97
+ if (indexOfLayer !== -1) {
98
+ this.css.rules.splice(indexOfLayer, 1);
99
+ }
100
+ // @ts-expect-error
101
+ this.usages = {};
102
+ if (this.native) {
103
+ this.native = null;
104
+ }
105
+ }
106
+ get text() {
107
+ return '@layer ' + this.name + '{' + this.rules.map(({ text })=>text).join('') + '}';
108
+ }
109
+ }
26
110
 
27
111
  module.exports = Layer;
package/dist/layer.d.ts CHANGED
@@ -1,28 +1,14 @@
1
- declare const enum Layer {
2
- /**
3
- * utility classes
4
- * @example block, inline
5
- */
6
- Utility = -4,
7
- /**
8
- * native shorthand
9
- * @example border, padding, margin
10
- */
11
- NativeShorthand = -3,
12
- /**
13
- * shorthand
14
- * @example px, py, mx, my
15
- */
16
- Shorthand = -2,
17
- /**
18
- * native properties
19
- * @example color, background-color, font-size
20
- */
21
- Native = -1,
22
- /**
23
- * normal
24
- * @example grid-cols
25
- */
26
- Normal = 0
1
+ import { Rule } from './rule';
2
+ import MasterCSS from './core';
3
+ export default class Layer {
4
+ name: string;
5
+ css: MasterCSS;
6
+ readonly rules: Rule[];
7
+ readonly usages: Record<string, number>;
8
+ native: CSSLayerBlockRule | null;
9
+ constructor(name: string, css: MasterCSS);
10
+ insert(rule: Rule, index?: number): number | undefined;
11
+ delete(key: string): Rule | undefined;
12
+ reset(): void;
13
+ get text(): string;
27
14
  }
28
- export default Layer;
package/dist/layer.mjs CHANGED
@@ -1,25 +1,109 @@
1
- var Layer = /*#__PURE__*/ function(Layer) {
2
- /**
3
- * utility classes
4
- * @example block, inline
5
- */ Layer[Layer["Utility"] = -4] = "Utility";
6
- /**
7
- * native shorthand
8
- * @example border, padding, margin
9
- */ Layer[Layer["NativeShorthand"] = -3] = "NativeShorthand";
10
- /**
11
- * shorthand
12
- * @example px, py, mx, my
13
- */ Layer[Layer["Shorthand"] = -2] = "Shorthand";
14
- /**
15
- * native properties
16
- * @example color, background-color, font-size
17
- */ Layer[Layer["Native"] = -1] = "Native";
18
- /**
19
- * normal
20
- * @example grid-cols
21
- */ Layer[Layer["Normal"] = 0] = "Normal";
22
- return Layer;
23
- }(Layer || {});
1
+ import findNativeCSSRuleIndex from './shared/utils/find-native-css-rule-index.mjs';
2
+
3
+ class Layer {
4
+ name;
5
+ css;
6
+ rules;
7
+ usages;
8
+ native;
9
+ constructor(name, css){
10
+ this.name = name;
11
+ this.css = css;
12
+ this.rules = [];
13
+ this.usages = {};
14
+ this.native = null;
15
+ }
16
+ insert(rule, index) {
17
+ if (this.rules.find(({ key })=>key === rule.key)) return;
18
+ if (!this.css.rules.includes(this)) {
19
+ this.css.rules.push(this);
20
+ const nativeSheet = this.css.style?.sheet;
21
+ if (nativeSheet && !this.native) {
22
+ const insertedIndex = nativeSheet.insertRule(this.text, nativeSheet.cssRules.length);
23
+ this.native = nativeSheet.cssRules.item(insertedIndex);
24
+ }
25
+ }
26
+ if (index === undefined) {
27
+ index = this.rules.length;
28
+ }
29
+ if (this.native) {
30
+ let cssRuleIndex = 0;
31
+ const lastCssRule = function getLastCssRule(layer, index) {
32
+ let lastCssRule;
33
+ const previouRule = layer.rules[index];
34
+ if (previouRule && 'nodes' in previouRule) {
35
+ if (!previouRule.nodes.length) return getLastCssRule(layer, index - 1);
36
+ const lastNativeRule = previouRule.nodes[previouRule.nodes.length - 1];
37
+ lastCssRule = lastNativeRule.native;
38
+ }
39
+ return lastCssRule;
40
+ }(this, index - 1);
41
+ if (lastCssRule) {
42
+ for(let i = 0; i < this.native.cssRules.length; i++){
43
+ if (this.native.cssRules[i] === lastCssRule) {
44
+ cssRuleIndex = i + 1;
45
+ break;
46
+ }
47
+ }
48
+ }
49
+ for(let i = 0; i < rule.nodes.length;){
50
+ try {
51
+ const nativeRule = rule.nodes[i];
52
+ this.native.insertRule(nativeRule.text, cssRuleIndex);
53
+ nativeRule.native = this.native.cssRules[cssRuleIndex++];
54
+ i++;
55
+ } catch (error) {
56
+ console.error(error);
57
+ rule.nodes.splice(i, 1);
58
+ }
59
+ }
60
+ }
61
+ this.rules.splice(index, 0, rule);
62
+ return index;
63
+ }
64
+ delete(key) {
65
+ const rule = this.rules.find((rule)=>rule.key === key);
66
+ if (!rule) return;
67
+ if (this.rules.length === 1) {
68
+ const indexOfLayer = this.css.rules.indexOf(this);
69
+ this.css.rules.splice(indexOfLayer, 1);
70
+ const nativeSheet = this.css.style?.sheet;
71
+ if (nativeSheet && this.native) {
72
+ const foundIndex = findNativeCSSRuleIndex(nativeSheet.cssRules, this.native);
73
+ if (foundIndex !== -1) {
74
+ nativeSheet.deleteRule(foundIndex);
75
+ }
76
+ }
77
+ }
78
+ if (this.native?.cssRules && 'nodes' in rule) {
79
+ for (const node of rule.nodes){
80
+ if (node.native) {
81
+ const foundIndex = findNativeCSSRuleIndex(this.native.cssRules, node.native);
82
+ if (foundIndex !== -1) {
83
+ // todo: Firefox throw "Uncaught NS_ERROR_FAILURE". Reproduce: Add '@fade|1s @fade|2s' and remove '@fade|1s @fade|2s'
84
+ this.native.deleteRule(foundIndex);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ this.rules.splice(this.rules.indexOf(rule), 1);
90
+ return rule;
91
+ }
92
+ reset() {
93
+ this.rules.length = 0;
94
+ const indexOfLayer = this.css.rules.indexOf(this);
95
+ if (indexOfLayer !== -1) {
96
+ this.css.rules.splice(indexOfLayer, 1);
97
+ }
98
+ // @ts-expect-error
99
+ this.usages = {};
100
+ if (this.native) {
101
+ this.native = null;
102
+ }
103
+ }
104
+ get text() {
105
+ return '@layer ' + this.name + '{' + this.rules.map(({ text })=>text).join('') + '}';
106
+ }
107
+ }
24
108
 
25
109
  export { Layer as default };
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var findNativeCssRuleIndex = require('./shared/utils/find-native-css-rule-index.cjs');
4
+
5
+ class NonLayer {
6
+ css;
7
+ rules;
8
+ usages;
9
+ constructor(css){
10
+ this.css = css;
11
+ this.rules = [];
12
+ this.usages = {};
13
+ }
14
+ insert(rule) {
15
+ if (this.rules.includes(rule)) return;
16
+ const sheet = this.css.style?.sheet;
17
+ if (sheet) {
18
+ for(let i = 0; i < rule.nodes.length;){
19
+ try {
20
+ const nativeRule = rule.nodes[i];
21
+ const insertedIndex = sheet.insertRule(nativeRule.text, sheet.cssRules.length);
22
+ nativeRule.native = sheet.cssRules[insertedIndex];
23
+ i++;
24
+ } catch (error) {
25
+ console.error(error);
26
+ rule.nodes.splice(i, 1);
27
+ }
28
+ }
29
+ }
30
+ this.rules.push(rule);
31
+ this.css.rules.push(rule);
32
+ }
33
+ delete(key) {
34
+ const rule = this.rules.find((rule)=>rule.key === key);
35
+ if (!rule) return;
36
+ const sheet = this.css.style?.sheet;
37
+ if (sheet) {
38
+ for (const node of rule.nodes){
39
+ const foundIndex = findNativeCssRuleIndex(sheet.cssRules, node.native);
40
+ if (foundIndex !== -1) {
41
+ sheet.deleteRule(foundIndex);
42
+ }
43
+ }
44
+ }
45
+ this.rules.splice(this.rules.indexOf(rule), 1);
46
+ this.css.rules.splice(this.css.rules.indexOf(rule), 1);
47
+ return rule;
48
+ }
49
+ get text() {
50
+ return this.rules.map(({ text })=>text).join('');
51
+ }
52
+ reset() {
53
+ for (const rule of this.rules){
54
+ const foundIndex = this.css.rules.indexOf(rule);
55
+ if (foundIndex !== -1) {
56
+ this.css.rules.splice(foundIndex, 1);
57
+ }
58
+ }
59
+ this.rules.length = 0;
60
+ // @ts-expect-error
61
+ this.usages = {};
62
+ }
63
+ }
64
+
65
+ module.exports = NonLayer;
@@ -0,0 +1,12 @@
1
+ import MasterCSS from './core';
2
+ import { Rule } from './rule';
3
+ export default class NonLayer {
4
+ css: MasterCSS;
5
+ readonly rules: Rule[];
6
+ readonly usages: Record<string, number>;
7
+ constructor(css: MasterCSS);
8
+ insert(rule: Rule): void;
9
+ delete(key: string): Rule | undefined;
10
+ get text(): string;
11
+ reset(): void;
12
+ }
@@ -0,0 +1,63 @@
1
+ import findNativeCSSRuleIndex from './shared/utils/find-native-css-rule-index.mjs';
2
+
3
+ class NonLayer {
4
+ css;
5
+ rules;
6
+ usages;
7
+ constructor(css){
8
+ this.css = css;
9
+ this.rules = [];
10
+ this.usages = {};
11
+ }
12
+ insert(rule) {
13
+ if (this.rules.includes(rule)) return;
14
+ const sheet = this.css.style?.sheet;
15
+ if (sheet) {
16
+ for(let i = 0; i < rule.nodes.length;){
17
+ try {
18
+ const nativeRule = rule.nodes[i];
19
+ const insertedIndex = sheet.insertRule(nativeRule.text, sheet.cssRules.length);
20
+ nativeRule.native = sheet.cssRules[insertedIndex];
21
+ i++;
22
+ } catch (error) {
23
+ console.error(error);
24
+ rule.nodes.splice(i, 1);
25
+ }
26
+ }
27
+ }
28
+ this.rules.push(rule);
29
+ this.css.rules.push(rule);
30
+ }
31
+ delete(key) {
32
+ const rule = this.rules.find((rule)=>rule.key === key);
33
+ if (!rule) return;
34
+ const sheet = this.css.style?.sheet;
35
+ if (sheet) {
36
+ for (const node of rule.nodes){
37
+ const foundIndex = findNativeCSSRuleIndex(sheet.cssRules, node.native);
38
+ if (foundIndex !== -1) {
39
+ sheet.deleteRule(foundIndex);
40
+ }
41
+ }
42
+ }
43
+ this.rules.splice(this.rules.indexOf(rule), 1);
44
+ this.css.rules.splice(this.css.rules.indexOf(rule), 1);
45
+ return rule;
46
+ }
47
+ get text() {
48
+ return this.rules.map(({ text })=>text).join('');
49
+ }
50
+ reset() {
51
+ for (const rule of this.rules){
52
+ const foundIndex = this.css.rules.indexOf(rule);
53
+ if (foundIndex !== -1) {
54
+ this.css.rules.splice(foundIndex, 1);
55
+ }
56
+ }
57
+ this.rules.length = 0;
58
+ // @ts-expect-error
59
+ this.usages = {};
60
+ }
61
+ }
62
+
63
+ export { NonLayer as default };