@enjoys/context-engine 1.2.0 → 1.4.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.
Files changed (270) hide show
  1. package/data/codeActions/angular.json +126 -0
  2. package/data/codeActions/css.json +111 -0
  3. package/data/codeActions/nestjs.json +124 -0
  4. package/data/codeActions/nextjs.json +198 -0
  5. package/data/codeActions/react.json +154 -0
  6. package/data/codeActions/shadcn.json +112 -0
  7. package/data/codeActions/shell.json +169 -26
  8. package/data/codeActions/tailwindcss.json +76 -0
  9. package/data/codeLens/angular.json +22 -0
  10. package/data/codeLens/css.json +68 -0
  11. package/data/codeLens/nestjs.json +21 -0
  12. package/data/codeLens/nextjs.json +117 -0
  13. package/data/codeLens/react.json +89 -0
  14. package/data/codeLens/shadcn.json +89 -0
  15. package/data/codeLens/shell.json +59 -17
  16. package/data/codeLens/tailwindcss.json +103 -0
  17. package/data/color/angular.json +21 -0
  18. package/data/color/css.json +124 -0
  19. package/data/color/nestjs.json +18 -0
  20. package/data/color/nextjs.json +22 -0
  21. package/data/color/react.json +93 -0
  22. package/data/color/shadcn.json +66 -0
  23. package/data/color/shell.json +106 -80
  24. package/data/color/tailwindcss.json +53 -0
  25. package/data/commands/angular.json +312 -0
  26. package/data/commands/css.json +41 -0
  27. package/data/commands/manifest.json +734 -727
  28. package/data/commands/nestjs.json +273 -0
  29. package/data/commands/nextjs.json +123 -0
  30. package/data/commands/react.json +210 -0
  31. package/data/commands/shadcn.json +410 -0
  32. package/data/commands/shell.json +571 -41
  33. package/data/commands/tailwindcss.json +53 -0
  34. package/data/completion/angular.json +1490 -0
  35. package/data/completion/css.json +1176 -0
  36. package/data/completion/javascript.json +27 -0
  37. package/data/completion/nestjs.json +1454 -0
  38. package/data/completion/nextjs.json +1373 -0
  39. package/data/completion/react.json +1319 -0
  40. package/data/completion/redis-cli.json +1 -1
  41. package/data/completion/shadcn.json +1202 -0
  42. package/data/completion/shell.json +2446 -510
  43. package/data/completion/tailwindcss.json +284 -0
  44. package/data/completion/typescript.json +27 -0
  45. package/data/declaration/angular.json +46 -0
  46. package/data/declaration/css.json +59 -0
  47. package/data/declaration/nestjs.json +47 -0
  48. package/data/declaration/nextjs.json +274 -0
  49. package/data/declaration/react.json +199 -0
  50. package/data/declaration/shadcn.json +211 -0
  51. package/data/declaration/shell.json +343 -24
  52. package/data/declaration/tailwindcss.json +137 -0
  53. package/data/definition/angular.json +670 -0
  54. package/data/definition/css.json +115 -0
  55. package/data/definition/nestjs.json +684 -0
  56. package/data/definition/nextjs.json +439 -0
  57. package/data/definition/react.json +397 -0
  58. package/data/definition/redis-cli.json +1 -1
  59. package/data/definition/shadcn.json +99 -0
  60. package/data/definition/shell.json +820 -0
  61. package/data/definition/tailwindcss.json +115 -0
  62. package/data/documentHighlight/angular.json +414 -0
  63. package/data/documentHighlight/css.json +125 -0
  64. package/data/documentHighlight/nestjs.json +115 -0
  65. package/data/documentHighlight/nextjs.json +212 -0
  66. package/data/documentHighlight/react.json +119 -0
  67. package/data/documentHighlight/shadcn.json +168 -0
  68. package/data/documentHighlight/shell.json +664 -334
  69. package/data/documentHighlight/tailwindcss.json +160 -0
  70. package/data/documentRangeFormatting/angular.json +45 -0
  71. package/data/documentRangeFormatting/css.json +101 -0
  72. package/data/documentRangeFormatting/nestjs.json +17 -0
  73. package/data/documentRangeFormatting/nextjs.json +17 -0
  74. package/data/documentRangeFormatting/react.json +78 -0
  75. package/data/documentRangeFormatting/shadcn.json +45 -0
  76. package/data/documentRangeFormatting/shell.json +120 -53
  77. package/data/documentRangeFormatting/tailwindcss.json +55 -0
  78. package/data/documentSymbol/angular.json +180 -0
  79. package/data/documentSymbol/css.json +96 -0
  80. package/data/documentSymbol/nestjs.json +152 -0
  81. package/data/documentSymbol/nextjs.json +159 -0
  82. package/data/documentSymbol/react.json +145 -0
  83. package/data/documentSymbol/shadcn.json +131 -0
  84. package/data/documentSymbol/shell.json +166 -26
  85. package/data/documentSymbol/tailwindcss.json +110 -0
  86. package/data/foldingRange/angular.json +99 -0
  87. package/data/foldingRange/css.json +66 -0
  88. package/data/foldingRange/nestjs.json +26 -0
  89. package/data/foldingRange/nextjs.json +26 -0
  90. package/data/foldingRange/react.json +120 -0
  91. package/data/foldingRange/shadcn.json +93 -0
  92. package/data/foldingRange/shell.json +106 -46
  93. package/data/foldingRange/tailwindcss.json +60 -0
  94. package/data/formatting/angular.json +21 -0
  95. package/data/formatting/css.json +73 -0
  96. package/data/formatting/nestjs.json +23 -0
  97. package/data/formatting/nextjs.json +23 -0
  98. package/data/formatting/react.json +71 -0
  99. package/data/formatting/shadcn.json +61 -0
  100. package/data/formatting/shell.json +103 -19
  101. package/data/formatting/tailwindcss.json +48 -0
  102. package/data/hover/angular.json +455 -0
  103. package/data/hover/css.json +300 -0
  104. package/data/hover/nestjs.json +296 -0
  105. package/data/hover/nextjs.json +305 -0
  106. package/data/hover/react.json +173 -0
  107. package/data/hover/redis-cli.json +1 -1
  108. package/data/hover/shadcn.json +450 -0
  109. package/data/hover/shell.json +684 -75
  110. package/data/hover/tailwindcss.json +968 -0
  111. package/data/implementation/angular.json +22 -0
  112. package/data/implementation/css.json +65 -0
  113. package/data/implementation/nestjs.json +24 -0
  114. package/data/implementation/nextjs.json +137 -0
  115. package/data/implementation/react.json +125 -0
  116. package/data/implementation/shadcn.json +89 -0
  117. package/data/implementation/shell.json +59 -3
  118. package/data/implementation/tailwindcss.json +59 -0
  119. package/data/inlayHints/angular.json +24 -0
  120. package/data/inlayHints/css.json +87 -0
  121. package/data/inlayHints/nestjs.json +24 -0
  122. package/data/inlayHints/nextjs.json +143 -0
  123. package/data/inlayHints/react.json +177 -0
  124. package/data/inlayHints/shadcn.json +109 -0
  125. package/data/inlayHints/shell.json +223 -35
  126. package/data/inlayHints/tailwindcss.json +111 -0
  127. package/data/inlineCompletions/angular.json +135 -0
  128. package/data/inlineCompletions/css.json +125 -0
  129. package/data/inlineCompletions/javascript.json +12 -0
  130. package/data/inlineCompletions/nestjs.json +25 -0
  131. package/data/inlineCompletions/nextjs.json +179 -0
  132. package/data/inlineCompletions/react.json +203 -0
  133. package/data/inlineCompletions/shadcn.json +115 -0
  134. package/data/inlineCompletions/shell.json +185 -35
  135. package/data/inlineCompletions/tailwindcss.json +411 -0
  136. package/data/inlineCompletions/typescript.json +12 -0
  137. package/data/linkedEditingRange/angular.json +23 -0
  138. package/data/linkedEditingRange/css.json +40 -0
  139. package/data/linkedEditingRange/nestjs.json +10 -0
  140. package/data/linkedEditingRange/nextjs.json +11 -0
  141. package/data/linkedEditingRange/react.json +75 -0
  142. package/data/linkedEditingRange/shadcn.json +23 -0
  143. package/data/linkedEditingRange/shell.json +25 -25
  144. package/data/linkedEditingRange/tailwindcss.json +30 -0
  145. package/data/links/angular.json +95 -0
  146. package/data/links/css.json +55 -0
  147. package/data/links/nestjs.json +130 -0
  148. package/data/links/nextjs.json +91 -0
  149. package/data/links/react.json +75 -0
  150. package/data/links/shadcn.json +98 -0
  151. package/data/links/shell.json +56 -0
  152. package/data/links/tailwindcss.json +65 -0
  153. package/data/manifest.json +399 -150
  154. package/data/onTypeFormatting/angular.json +14 -0
  155. package/data/onTypeFormatting/css.json +82 -0
  156. package/data/onTypeFormatting/nestjs.json +16 -0
  157. package/data/onTypeFormatting/nextjs.json +17 -0
  158. package/data/onTypeFormatting/react.json +127 -0
  159. package/data/onTypeFormatting/shadcn.json +54 -0
  160. package/data/onTypeFormatting/shell.json +72 -68
  161. package/data/onTypeFormatting/tailwindcss.json +63 -0
  162. package/data/rangeSemanticTokens/angular.json +140 -0
  163. package/data/rangeSemanticTokens/css.json +125 -0
  164. package/data/rangeSemanticTokens/nestjs.json +27 -0
  165. package/data/rangeSemanticTokens/nextjs.json +28 -0
  166. package/data/rangeSemanticTokens/react.json +216 -0
  167. package/data/rangeSemanticTokens/shadcn.json +140 -0
  168. package/data/rangeSemanticTokens/shell.json +247 -69
  169. package/data/rangeSemanticTokens/tailwindcss.json +186 -0
  170. package/data/references/angular.json +26 -0
  171. package/data/references/css.json +65 -0
  172. package/data/references/nestjs.json +24 -0
  173. package/data/references/nextjs.json +178 -0
  174. package/data/references/react.json +192 -0
  175. package/data/references/shadcn.json +101 -0
  176. package/data/references/shell.json +323 -92
  177. package/data/references/tailwindcss.json +125 -0
  178. package/data/rename/angular.json +131 -0
  179. package/data/rename/css.json +91 -0
  180. package/data/rename/nestjs.json +32 -0
  181. package/data/rename/nextjs.json +31 -0
  182. package/data/rename/react.json +88 -0
  183. package/data/rename/shadcn.json +79 -0
  184. package/data/rename/shell.json +101 -31
  185. package/data/rename/tailwindcss.json +58 -0
  186. package/data/selectionRange/angular.json +95 -0
  187. package/data/selectionRange/css.json +55 -0
  188. package/data/selectionRange/nestjs.json +21 -0
  189. package/data/selectionRange/nextjs.json +22 -0
  190. package/data/selectionRange/react.json +87 -0
  191. package/data/selectionRange/shadcn.json +89 -0
  192. package/data/selectionRange/shell.json +65 -35
  193. package/data/selectionRange/tailwindcss.json +35 -0
  194. package/data/semanticTokens/angular.json +198 -0
  195. package/data/semanticTokens/css.json +107 -0
  196. package/data/semanticTokens/nestjs.json +35 -0
  197. package/data/semanticTokens/nextjs.json +38 -0
  198. package/data/semanticTokens/react.json +215 -0
  199. package/data/semanticTokens/shadcn.json +180 -0
  200. package/data/semanticTokens/shell.json +238 -65
  201. package/data/semanticTokens/tailwindcss.json +161 -0
  202. package/data/signatureHelp/angular.json +182 -0
  203. package/data/signatureHelp/css.json +137 -0
  204. package/data/signatureHelp/nestjs.json +128 -0
  205. package/data/signatureHelp/nextjs.json +127 -0
  206. package/data/signatureHelp/react.json +281 -0
  207. package/data/signatureHelp/shadcn.json +237 -0
  208. package/data/signatureHelp/shell.json +797 -104
  209. package/data/signatureHelp/tailwindcss.json +64 -0
  210. package/data/typeDefinition/angular.json +362 -0
  211. package/data/typeDefinition/css.json +53 -0
  212. package/data/typeDefinition/nestjs.json +334 -0
  213. package/data/typeDefinition/nextjs.json +285 -0
  214. package/data/typeDefinition/react.json +236 -0
  215. package/data/typeDefinition/shadcn.json +292 -0
  216. package/data/typeDefinition/shell.json +104 -40
  217. package/data/typeDefinition/tailwindcss.json +47 -0
  218. package/package.json +1 -1
  219. package/data/codeActions/bash.json +0 -169
  220. package/data/codeActions/zsh.json +0 -49
  221. package/data/codeLens/bash.json +0 -75
  222. package/data/codeLens/zsh.json +0 -19
  223. package/data/color/bash.json +0 -100
  224. package/data/color/zsh.json +0 -80
  225. package/data/commands/bash.json +0 -102
  226. package/data/commands/zsh.json +0 -166
  227. package/data/completion/bash.json +0 -1184
  228. package/data/completion/zsh.json +0 -973
  229. package/data/declaration/bash.json +0 -301
  230. package/data/declaration/zsh.json +0 -205
  231. package/data/definition/bash.json +0 -565
  232. package/data/definition/zsh.json +0 -350
  233. package/data/documentHighlight/bash.json +0 -393
  234. package/data/documentHighlight/zsh.json +0 -266
  235. package/data/documentRangeFormatting/bash.json +0 -41
  236. package/data/documentRangeFormatting/zsh.json +0 -59
  237. package/data/documentSymbol/bash.json +0 -124
  238. package/data/documentSymbol/zsh.json +0 -26
  239. package/data/foldingRange/bash.json +0 -76
  240. package/data/foldingRange/zsh.json +0 -46
  241. package/data/formatting/bash.json +0 -88
  242. package/data/formatting/zsh.json +0 -28
  243. package/data/hover/bash.json +0 -579
  244. package/data/hover/zsh.json +0 -96
  245. package/data/implementation/bash.json +0 -44
  246. package/data/implementation/zsh.json +0 -41
  247. package/data/inlayHints/bash.json +0 -207
  248. package/data/inlayHints/zsh.json +0 -43
  249. package/data/inlineCompletions/bash.json +0 -155
  250. package/data/inlineCompletions/zsh.json +0 -17
  251. package/data/linkedEditingRange/bash.json +0 -25
  252. package/data/linkedEditingRange/zsh.json +0 -25
  253. package/data/links/bash.json +0 -56
  254. package/data/links/zsh.json +0 -15
  255. package/data/onTypeFormatting/bash.json +0 -68
  256. package/data/onTypeFormatting/zsh.json +0 -68
  257. package/data/rangeSemanticTokens/bash.json +0 -90
  258. package/data/rangeSemanticTokens/zsh.json +0 -76
  259. package/data/references/bash.json +0 -221
  260. package/data/references/zsh.json +0 -166
  261. package/data/rename/bash.json +0 -37
  262. package/data/rename/zsh.json +0 -31
  263. package/data/selectionRange/bash.json +0 -35
  264. package/data/selectionRange/zsh.json +0 -35
  265. package/data/semanticTokens/bash.json +0 -71
  266. package/data/semanticTokens/zsh.json +0 -71
  267. package/data/signatureHelp/bash.json +0 -111
  268. package/data/signatureHelp/zsh.json +0 -118
  269. package/data/typeDefinition/bash.json +0 -95
  270. package/data/typeDefinition/zsh.json +0 -40
@@ -1,35 +1,223 @@
1
- {
2
- "language": "shell",
3
- "inlayHintPatterns": [
4
- {
5
- "pattern": "(\\w+)\\s*=\\s*",
6
- "kind": 1,
7
- "label": ": {type}",
8
- "position": "after_value",
9
- "paddingLeft": true,
10
- "description": "Show inferred types for shell variable assignments"
11
- }
12
- ],
13
- "typeInferenceRules": {
14
- "string_literal": {
15
- "pattern": "['\"].*['\"]",
16
- "type": "string"
17
- },
18
- "number_literal": {
19
- "pattern": "^\\d+$",
20
- "type": "integer"
21
- },
22
- "array_literal": {
23
- "pattern": "\\(.*\\)",
24
- "type": "array"
25
- },
26
- "boolean_literal": {
27
- "pattern": "\\b(true|false)\\b",
28
- "type": "string"
29
- },
30
- "path_literal": {
31
- "pattern": "(/[\\w.-]+)+",
32
- "type": "path"
33
- }
34
- }
35
- }
1
+ {
2
+ "language": "shell",
3
+ "inlayHintPatterns": [
4
+ {
5
+ "pattern": "(\\w+)\\s*=\\s*",
6
+ "kind": 1,
7
+ "label": ": {type}",
8
+ "position": "after_value",
9
+ "paddingLeft": true,
10
+ "description": "Show inferred types for shell variable assignments"
11
+ },
12
+ {
13
+ "pattern": "(?:local|declare)\\s+(?:-\\w+\\s+)*(\\w+)\\s*=\\s*(.+)",
14
+ "kind": 1,
15
+ "label": ": {inferred_type}",
16
+ "position": "after_capture_1",
17
+ "paddingLeft": true,
18
+ "description": "Show inferred type for variable assignments"
19
+ },
20
+ {
21
+ "pattern": "(\\w+)\\s+(\\$\\{?[^}\\s]+\\}?(?:\\s+\\$\\{?[^}\\s]+\\}?)*)",
22
+ "kind": 2,
23
+ "label": "{param_name}:",
24
+ "position": "before_each_arg",
25
+ "paddingRight": true,
26
+ "description": "Show parameter names at call sites for known functions"
27
+ },
28
+ {
29
+ "pattern": "declare\\s+-([aAilurnx]+)\\s+(\\w+)",
30
+ "kind": 1,
31
+ "label": ": {attribute_description}",
32
+ "position": "after_capture_2",
33
+ "paddingLeft": true,
34
+ "description": "Show attribute description for declare flags"
35
+ },
36
+ {
37
+ "pattern": "\\$\\{(\\w+):?[-+=?]",
38
+ "kind": 1,
39
+ "label": "expansion: {expansion_type}",
40
+ "position": "after_capture_1",
41
+ "paddingLeft": true,
42
+ "description": "Show parameter expansion type"
43
+ },
44
+ {
45
+ "pattern": "exit\\s+(\\d+)",
46
+ "kind": 1,
47
+ "label": ": {exit_meaning}",
48
+ "position": "after_capture_1",
49
+ "paddingLeft": true,
50
+ "description": "Show meaning of exit status code"
51
+ },
52
+ {
53
+ "pattern": "trap\\s+['\"][^'\"]+['\"]\\s+(\\w+)",
54
+ "kind": 1,
55
+ "label": ": signal {signal_number}",
56
+ "position": "after_capture_1",
57
+ "paddingLeft": true,
58
+ "description": "Show signal number for trap signal name"
59
+ },
60
+ {
61
+ "pattern": "\\$\\(\\((.+)\\)\\)",
62
+ "kind": 1,
63
+ "label": "= {result}",
64
+ "position": "after_match",
65
+ "paddingLeft": true,
66
+ "description": "Show arithmetic result for constant expressions"
67
+ },
68
+ {
69
+ "pattern": "chmod\\s+(\\d{3,4})\\s+",
70
+ "kind": 1,
71
+ "label": ": {permission_string}",
72
+ "position": "after_capture_1",
73
+ "paddingLeft": true,
74
+ "description": "Show symbolic permission for numeric chmod"
75
+ },
76
+ {
77
+ "pattern": "umask\\s+(\\d{3,4})",
78
+ "kind": 1,
79
+ "label": ": effective {effective_perms}",
80
+ "position": "after_capture_1",
81
+ "paddingLeft": true,
82
+ "description": "Show effective permissions for umask value"
83
+ },
84
+ {
85
+ "pattern": "\\breturn\\s+(\\d+)",
86
+ "kind": 1,
87
+ "label": ": {return_meaning}",
88
+ "position": "after_capture_1",
89
+ "paddingLeft": true,
90
+ "description": "Show meaning of return status code"
91
+ },
92
+ {
93
+ "pattern": "\\bkill\\s+-(?:s\\s+)?(\\d+|[A-Z]+)\\s+",
94
+ "kind": 1,
95
+ "label": ": {signal_description}",
96
+ "position": "after_capture_1",
97
+ "paddingLeft": true,
98
+ "description": "Show signal description"
99
+ },
100
+ {
101
+ "pattern": "\\btest\\s+(-[a-zA-Z])\\s+",
102
+ "kind": 1,
103
+ "label": ": {test_description}",
104
+ "position": "after_capture_1",
105
+ "paddingLeft": true,
106
+ "description": "Show test operator meaning"
107
+ }
108
+ ],
109
+ "typeInferenceRules": {
110
+ "string_literal": {
111
+ "pattern": "['\"].*['\"]",
112
+ "type": "string"
113
+ },
114
+ "number_literal": {
115
+ "pattern": "^\\d+$",
116
+ "type": "integer"
117
+ },
118
+ "array_literal": {
119
+ "pattern": "\\(.*\\)",
120
+ "type": "array"
121
+ },
122
+ "boolean_literal": {
123
+ "pattern": "\\b(true|false)\\b",
124
+ "type": "string"
125
+ },
126
+ "path_literal": {
127
+ "pattern": "(/[\\w.-]+)+",
128
+ "type": "path"
129
+ },
130
+ "command_substitution": {
131
+ "pattern": "^\\$\\(.*\\)$",
132
+ "type": "string (from command)"
133
+ },
134
+ "arithmetic": {
135
+ "pattern": "^\\$\\(\\(.*\\)\\)$",
136
+ "type": "integer"
137
+ },
138
+ "boolean_pattern": {
139
+ "pattern": "^(true|false|0|1)$",
140
+ "type": "boolean (exit status)"
141
+ },
142
+ "variable_reference": {
143
+ "pattern": "^\\$\\{?\\w+\\}?$",
144
+ "type": "string (variable)"
145
+ },
146
+ "process_substitution": {
147
+ "pattern": "^<\\(.*\\)$|^>\\(.*\\)$",
148
+ "type": "file descriptor"
149
+ },
150
+ "heredoc": {
151
+ "pattern": "^<<-?\\s*\\w+",
152
+ "type": "string (heredoc)"
153
+ },
154
+ "null_literal": {
155
+ "pattern": "\\\\b(null)\\\\b",
156
+ "type": "null"
157
+ }
158
+ },
159
+ "attributeDescriptions": {
160
+ "a": "indexed array",
161
+ "A": "associative array",
162
+ "i": "integer",
163
+ "l": "lowercase",
164
+ "u": "uppercase",
165
+ "r": "readonly",
166
+ "x": "exported",
167
+ "n": "nameref",
168
+ "t": "trace"
169
+ },
170
+ "exitStatusMeanings": {
171
+ "0": "success",
172
+ "1": "general error",
173
+ "2": "misuse of builtin",
174
+ "126": "not executable",
175
+ "127": "command not found",
176
+ "128": "invalid exit argument",
177
+ "130": "killed by SIGINT (Ctrl+C)",
178
+ "137": "killed by SIGKILL",
179
+ "143": "killed by SIGTERM"
180
+ },
181
+ "signalDescriptions": {
182
+ "1": "HUP - hangup / reload",
183
+ "2": "INT - interrupt (Ctrl+C)",
184
+ "3": "QUIT - core dump",
185
+ "9": "KILL - force kill (uncatchable)",
186
+ "13": "PIPE - broken pipe",
187
+ "15": "TERM - graceful termination",
188
+ "17": "CHLD - child status change",
189
+ "18": "CONT - continue stopped process",
190
+ "19": "STOP - stop (uncatchable)",
191
+ "20": "TSTP - terminal stop (Ctrl+Z)",
192
+ "SIGHUP": "hangup / reload",
193
+ "SIGINT": "interrupt (Ctrl+C)",
194
+ "SIGQUIT": "quit with core dump",
195
+ "SIGKILL": "force kill (uncatchable)",
196
+ "SIGTERM": "graceful termination",
197
+ "SIGSTOP": "stop (uncatchable)",
198
+ "SIGCONT": "continue stopped process",
199
+ "SIGTSTP": "terminal stop (Ctrl+Z)",
200
+ "EXIT": "shell exit (pseudo-signal)",
201
+ "ERR": "command failure (with set -e)",
202
+ "DEBUG": "before each command",
203
+ "RETURN": "after function/source return"
204
+ },
205
+ "testOperatorDescriptions": {
206
+ "-f": "is regular file",
207
+ "-d": "is directory",
208
+ "-e": "exists (any type)",
209
+ "-s": "exists and non-empty",
210
+ "-r": "is readable",
211
+ "-w": "is writable",
212
+ "-x": "is executable",
213
+ "-L": "is symlink",
214
+ "-h": "is symlink",
215
+ "-p": "is named pipe",
216
+ "-S": "is socket",
217
+ "-b": "is block device",
218
+ "-c": "is character device",
219
+ "-z": "string is empty",
220
+ "-n": "string is non-empty",
221
+ "-t": "fd is open terminal"
222
+ }
223
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "language": "tailwindcss",
3
+ "inlayHintPatterns": [
4
+ {
5
+ "pattern": "\\bp-(\\d+)\\b",
6
+ "kind": "type",
7
+ "label": "padding: ${1 * 0.25}rem",
8
+ "position": "after",
9
+ "description": "Shows the computed padding value in rem for spacing utilities. E.g. p-4 → padding: 1rem (16px)."
10
+ },
11
+ {
12
+ "pattern": "\\bm-(\\d+)\\b",
13
+ "kind": "type",
14
+ "label": "margin: ${1 * 0.25}rem",
15
+ "position": "after",
16
+ "description": "Shows the computed margin value in rem. E.g. m-4 → margin: 1rem (16px)."
17
+ },
18
+ {
19
+ "pattern": "\\bgap-(\\d+)\\b",
20
+ "kind": "type",
21
+ "label": "gap: ${1 * 0.25}rem",
22
+ "position": "after",
23
+ "description": "Shows the computed gap value. E.g. gap-4 → gap: 1rem (16px)."
24
+ },
25
+ {
26
+ "pattern": "\\bw-(\\d+)\\b",
27
+ "kind": "type",
28
+ "label": "width: ${1 * 0.25}rem",
29
+ "position": "after",
30
+ "description": "Shows the computed width value for numeric width utilities."
31
+ },
32
+ {
33
+ "pattern": "\\bh-(\\d+)\\b",
34
+ "kind": "type",
35
+ "label": "height: ${1 * 0.25}rem",
36
+ "position": "after",
37
+ "description": "Shows the computed height value for numeric height utilities."
38
+ },
39
+ {
40
+ "pattern": "\\bbg-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(50|100|200|300|400|500|600|700|800|900|950)\\b",
41
+ "kind": "type",
42
+ "label": "→ #{color_hex}",
43
+ "position": "after",
44
+ "description": "Shows the hex color value for Tailwind palette colors. E.g. bg-blue-500 → #3b82f6."
45
+ },
46
+ {
47
+ "pattern": "\\btext-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(50|100|200|300|400|500|600|700|800|900|950)\\b",
48
+ "kind": "type",
49
+ "label": "→ #{color_hex}",
50
+ "position": "after",
51
+ "description": "Shows the hex color value for text color utilities."
52
+ },
53
+ {
54
+ "pattern": "\\bborder-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(50|100|200|300|400|500|600|700|800|900|950)\\b",
55
+ "kind": "type",
56
+ "label": "→ #{color_hex}",
57
+ "position": "after",
58
+ "description": "Shows the hex color value for border color utilities."
59
+ },
60
+ {
61
+ "pattern": "\\b(sm):",
62
+ "kind": "parameter",
63
+ "label": "≥640px",
64
+ "position": "after",
65
+ "description": "Shows the min-width breakpoint value for sm: prefix."
66
+ },
67
+ {
68
+ "pattern": "\\b(md):",
69
+ "kind": "parameter",
70
+ "label": "≥768px",
71
+ "position": "after",
72
+ "description": "Shows the min-width breakpoint value for md: prefix."
73
+ },
74
+ {
75
+ "pattern": "\\b(lg):",
76
+ "kind": "parameter",
77
+ "label": "≥1024px",
78
+ "position": "after",
79
+ "description": "Shows the min-width breakpoint value for lg: prefix."
80
+ },
81
+ {
82
+ "pattern": "\\b(xl):",
83
+ "kind": "parameter",
84
+ "label": "≥1280px",
85
+ "position": "after",
86
+ "description": "Shows the min-width breakpoint value for xl: prefix."
87
+ },
88
+ {
89
+ "pattern": "\\b(2xl):",
90
+ "kind": "parameter",
91
+ "label": "≥1536px",
92
+ "position": "after",
93
+ "description": "Shows the min-width breakpoint value for 2xl: prefix."
94
+ },
95
+ {
96
+ "pattern": "\\btext-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|8xl|9xl)\\b",
97
+ "kind": "type",
98
+ "label": "→ font-size",
99
+ "position": "after",
100
+ "description": "Shows the computed font-size. E.g. text-lg → 1.125rem / 18px."
101
+ },
102
+ {
103
+ "pattern": "\\brounded-(none|sm|md|lg|xl|2xl|3xl|full)\\b",
104
+ "kind": "type",
105
+ "label": "→ border-radius",
106
+ "position": "after",
107
+ "description": "Shows the computed border-radius value. E.g. rounded-lg → 0.5rem / 8px."
108
+ }
109
+ ],
110
+ "typeInferenceRules": {}
111
+ }
@@ -0,0 +1,135 @@
1
+ {
2
+ "language": "angular",
3
+ "inlineCompletions": [
4
+ {
5
+ "text": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-${1:name}',\n templateUrl: './${1:name}.component.html',\n styleUrls: ['./${1:name}.component.scss']\n})\nexport class ${2:Name}Component {\n constructor() {}\n}",
6
+ "description": "Angular component class with external template and styles",
7
+ "triggerPrefix": "ang-component"
8
+ },
9
+ {
10
+ "text": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-${1:name}',\n standalone: true,\n imports: [],\n template: `\n <div>\n ${2:content}\n </div>\n `,\n styles: []\n})\nexport class ${3:Name}Component {\n constructor() {}\n}",
11
+ "description": "Angular standalone component with inline template",
12
+ "triggerPrefix": "ang-standalone-component"
13
+ },
14
+ {
15
+ "text": "import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ${1:Name}Service {\n constructor() {}\n}",
16
+ "description": "Angular injectable service provided in root",
17
+ "triggerPrefix": "ang-service"
18
+ },
19
+ {
20
+ "text": "import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[app${1:Name}]',\n standalone: true\n})\nexport class ${1:Name}Directive {\n constructor(private el: ElementRef) {}\n}",
21
+ "description": "Angular standalone directive",
22
+ "triggerPrefix": "ang-directive"
23
+ },
24
+ {
25
+ "text": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: '${1:pipeName}',\n standalone: true\n})\nexport class ${2:Name}Pipe implements PipeTransform {\n transform(value: unknown, ...args: unknown[]): unknown {\n return value;\n }\n}",
26
+ "description": "Angular standalone pipe implementing PipeTransform",
27
+ "triggerPrefix": "ang-pipe"
28
+ },
29
+ {
30
+ "text": "import { CanActivateFn } from '@angular/router';\n\nexport const ${1:auth}Guard: CanActivateFn = (route, state) => {\n return true;\n};",
31
+ "description": "Angular functional route guard (CanActivateFn)",
32
+ "triggerPrefix": "ang-guard"
33
+ },
34
+ {
35
+ "text": "import { HttpInterceptorFn } from '@angular/common/http';\n\nexport const ${1:name}Interceptor: HttpInterceptorFn = (req, next) => {\n const modifiedReq = req.clone({\n setHeaders: {\n Authorization: `Bearer ${2:token}`\n }\n });\n return next(modifiedReq);\n};",
36
+ "description": "Angular functional HTTP interceptor",
37
+ "triggerPrefix": "ang-interceptor"
38
+ },
39
+ {
40
+ "text": "import { ResolveFn } from '@angular/router';\n\nexport const ${1:name}Resolver: ResolveFn<${2:any}> = (route, state) => {\n return ${3:null};\n};",
41
+ "description": "Angular functional route resolver",
42
+ "triggerPrefix": "ang-resolver"
43
+ },
44
+ {
45
+ "text": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n exports: []\n})\nexport class ${1:Name}Module {}",
46
+ "description": "Angular NgModule",
47
+ "triggerPrefix": "ang-module"
48
+ },
49
+ {
50
+ "text": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { CommonModule } from '@angular/common';\n\nconst routes: Routes = [\n { path: '', component: ${1:Name}Component }\n];\n\n@NgModule({\n declarations: [${1:Name}Component],\n imports: [\n CommonModule,\n RouterModule.forChild(routes)\n ]\n})\nexport class ${1:Name}Module {}",
51
+ "description": "Angular feature module with routing",
52
+ "triggerPrefix": "ang-feature-module"
53
+ },
54
+ {
55
+ "text": "{\n path: '${1:feature}',\n loadChildren: () => import('./${1:feature}/${1:feature}.module').then(m => m.${2:Feature}Module)\n}",
56
+ "description": "Lazy-loaded route configuration",
57
+ "triggerPrefix": "ang-lazy-route"
58
+ },
59
+ {
60
+ "text": "import { FormGroup, FormControl, Validators } from '@angular/forms';\n\n${1:form} = new FormGroup({\n ${2:name}: new FormControl('', [Validators.required]),\n ${3:email}: new FormControl('', [Validators.required, Validators.email])\n});\n\nonSubmit(): void {\n if (this.${1:form}.valid) {\n console.log(this.${1:form}.value);\n }\n}",
61
+ "description": "Reactive form group with validators",
62
+ "triggerPrefix": "ang-reactive-form"
63
+ },
64
+ {
65
+ "text": "<form #${1:form}=\"ngForm\" (ngSubmit)=\"onSubmit(${1:form})\">\n <input name=\"${2:field}\" ngModel required />\n <button type=\"submit\" [disabled]=\"${1:form}.invalid\">Submit</button>\n</form>",
66
+ "description": "Template-driven form with ngModel",
67
+ "triggerPrefix": "ang-template-form"
68
+ },
69
+ {
70
+ "text": "import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport function ${1:customValidator}(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const isValid = ${2:true};\n return isValid ? null : { ${1:customValidator}: { value: control.value } };\n };\n}",
71
+ "description": "Custom form validator function",
72
+ "triggerPrefix": "ang-validator"
73
+ },
74
+ {
75
+ "text": "import { ErrorHandler, Injectable } from '@angular/core';\n\n@Injectable()\nexport class GlobalErrorHandler implements ErrorHandler {\n handleError(error: unknown): void {\n console.error('Unhandled error:', error);\n }\n}",
76
+ "description": "Global error handler service",
77
+ "triggerPrefix": "ang-error-handler"
78
+ },
79
+ {
80
+ "text": "import { Component, signal, computed, effect } from '@angular/core';\n\n@Component({\n selector: 'app-${1:name}',\n standalone: true,\n template: `\n <div>{{ ${2:count}() }}</div>\n <button (click)=\"increment()\">+</button>\n `\n})\nexport class ${3:Name}Component {\n ${2:count} = signal(0);\n double = computed(() => this.${2:count}() * 2);\n\n constructor() {\n effect(() => {\n console.log('Count changed:', this.${2:count}());\n });\n }\n\n increment(): void {\n this.${2:count}.update(v => v + 1);\n }\n}",
81
+ "description": "Signal-based standalone component with computed and effect",
82
+ "triggerPrefix": "ang-signal-component"
83
+ },
84
+ {
85
+ "text": "import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';\nimport { computed } from '@angular/core';\n\ntype ${1:Name}State = {\n items: ${2:any}[];\n loading: boolean;\n};\n\nconst initialState: ${1:Name}State = {\n items: [],\n loading: false\n};\n\nexport const ${3:Name}Store = signalStore(\n withState(initialState),\n withComputed((store) => ({\n itemCount: computed(() => store.items().length)\n })),\n withMethods((store) => ({\n addItem(item: ${2:any}): void {\n patchState(store, { items: [...store.items(), item] });\n },\n setLoading(loading: boolean): void {\n patchState(store, { loading });\n }\n }))\n);",
86
+ "description": "NgRx signal store with state, computed, and methods",
87
+ "triggerPrefix": "ang-signal-store"
88
+ },
89
+ {
90
+ "text": "import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ${1:Name}Service {\n private http = inject(HttpClient);\n private apiUrl = '${2:/api}';\n\n getAll(): Observable<${3:any}[]> {\n return this.http.get<${3:any}[]>(this.apiUrl);\n }\n\n getById(id: string): Observable<${3:any}> {\n return this.http.get<${3:any}>(`${this.apiUrl}/${id}`);\n }\n\n create(data: Partial<${3:any}>): Observable<${3:any}> {\n return this.http.post<${3:any}>(this.apiUrl, data);\n }\n\n update(id: string, data: Partial<${3:any}>): Observable<${3:any}> {\n return this.http.put<${3:any}>(`${this.apiUrl}/${id}`, data);\n }\n\n delete(id: string): Observable<void> {\n return this.http.delete<void>(`${this.apiUrl}/${id}`);\n }\n}",
91
+ "description": "HTTP service with full CRUD methods using inject()",
92
+ "triggerPrefix": "ang-http-service"
93
+ },
94
+ {
95
+ "text": "{\n path: '${1:parent}',\n component: ${2:Parent}Component,\n children: [\n { path: '', component: ${3:List}Component },\n { path: ':id', component: ${4:Detail}Component },\n { path: 'create', component: ${5:Create}Component }\n ]\n}",
96
+ "description": "Route configuration with child routes",
97
+ "triggerPrefix": "ang-route-children"
98
+ },
99
+ {
100
+ "text": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { ${1:Name}Component } from './${2:name}.component';\n\ndescribe('${1:Name}Component', () => {\n let component: ${1:Name}Component;\n let fixture: ComponentFixture<${1:Name}Component>;\n\n beforeEach(async () => {\n await TestBed.configureTestingModule({\n imports: [${1:Name}Component]\n }).compileComponents();\n\n fixture = TestBed.createComponent(${1:Name}Component);\n component = fixture.componentInstance;\n fixture.detectChanges();\n });\n\n it('should create', () => {\n expect(component).toBeTruthy();\n });\n});",
101
+ "description": "Unit test with TestBed for standalone component",
102
+ "triggerPrefix": "ang-test"
103
+ },
104
+ {
105
+ "text": "export const environment = {\n production: ${1:false},\n apiUrl: '${2:http://localhost:3000/api}',\n appName: '${3:MyApp}'\n};",
106
+ "description": "Environment configuration file",
107
+ "triggerPrefix": "ang-environment"
108
+ },
109
+ {
110
+ "text": "import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\n\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes),\n provideHttpClient(withInterceptors([]))\n ]\n};",
111
+ "description": "app.config.ts with providers for standalone app",
112
+ "triggerPrefix": "ang-app-config"
113
+ },
114
+ {
115
+ "text": "import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch((err) => console.error(err));",
116
+ "description": "main.ts bootstrap for standalone Angular app",
117
+ "triggerPrefix": "ang-main"
118
+ },
119
+ {
120
+ "text": "import { Component, inject } from '@angular/core';\nimport { ${1:Name}Service } from './${2:name}.service';\n\n@Component({\n selector: 'app-${2:name}',\n standalone: true,\n template: `\n <div>{{ data() }}</div>\n `\n})\nexport class ${1:Name}Component {\n private ${2:name}Service = inject(${1:Name}Service);\n data = this.${2:name}Service.getData();\n}",
121
+ "description": "Component using inject() function for dependency injection",
122
+ "triggerPrefix": "ang-inject-component"
123
+ },
124
+ {
125
+ "text": "import { Component, input, output } from '@angular/core';\n\n@Component({\n selector: 'app-${1:name}',\n standalone: true,\n template: `\n <div>{{ title() }}</div>\n <button (click)=\"clicked.emit()\">Click</button>\n `\n})\nexport class ${2:Name}Component {\n title = input.required<string>();\n value = input<number>(0);\n clicked = output<void>();\n}",
126
+ "description": "Component with signal-based input() and output()",
127
+ "triggerPrefix": "ang-signal-io"
128
+ },
129
+ {
130
+ "text": "import { Component, viewChild, ElementRef, AfterViewInit } from '@angular/core';\n\n@Component({\n selector: 'app-${1:name}',\n standalone: true,\n template: `\n <div #${2:container}>Content</div>\n `\n})\nexport class ${3:Name}Component implements AfterViewInit {\n ${2:container} = viewChild.required<ElementRef>('${2:container}');\n\n ngAfterViewInit(): void {\n console.log(this.${2:container}().nativeElement);\n }\n}",
131
+ "description": "Component with signal-based viewChild query",
132
+ "triggerPrefix": "ang-viewchild"
133
+ }
134
+ ]
135
+ }
@@ -0,0 +1,125 @@
1
+ {
2
+ "language": "css",
3
+ "inlineCompletions": [
4
+ {
5
+ "triggerPattern": "display:\\s*",
6
+ "insertText": "flex;\njustify-content: ${1:center};\nalign-items: ${2:center};",
7
+ "description": "Flexbox layout with justify-content and align-items. Most common pattern for centering elements.",
8
+ "completeBracketPairs": true
9
+ },
10
+ {
11
+ "triggerPattern": "display:\\s*g",
12
+ "insertText": "grid;\ngrid-template-columns: repeat(${1:auto-fill}, minmax(${2:250px}, 1fr));\ngap: ${3:1rem};",
13
+ "description": "Responsive CSS Grid layout with auto-fill and minmax for fluid column sizing.",
14
+ "completeBracketPairs": true
15
+ },
16
+ {
17
+ "triggerPattern": "@media\\s*\\(",
18
+ "insertText": "max-width: ${1:768px}) {\n\t$0\n}",
19
+ "description": "Desktop-first media query breakpoint. Applies styles at or below the specified width.",
20
+ "completeBracketPairs": true
21
+ },
22
+ {
23
+ "triggerPattern": "@media\\s*\\(min",
24
+ "insertText": "min-width: ${1:768px}) {\n\t$0\n}",
25
+ "description": "Mobile-first media query breakpoint. Applies styles at or above the specified width.",
26
+ "completeBracketPairs": true
27
+ },
28
+ {
29
+ "triggerPattern": "@media\\s*\\(prefers-color",
30
+ "insertText": "prefers-color-scheme: dark) {\n\t:root {\n\t\t--bg: ${1:#121212};\n\t\t--text: ${2:#e0e0e0};\n\t}\n}",
31
+ "description": "Prefers-color-scheme dark mode media query with CSS custom property overrides.",
32
+ "completeBracketPairs": true
33
+ },
34
+ {
35
+ "triggerPattern": "animation:\\s*",
36
+ "insertText": "${1:name} ${2:0.3s} ${3:ease-in-out} ${4:forwards};",
37
+ "description": "Animation shorthand with name, duration, timing function, and fill mode.",
38
+ "completeBracketPairs": true
39
+ },
40
+ {
41
+ "triggerPattern": "transition:\\s*",
42
+ "insertText": "${1:all} ${2:0.3s} ${3:ease};",
43
+ "description": "Transition shorthand with property, duration, and timing function.",
44
+ "completeBracketPairs": true
45
+ },
46
+ {
47
+ "triggerPattern": "background:\\s*linear",
48
+ "insertText": "linear-gradient(${1|to right,to bottom,135deg,to bottom right|}, ${2:#667eea}, ${3:#764ba2});",
49
+ "description": "Linear gradient background with direction and color stops.",
50
+ "completeBracketPairs": true
51
+ },
52
+ {
53
+ "triggerPattern": "position:\\s*a",
54
+ "insertText": "absolute;\ntop: ${1:50%};\nleft: ${2:50%};\ntransform: translate(-50%, -50%);",
55
+ "description": "Absolute centering pattern using position absolute with transform.",
56
+ "completeBracketPairs": true
57
+ },
58
+ {
59
+ "triggerPattern": "position:\\s*s(?=t)",
60
+ "insertText": "sticky;\ntop: ${1:0};",
61
+ "description": "Sticky positioning with top offset. Element sticks to position during scroll.",
62
+ "completeBracketPairs": true
63
+ },
64
+ {
65
+ "triggerPattern": "@keyframes\\s+",
66
+ "insertText": "${1:animationName} {\n\tfrom {\n\t\t${2:opacity: 0;}\n\t\t${3:transform: translateY(10px);}\n\t}\n\tto {\n\t\t${4:opacity: 1;}\n\t\t${5:transform: translateY(0);}\n\t}\n}",
67
+ "description": "Keyframes animation definition with from/to states for fade and slide effect.",
68
+ "completeBracketPairs": true
69
+ },
70
+ {
71
+ "triggerPattern": "@font-face\\s*\\{",
72
+ "insertText": "\n\tfont-family: '${1:FontName}';\n\tsrc: url('${2:fonts/${1}.woff2}') format('woff2'),\n\t url('${3:fonts/${1}.woff}') format('woff');\n\tfont-weight: ${4:400};\n\tfont-style: ${5:normal};\n\tfont-display: ${6:swap};\n",
73
+ "description": "Font-face declaration with woff2/woff sources and font-display swap for performance.",
74
+ "completeBracketPairs": true
75
+ },
76
+ {
77
+ "triggerPattern": "grid-template-areas:\\s*",
78
+ "insertText": "\"${1:header} ${1:header} ${1:header}\"\n\t\"${2:sidebar} ${3:main} ${3:main}\"\n\t\"${4:footer} ${4:footer} ${4:footer}\";",
79
+ "description": "Grid template areas with a common header/sidebar/main/footer layout.",
80
+ "completeBracketPairs": true
81
+ },
82
+ {
83
+ "triggerPattern": "border-radius:\\s*",
84
+ "insertText": "${1|4px,8px,12px,50%,9999px|};",
85
+ "description": "Border radius with common presets: subtle rounding, moderate rounding, circle, and pill shape.",
86
+ "completeBracketPairs": true
87
+ },
88
+ {
89
+ "triggerPattern": "box-shadow:\\s*",
90
+ "insertText": "${1:0} ${2:2px} ${3:4px} ${4:rgba(0, 0, 0, 0.1)};",
91
+ "description": "Box shadow with x-offset, y-offset, blur radius, and semi-transparent color.",
92
+ "completeBracketPairs": true
93
+ },
94
+ {
95
+ "triggerPattern": "text-overflow:\\s*",
96
+ "insertText": "ellipsis;\nwhite-space: nowrap;\noverflow: hidden;",
97
+ "description": "Text truncation pattern with ellipsis, preventing text wrap and hiding overflow.",
98
+ "completeBracketPairs": true
99
+ },
100
+ {
101
+ "triggerPattern": "@layer\\s+",
102
+ "insertText": "${1:base}, ${2:components}, ${3:utilities};",
103
+ "description": "Cascade layer ordering declaration. Layers listed first have lowest priority.",
104
+ "completeBracketPairs": true
105
+ },
106
+ {
107
+ "triggerPattern": "@container\\s*\\(",
108
+ "insertText": "min-width: ${1:400px}) {\n\t$0\n}",
109
+ "description": "Container query for component-level responsive design based on container size.",
110
+ "completeBracketPairs": true
111
+ },
112
+ {
113
+ "triggerPattern": "scroll-snap-type:\\s*",
114
+ "insertText": "${1|x,y,both|} ${2|mandatory,proximity|};",
115
+ "description": "Scroll snap type for axis and strictness. Creates carousel-like scroll behavior.",
116
+ "completeBracketPairs": true
117
+ },
118
+ {
119
+ "triggerPattern": "aspect-ratio:\\s*",
120
+ "insertText": "${1|16 / 9,4 / 3,1 / 1,3 / 2,21 / 9|};",
121
+ "description": "Aspect ratio with common presets: widescreen, standard, square, photo, ultrawide.",
122
+ "completeBracketPairs": true
123
+ }
124
+ ]
125
+ }
@@ -12,6 +12,18 @@
12
12
  "insertText": "const ${1:name} = (${2:params}) => {\n\t$0\n};",
13
13
  "description": "Arrow function",
14
14
  "completeBracketPairs": true
15
+ },
16
+ {
17
+ "triggerPattern": "^\\\\s*rfc\\\\s*$",
18
+ "insertText": "function ${1:Component}() {\n\treturn (\n\t\t<div className=\"${2}\">${3}</div>\n\t);\n}\n\nexport default ${1:Component};",
19
+ "description": "React function component (JSX)",
20
+ "completeBracketPairs": true
21
+ },
22
+ {
23
+ "triggerPattern": "^\\\\s*useState\\\\s*$",
24
+ "insertText": "const [${1:state}, set${2:State}] = useState(${3:initial});",
25
+ "description": "React useState hook",
26
+ "completeBracketPairs": true
15
27
  }
16
28
  ]
17
29
  }