@enjoys/context-engine 1.2.0 → 1.3.1
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.
- package/data/codeActions/css.json +111 -0
- package/data/codeActions/tailwindcss.json +76 -0
- package/data/codeLens/css.json +68 -0
- package/data/codeLens/tailwindcss.json +47 -0
- package/data/color/css.json +124 -0
- package/data/color/tailwindcss.json +53 -0
- package/data/commands/css.json +41 -0
- package/data/commands/manifest.json +729 -727
- package/data/commands/tailwindcss.json +53 -0
- package/data/completion/css.json +383 -0
- package/data/completion/javascript.json +27 -0
- package/data/completion/redis-cli.json +1 -1
- package/data/completion/tailwindcss.json +284 -0
- package/data/completion/typescript.json +27 -0
- package/data/declaration/css.json +59 -0
- package/data/declaration/tailwindcss.json +65 -0
- package/data/definition/css.json +115 -0
- package/data/definition/redis-cli.json +1 -1
- package/data/definition/tailwindcss.json +115 -0
- package/data/documentHighlight/css.json +50 -0
- package/data/documentHighlight/tailwindcss.json +65 -0
- package/data/documentRangeFormatting/css.json +101 -0
- package/data/documentRangeFormatting/tailwindcss.json +55 -0
- package/data/documentSymbol/css.json +96 -0
- package/data/documentSymbol/tailwindcss.json +61 -0
- package/data/foldingRange/css.json +66 -0
- package/data/foldingRange/tailwindcss.json +60 -0
- package/data/formatting/css.json +73 -0
- package/data/formatting/tailwindcss.json +48 -0
- package/data/hover/css.json +68 -0
- package/data/hover/redis-cli.json +1 -1
- package/data/hover/tailwindcss.json +968 -0
- package/data/implementation/css.json +65 -0
- package/data/implementation/tailwindcss.json +59 -0
- package/data/inlayHints/css.json +87 -0
- package/data/inlayHints/tailwindcss.json +111 -0
- package/data/inlineCompletions/css.json +125 -0
- package/data/inlineCompletions/javascript.json +12 -0
- package/data/inlineCompletions/tailwindcss.json +411 -0
- package/data/inlineCompletions/typescript.json +12 -0
- package/data/linkedEditingRange/css.json +40 -0
- package/data/linkedEditingRange/tailwindcss.json +30 -0
- package/data/links/css.json +55 -0
- package/data/links/tailwindcss.json +40 -0
- package/data/manifest.json +62 -0
- package/data/onTypeFormatting/css.json +82 -0
- package/data/onTypeFormatting/tailwindcss.json +63 -0
- package/data/rangeSemanticTokens/css.json +125 -0
- package/data/rangeSemanticTokens/tailwindcss.json +95 -0
- package/data/references/css.json +65 -0
- package/data/references/tailwindcss.json +59 -0
- package/data/rename/css.json +91 -0
- package/data/rename/tailwindcss.json +58 -0
- package/data/selectionRange/css.json +55 -0
- package/data/selectionRange/tailwindcss.json +35 -0
- package/data/semanticTokens/css.json +107 -0
- package/data/semanticTokens/tailwindcss.json +161 -0
- package/data/signatureHelp/css.json +137 -0
- package/data/signatureHelp/tailwindcss.json +64 -0
- package/data/typeDefinition/css.json +53 -0
- package/data/typeDefinition/tailwindcss.json +47 -0
- package/package.json +1 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "css",
|
|
3
|
+
"symbolPatterns": [
|
|
4
|
+
{
|
|
5
|
+
"name": "Class Selector",
|
|
6
|
+
"pattern": "(\\.([a-zA-Z_][a-zA-Z0-9_-]*))\\s*(?:[{,>+~\\s])",
|
|
7
|
+
"captureGroup": 1,
|
|
8
|
+
"kind": "Class",
|
|
9
|
+
"type": "5"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "ID Selector",
|
|
13
|
+
"pattern": "(#([a-zA-Z_][a-zA-Z0-9_-]*))\\s*(?=[{,>+~\\s])",
|
|
14
|
+
"captureGroup": 1,
|
|
15
|
+
"kind": "Constant",
|
|
16
|
+
"type": "13"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "Element Selector",
|
|
20
|
+
"pattern": "^\\s*([a-zA-Z][a-zA-Z0-9]*)\\s*(?=[{,>+~:\\[\\s])",
|
|
21
|
+
"captureGroup": 1,
|
|
22
|
+
"kind": "Field",
|
|
23
|
+
"type": "7"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "@media Query",
|
|
27
|
+
"pattern": "@media\\s+([^{]+)\\s*\\{",
|
|
28
|
+
"captureGroup": 1,
|
|
29
|
+
"kind": "Namespace",
|
|
30
|
+
"type": "2"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "@keyframes Animation",
|
|
34
|
+
"pattern": "@keyframes\\s+([a-zA-Z_][a-zA-Z0-9_-]*)\\s*\\{",
|
|
35
|
+
"captureGroup": 1,
|
|
36
|
+
"kind": "Function",
|
|
37
|
+
"type": "11"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "Custom Property",
|
|
41
|
+
"pattern": "--(([a-zA-Z_][a-zA-Z0-9_-]*))\\s*:",
|
|
42
|
+
"captureGroup": 1,
|
|
43
|
+
"kind": "Variable",
|
|
44
|
+
"type": "12"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "@font-face",
|
|
48
|
+
"pattern": "@font-face\\s*\\{[^}]*font-family\\s*:\\s*['\"]?([^'\";}]+)",
|
|
49
|
+
"captureGroup": 1,
|
|
50
|
+
"kind": "Struct",
|
|
51
|
+
"type": "22"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "@layer",
|
|
55
|
+
"pattern": "@layer\\s+([a-zA-Z_][a-zA-Z0-9_-]*)\\s*[{;]",
|
|
56
|
+
"captureGroup": 1,
|
|
57
|
+
"kind": "Module",
|
|
58
|
+
"type": "1"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "@import",
|
|
62
|
+
"pattern": "@import\\s+(?:url\\()?['\"]?([^'\"\\);]+)",
|
|
63
|
+
"captureGroup": 1,
|
|
64
|
+
"kind": "Package",
|
|
65
|
+
"type": "3"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "@supports Feature Query",
|
|
69
|
+
"pattern": "@supports\\s+([^{]+)\\s*\\{",
|
|
70
|
+
"captureGroup": 1,
|
|
71
|
+
"kind": "Interface",
|
|
72
|
+
"type": "10"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "@container Query",
|
|
76
|
+
"pattern": "@container\\s+(?:([a-zA-Z_][a-zA-Z0-9_-]*)\\s+)?\\([^)]+\\)\\s*\\{",
|
|
77
|
+
"captureGroup": 1,
|
|
78
|
+
"kind": "Event",
|
|
79
|
+
"type": "23"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "@property Registration",
|
|
83
|
+
"pattern": "@property\\s+--(([a-zA-Z_][a-zA-Z0-9_-]*))\\s*\\{",
|
|
84
|
+
"captureGroup": 1,
|
|
85
|
+
"kind": "Property",
|
|
86
|
+
"type": "6"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "Compound Selector",
|
|
90
|
+
"pattern": "([.#]?[a-zA-Z_][a-zA-Z0-9_-]*(?:\\s*[>+~]\\s*[.#]?[a-zA-Z_][a-zA-Z0-9_-]*)+)\\s*\\{",
|
|
91
|
+
"captureGroup": 1,
|
|
92
|
+
"kind": "String",
|
|
93
|
+
"type": "14"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "tailwindcss",
|
|
3
|
+
"symbolPatterns": [
|
|
4
|
+
{
|
|
5
|
+
"name": "layer:${1}",
|
|
6
|
+
"pattern": "@layer\\s+(base|components|utilities)\\s*\\{",
|
|
7
|
+
"captureGroup": 1,
|
|
8
|
+
"kind": 1,
|
|
9
|
+
"type": "layer"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "@apply:${1}",
|
|
13
|
+
"pattern": "\\.([\\w-]+)\\s*\\{[^}]*@apply",
|
|
14
|
+
"captureGroup": 1,
|
|
15
|
+
"kind": 4,
|
|
16
|
+
"type": "component"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "@tailwind:${1}",
|
|
20
|
+
"pattern": "@tailwind\\s+(base|components|utilities|variants)\\s*;",
|
|
21
|
+
"captureGroup": 1,
|
|
22
|
+
"kind": 2,
|
|
23
|
+
"type": "directive"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "@config:${1}",
|
|
27
|
+
"pattern": "@config\\s+['\"]([^'\"]+)['\"]\\s*;",
|
|
28
|
+
"captureGroup": 1,
|
|
29
|
+
"kind": 0,
|
|
30
|
+
"type": "config"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "selector:${1}",
|
|
34
|
+
"pattern": "^\\s*\\.([\\w-]+)\\s*\\{",
|
|
35
|
+
"captureGroup": 1,
|
|
36
|
+
"kind": 4,
|
|
37
|
+
"type": "selector"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "media:${1}",
|
|
41
|
+
"pattern": "@media\\s+([^{]+)\\s*\\{",
|
|
42
|
+
"captureGroup": 1,
|
|
43
|
+
"kind": 2,
|
|
44
|
+
"type": "media"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "screen:${1}",
|
|
48
|
+
"pattern": "@screen\\s+(\\w+)\\s*\\{",
|
|
49
|
+
"captureGroup": 1,
|
|
50
|
+
"kind": 2,
|
|
51
|
+
"type": "screen"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "keyframes:${1}",
|
|
55
|
+
"pattern": "@keyframes\\s+([\\w-]+)\\s*\\{",
|
|
56
|
+
"captureGroup": 1,
|
|
57
|
+
"kind": 9,
|
|
58
|
+
"type": "keyframes"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "css",
|
|
3
|
+
"foldingRules": [
|
|
4
|
+
{
|
|
5
|
+
"startPattern": "\\{\\s*$",
|
|
6
|
+
"endPattern": "^\\s*\\}",
|
|
7
|
+
"kind": "region",
|
|
8
|
+
"description": "CSS rule block. Folds the content between opening { and closing } braces of any CSS rule (selectors, at-rules)."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"startPattern": "@media\\s+[^{]+\\{\\s*$",
|
|
12
|
+
"endPattern": "^\\s*\\}",
|
|
13
|
+
"kind": "region",
|
|
14
|
+
"description": "@media query block. Folds the entire media query including all nested rules within it."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"startPattern": "@keyframes\\s+[a-zA-Z_][a-zA-Z0-9_-]*\\s*\\{\\s*$",
|
|
18
|
+
"endPattern": "^\\s*\\}",
|
|
19
|
+
"kind": "region",
|
|
20
|
+
"description": "@keyframes animation block. Folds the animation definition including all keyframe percentage stops."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"startPattern": "@supports\\s+[^{]+\\{\\s*$",
|
|
24
|
+
"endPattern": "^\\s*\\}",
|
|
25
|
+
"kind": "region",
|
|
26
|
+
"description": "@supports feature query block. Folds the conditional styles applied based on browser feature support."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"startPattern": "@layer\\s+[a-zA-Z_][a-zA-Z0-9_-]*\\s*\\{\\s*$",
|
|
30
|
+
"endPattern": "^\\s*\\}",
|
|
31
|
+
"kind": "region",
|
|
32
|
+
"description": "@layer cascade layer block. Folds all rules assigned to a cascade layer."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"startPattern": "@container\\s+[^{]*\\{\\s*$",
|
|
36
|
+
"endPattern": "^\\s*\\}",
|
|
37
|
+
"kind": "region",
|
|
38
|
+
"description": "@container query block. Folds container query rules based on container element size."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"startPattern": "@font-face\\s*\\{\\s*$",
|
|
42
|
+
"endPattern": "^\\s*\\}",
|
|
43
|
+
"kind": "region",
|
|
44
|
+
"description": "@font-face block. Folds the font face definition including all descriptors."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"startPattern": "/\\*",
|
|
48
|
+
"endPattern": "\\*/",
|
|
49
|
+
"kind": "comment",
|
|
50
|
+
"description": "Multi-line CSS comment. Folds content between /* and */ delimiters."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"startPattern": "/\\*\\s*#region\\b",
|
|
54
|
+
"endPattern": "/\\*\\s*#endregion\\b",
|
|
55
|
+
"kind": "region",
|
|
56
|
+
"description": "Custom region markers. Folds content between /* #region */ and /* #endregion */ comments for manual code organization."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"startPattern": "@scope\\s*[^{]*\\{\\s*$",
|
|
60
|
+
"endPattern": "^\\s*\\}",
|
|
61
|
+
"kind": "region",
|
|
62
|
+
"description": "@scope block (CSS Scoping). Folds scoped style rules that limit selector matching to a subtree."
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"offSide": false
|
|
66
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "tailwindcss",
|
|
3
|
+
"foldingRules": [
|
|
4
|
+
{
|
|
5
|
+
"startPattern": "@layer\\s+\\w+\\s*\\{",
|
|
6
|
+
"endPattern": "^\\}",
|
|
7
|
+
"kind": "region",
|
|
8
|
+
"description": "Fold @layer blocks (base, components, utilities)."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"startPattern": "@media\\s+[^{]+\\{",
|
|
12
|
+
"endPattern": "^\\}",
|
|
13
|
+
"kind": "region",
|
|
14
|
+
"description": "Fold @media query blocks including responsive breakpoints."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"startPattern": "@screen\\s+\\w+\\s*\\{",
|
|
18
|
+
"endPattern": "^\\}",
|
|
19
|
+
"kind": "region",
|
|
20
|
+
"description": "Fold @screen directive blocks."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"startPattern": "\\.[\\w-]+\\s*\\{",
|
|
24
|
+
"endPattern": "^\\s*\\}",
|
|
25
|
+
"kind": "region",
|
|
26
|
+
"description": "Fold CSS rule blocks containing @apply and other declarations."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"startPattern": "@keyframes\\s+[\\w-]+\\s*\\{",
|
|
30
|
+
"endPattern": "^\\}",
|
|
31
|
+
"kind": "region",
|
|
32
|
+
"description": "Fold @keyframes animation blocks."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"startPattern": "/\\*",
|
|
36
|
+
"endPattern": "\\*/",
|
|
37
|
+
"kind": "comment",
|
|
38
|
+
"description": "Fold multi-line CSS comments."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"startPattern": "class\\s*=\\s*[\"'][^\"']*$",
|
|
42
|
+
"endPattern": "[\"']",
|
|
43
|
+
"kind": "region",
|
|
44
|
+
"description": "Fold multi-line class attribute lists with many Tailwind utilities."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"startPattern": "module\\.exports\\s*=\\s*\\{",
|
|
48
|
+
"endPattern": "^\\};?",
|
|
49
|
+
"kind": "region",
|
|
50
|
+
"description": "Fold tailwind.config.js configuration object."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"startPattern": "theme:\\s*\\{",
|
|
54
|
+
"endPattern": "^\\s*\\}",
|
|
55
|
+
"kind": "region",
|
|
56
|
+
"description": "Fold theme configuration sections in tailwind.config.js."
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"offSide": false
|
|
60
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "css",
|
|
3
|
+
"formatting": {
|
|
4
|
+
"defaultTabSize": 2,
|
|
5
|
+
"defaultInsertSpaces": true,
|
|
6
|
+
"rules": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Normalize space after property colon",
|
|
9
|
+
"pattern": "([a-z-]+)\\s*:\\s*",
|
|
10
|
+
"replacement": "$1: "
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"description": "Opening brace on same line with space before",
|
|
14
|
+
"pattern": "([^\\s])\\s*\\{",
|
|
15
|
+
"replacement": "$1 {"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"description": "Closing brace on its own line",
|
|
19
|
+
"pattern": "([^\\n])\\s*\\}",
|
|
20
|
+
"replacement": "$1\n}"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"description": "Ensure semicolons terminate declarations",
|
|
24
|
+
"pattern": "([a-z-]+\\s*:[^;{}]+?)\\s*(?=\\n\\s*[a-z-]+\\s*:|\\n\\s*\\})",
|
|
25
|
+
"replacement": "$1;"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"description": "Single space after commas in selectors",
|
|
29
|
+
"pattern": ",\\s*(?=\\n?\\s*[.#a-zA-Z*:\\[])",
|
|
30
|
+
"replacement": ",\n"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"description": "Remove trailing whitespace",
|
|
34
|
+
"pattern": "[ \\t]+$",
|
|
35
|
+
"replacement": ""
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"description": "Single blank line between rule blocks",
|
|
39
|
+
"pattern": "\\}\\s*\\n\\s*\\n\\s*\\n+",
|
|
40
|
+
"replacement": "}\n\n"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"description": "Normalize multi-line comment opening",
|
|
44
|
+
"pattern": "/\\*\\s*(?!\\*)",
|
|
45
|
+
"replacement": "/* "
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"description": "Normalize multi-line comment closing",
|
|
49
|
+
"pattern": "\\s*\\*/",
|
|
50
|
+
"replacement": " */"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"description": "Ensure newline at end of file",
|
|
54
|
+
"pattern": "([^\\n])$",
|
|
55
|
+
"replacement": "$1\n"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"description": "Remove spaces inside parentheses for functions",
|
|
59
|
+
"pattern": "\\(\\s+([^)]+?)\\s+\\)",
|
|
60
|
+
"replacement": "($1)"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"description": "Normalize space in !important",
|
|
64
|
+
"pattern": "\\s*!\\s*important",
|
|
65
|
+
"replacement": " !important"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"indentation": {
|
|
69
|
+
"increasePattern": "\\{\\s*$",
|
|
70
|
+
"decreasePattern": "^\\s*\\}"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "tailwindcss",
|
|
3
|
+
"formatting": {
|
|
4
|
+
"defaultTabSize": 2,
|
|
5
|
+
"defaultInsertSpaces": true,
|
|
6
|
+
"rules": [
|
|
7
|
+
{
|
|
8
|
+
"description": "Sort utility classes in @apply rules following recommended order (layout, spacing, sizing, typography, backgrounds, borders, effects, transitions)",
|
|
9
|
+
"pattern": "@apply\\s+([\\w\\s:/-]+);",
|
|
10
|
+
"replacement": "@apply ${sorted_classes};"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"description": "Normalize spacing in @apply directives to single spaces between classes",
|
|
14
|
+
"pattern": "@apply\\s{2,}|@apply\\s+([\\w:-]+)\\s{2,}",
|
|
15
|
+
"replacement": "@apply ${1} "
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"description": "Ensure @tailwind directives are ordered: base, components, utilities",
|
|
19
|
+
"pattern": "@tailwind\\s+(utilities|components|base)\\s*;",
|
|
20
|
+
"replacement": "@tailwind ${ordered_layer};"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"description": "Add blank line between @layer blocks for readability",
|
|
24
|
+
"pattern": "(\\})(\\s*)(@layer)",
|
|
25
|
+
"replacement": "${1}\n\n${3}"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"description": "Normalize @layer block formatting with consistent indentation",
|
|
29
|
+
"pattern": "@layer\\s+(\\w+)\\s*\\{\\s*",
|
|
30
|
+
"replacement": "@layer ${1} {\n "
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"description": "Ensure semicolons after @apply and @tailwind directives",
|
|
34
|
+
"pattern": "(@apply\\s+[\\w\\s:/-]+)\\s*$",
|
|
35
|
+
"replacement": "${1};"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"description": "Format @config directive with consistent quoting",
|
|
39
|
+
"pattern": "@config\\s+\"([^\"]+)\"\\s*;",
|
|
40
|
+
"replacement": "@config '${1}';"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"indentation": {
|
|
44
|
+
"increasePattern": "\\{\\s*$|@layer\\s+\\w+\\s*\\{",
|
|
45
|
+
"decreasePattern": "^\\s*\\}"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": "css",
|
|
3
|
+
"hovers": {
|
|
4
|
+
"display": {
|
|
5
|
+
"contents": [{ "value": "```css\ndisplay: block | inline | inline-block | flex | grid | none | contents | flow-root | inline-flex | inline-grid | table | list-item;\n```\n\nSets the display type of an element.\n\n- `block` — takes full width, stacks vertically\n- `inline` — flows with text, no width/height\n- `inline-block` — inline flow with block properties\n- `flex` — enables flexbox layout\n- `grid` — enables grid layout\n- `none` — removes from rendering\n- `contents` — element box replaced by children\n- `flow-root` — creates new block formatting context" }]
|
|
6
|
+
},
|
|
7
|
+
"position": {
|
|
8
|
+
"contents": [{ "value": "```css\nposition: static | relative | absolute | fixed | sticky;\n```\n\nSets how an element is positioned.\n\n- `static` — default; normal flow\n- `relative` — offset from normal position; creates positioning context\n- `absolute` — removed from flow; relative to nearest positioned ancestor\n- `fixed` — relative to viewport; stays in place on scroll\n- `sticky` — acts as `relative` until a scroll threshold, then `fixed`\n\nWorks with `top`, `right`, `bottom`, `left`, `inset` and `z-index`." }]
|
|
9
|
+
},
|
|
10
|
+
"flex-direction": {
|
|
11
|
+
"contents": [{ "value": "```css\nflex-direction: row | row-reverse | column | column-reverse;\n```\n\nDefines the main axis direction for a flex container.\n\n- `row` (default) — left to right\n- `row-reverse` — right to left\n- `column` — top to bottom\n- `column-reverse` — bottom to top\n\nChanging direction also swaps `justify-content` and `align-items` axes." }]
|
|
12
|
+
},
|
|
13
|
+
"justify-content": {
|
|
14
|
+
"contents": [{ "value": "```css\njustify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;\n```\n\nDistributes space along the main axis (flex) or inline axis (grid).\n\n- `flex-start` — items packed to start\n- `center` — items centered\n- `space-between` — equal space between items, no edge space\n- `space-around` — equal space around items\n- `space-evenly` — equal space between and around items" }]
|
|
15
|
+
},
|
|
16
|
+
"align-items": {
|
|
17
|
+
"contents": [{ "value": "```css\nalign-items: stretch | flex-start | flex-end | center | baseline;\n```\n\nAligns flex/grid items along the cross axis.\n\n- `stretch` (default) — fill the container\n- `center` — centered in cross axis\n- `flex-start` — aligned to start of cross axis\n- `baseline` — aligned by text baselines" }]
|
|
18
|
+
},
|
|
19
|
+
"grid-template-columns": {
|
|
20
|
+
"contents": [{ "value": "```css\ngrid-template-columns: <track-size>+ | repeat(<count>, <track-size>) | minmax(<min>, <max>);\n```\n\nDefines column sizes in a grid container.\n\nExamples:\n```css\ngrid-template-columns: 200px 1fr 2fr;\ngrid-template-columns: repeat(3, 1fr);\ngrid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\ngrid-template-columns: [start] 1fr [center] 2fr [end];\n```\n\nUnits: `fr` (fraction), `px`, `%`, `em`, `rem`, `auto`, `min-content`, `max-content`, `fit-content()`." }]
|
|
21
|
+
},
|
|
22
|
+
"margin": {
|
|
23
|
+
"contents": [{ "value": "```css\nmargin: <length> | <percentage> | auto;\n/* 1-4 values: top right bottom left */\n```\n\nSets the margin area around an element.\n\n- 1 value: all sides\n- 2 values: vertical | horizontal\n- 3 values: top | horizontal | bottom\n- 4 values: top | right | bottom | left\n\n`margin: 0 auto;` centers a block element horizontally.\nMargins can collapse vertically between adjacent block elements." }]
|
|
24
|
+
},
|
|
25
|
+
"padding": {
|
|
26
|
+
"contents": [{ "value": "```css\npadding: <length> | <percentage>;\n/* 1-4 values: top right bottom left */\n```\n\nSets the padding area between content and border.\n\nSame shorthand pattern as `margin`. Cannot be negative.\nPercentages are relative to the **width** of the containing block (even for top/bottom)." }]
|
|
27
|
+
},
|
|
28
|
+
"box-sizing": {
|
|
29
|
+
"contents": [{ "value": "```css\nbox-sizing: content-box | border-box;\n```\n\n- `content-box` (default) — `width`/`height` apply to content only. Padding and border are added on top.\n- `border-box` — `width`/`height` include content, padding, and border.\n\nBest practice:\n```css\n*, *::before, *::after {\n box-sizing: border-box;\n}\n```" }]
|
|
30
|
+
},
|
|
31
|
+
"background": {
|
|
32
|
+
"contents": [{ "value": "```css\nbackground: <color> <image> <position>/<size> <repeat> <origin> <clip> <attachment>;\n```\n\nShorthand for all background properties. Supports multiple backgrounds separated by commas.\n\nExamples:\n```css\nbackground: #f5f5f5;\nbackground: url('img.png') no-repeat center/cover;\nbackground: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n```" }]
|
|
33
|
+
},
|
|
34
|
+
"border-radius": {
|
|
35
|
+
"contents": [{ "value": "```css\nborder-radius: <length-percentage>{1,4} [ / <length-percentage>{1,4} ]?;\n```\n\nRounds the corners of an element's border box.\n\n- 1 value: all corners\n- 2 values: top-left+bottom-right | top-right+bottom-left\n- 4 values: top-left | top-right | bottom-right | bottom-left\n\nOptional `/` syntax for elliptical radii.\n\n`border-radius: 50%;` creates a circle on equal-dimension elements." }]
|
|
36
|
+
},
|
|
37
|
+
"transition": {
|
|
38
|
+
"contents": [{ "value": "```css\ntransition: <property> <duration> <timing-function>? <delay>?;\n```\n\nEnables smooth property changes over time.\n\nExamples:\n```css\ntransition: all 0.3s ease;\ntransition: opacity 200ms, transform 300ms ease-out;\ntransition: background-color 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n```\n\nTiming functions: `ease`, `linear`, `ease-in`, `ease-out`, `ease-in-out`, `cubic-bezier()`, `steps()`.\n\nNote: Not all properties are animatable (e.g., `display` is not)." }]
|
|
39
|
+
},
|
|
40
|
+
"animation": {
|
|
41
|
+
"contents": [{ "value": "```css\nanimation: <name> <duration> <timing-function>? <delay>? <count>? <direction>? <fill-mode>? <play-state>?;\n```\n\nExamples:\n```css\nanimation: fadeIn 0.3s ease-in-out;\nanimation: slide 1s ease infinite alternate;\nanimation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n```\n\n`fill-mode`: `none`, `forwards` (retain end state), `backwards` (apply start state during delay), `both`.\n`direction`: `normal`, `reverse`, `alternate`, `alternate-reverse`." }]
|
|
42
|
+
},
|
|
43
|
+
"transform": {
|
|
44
|
+
"contents": [{ "value": "```css\ntransform: <transform-function>+;\n```\n\n2D functions: `translate(x, y)`, `rotate(angle)`, `scale(x, y)`, `skew(x, y)`, `matrix()`.\n3D functions: `translate3d()`, `rotate3d()`, `scale3d()`, `perspective()`.\n\nExamples:\n```css\ntransform: translateX(-50%) translateY(-50%);\ntransform: rotate(45deg) scale(1.2);\ntransform: perspective(500px) rotateY(30deg);\n```\n\nMultiple transforms are applied right-to-left. Creates a new stacking context." }]
|
|
45
|
+
},
|
|
46
|
+
"z-index": {
|
|
47
|
+
"contents": [{ "value": "```css\nz-index: auto | <integer>;\n```\n\nSets the stacking order for positioned elements (`position` not `static`).\n\nHigher values appear in front. Negative values are allowed.\nCreates a new stacking context when applied to a positioned element.\n\nCommon convention: use increments of 10 or 100 for maintainability." }]
|
|
48
|
+
},
|
|
49
|
+
"var()": {
|
|
50
|
+
"contents": [{ "value": "```css\nvar(--custom-property, fallback-value)\n```\n\nAccesses CSS custom properties (CSS variables).\n\nDefined with `--` prefix:\n```css\n:root {\n --primary: #3490dc;\n --spacing: 1rem;\n}\n.btn {\n color: var(--primary);\n padding: var(--spacing, 0.5rem);\n}\n```\n\nCustom properties are inherited. Fallback is used when the property is undefined. Fallbacks can be nested: `var(--a, var(--b, #000))`." }]
|
|
51
|
+
},
|
|
52
|
+
"@media": {
|
|
53
|
+
"contents": [{ "value": "```css\n@media <type>? [and <feature>]* { ... }\n```\n\nConditional style rules based on device/viewport characteristics.\n\nCommon features:\n- `width`, `min-width`, `max-width`\n- `height`, `min-height`, `max-height`\n- `orientation: portrait | landscape`\n- `prefers-color-scheme: light | dark`\n- `prefers-reduced-motion: reduce | no-preference`\n- `hover: hover | none`\n- `pointer: fine | coarse | none`\n\nRange syntax (Level 4): `@media (400px <= width <= 800px) { }`" }]
|
|
54
|
+
},
|
|
55
|
+
"@keyframes": {
|
|
56
|
+
"contents": [{ "value": "```css\n@keyframes <name> {\n from { /* 0% */ }\n <percentage> { /* intermediate */ }\n to { /* 100% */ }\n}\n```\n\nDefines animation keyframes. Referenced by `animation-name`.\n\nExample:\n```css\n@keyframes slideIn {\n 0% { transform: translateX(-100%); opacity: 0; }\n 100% { transform: translateX(0); opacity: 1; }\n}\n```\n\nMultiple keyframes can share percentages: `0%, 100% { opacity: 1; }`." }]
|
|
57
|
+
},
|
|
58
|
+
"calc()": {
|
|
59
|
+
"contents": [{ "value": "```css\ncalc(<expression>)\n```\n\nPerforms math with mixed CSS units.\n\nOperators: `+`, `-`, `*`, `/`\n\nExamples:\n```css\nwidth: calc(100% - 2rem);\nfont-size: calc(1rem + 0.5vw);\nheight: calc(100vh - var(--header-height));\nmargin: calc(var(--spacing) * 2);\n```\n\nNote: `+` and `-` require spaces around them. `*` and `/` do not.\nCan be nested: `calc(calc(100% - 1rem) / 2)`." }]
|
|
60
|
+
},
|
|
61
|
+
"clamp()": {
|
|
62
|
+
"contents": [{ "value": "```css\nclamp(MIN, VAL, MAX)\n```\n\nReturns the middle value, clamped between MIN and MAX.\n\nEquivalent to `max(MIN, min(VAL, MAX))`.\n\nExample:\n```css\nfont-size: clamp(1rem, 2.5vw, 2rem);\nwidth: clamp(200px, 50%, 600px);\n```\n\nIdeal for fluid typography and responsive sizing without media queries." }]
|
|
63
|
+
},
|
|
64
|
+
"container-type": {
|
|
65
|
+
"contents": [{ "value": "```css\ncontainer-type: normal | size | inline-size;\n```\n\nEstablishes an element as a containment context for container queries.\n\n- `normal` — no containment (default)\n- `inline-size` — containment on the inline axis only\n- `size` — containment on both axes\n\nUsed with `@container` queries:\n```css\n.card { container-type: inline-size; }\n@container (min-width: 400px) {\n .card-body { display: flex; }\n}\n```" }]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|