@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.
Files changed (62) hide show
  1. package/data/codeActions/css.json +111 -0
  2. package/data/codeActions/tailwindcss.json +76 -0
  3. package/data/codeLens/css.json +68 -0
  4. package/data/codeLens/tailwindcss.json +47 -0
  5. package/data/color/css.json +124 -0
  6. package/data/color/tailwindcss.json +53 -0
  7. package/data/commands/css.json +41 -0
  8. package/data/commands/manifest.json +729 -727
  9. package/data/commands/tailwindcss.json +53 -0
  10. package/data/completion/css.json +383 -0
  11. package/data/completion/javascript.json +27 -0
  12. package/data/completion/redis-cli.json +1 -1
  13. package/data/completion/tailwindcss.json +284 -0
  14. package/data/completion/typescript.json +27 -0
  15. package/data/declaration/css.json +59 -0
  16. package/data/declaration/tailwindcss.json +65 -0
  17. package/data/definition/css.json +115 -0
  18. package/data/definition/redis-cli.json +1 -1
  19. package/data/definition/tailwindcss.json +115 -0
  20. package/data/documentHighlight/css.json +50 -0
  21. package/data/documentHighlight/tailwindcss.json +65 -0
  22. package/data/documentRangeFormatting/css.json +101 -0
  23. package/data/documentRangeFormatting/tailwindcss.json +55 -0
  24. package/data/documentSymbol/css.json +96 -0
  25. package/data/documentSymbol/tailwindcss.json +61 -0
  26. package/data/foldingRange/css.json +66 -0
  27. package/data/foldingRange/tailwindcss.json +60 -0
  28. package/data/formatting/css.json +73 -0
  29. package/data/formatting/tailwindcss.json +48 -0
  30. package/data/hover/css.json +68 -0
  31. package/data/hover/redis-cli.json +1 -1
  32. package/data/hover/tailwindcss.json +968 -0
  33. package/data/implementation/css.json +65 -0
  34. package/data/implementation/tailwindcss.json +59 -0
  35. package/data/inlayHints/css.json +87 -0
  36. package/data/inlayHints/tailwindcss.json +111 -0
  37. package/data/inlineCompletions/css.json +125 -0
  38. package/data/inlineCompletions/javascript.json +12 -0
  39. package/data/inlineCompletions/tailwindcss.json +411 -0
  40. package/data/inlineCompletions/typescript.json +12 -0
  41. package/data/linkedEditingRange/css.json +40 -0
  42. package/data/linkedEditingRange/tailwindcss.json +30 -0
  43. package/data/links/css.json +55 -0
  44. package/data/links/tailwindcss.json +40 -0
  45. package/data/manifest.json +62 -0
  46. package/data/onTypeFormatting/css.json +82 -0
  47. package/data/onTypeFormatting/tailwindcss.json +63 -0
  48. package/data/rangeSemanticTokens/css.json +125 -0
  49. package/data/rangeSemanticTokens/tailwindcss.json +95 -0
  50. package/data/references/css.json +65 -0
  51. package/data/references/tailwindcss.json +59 -0
  52. package/data/rename/css.json +91 -0
  53. package/data/rename/tailwindcss.json +58 -0
  54. package/data/selectionRange/css.json +55 -0
  55. package/data/selectionRange/tailwindcss.json +35 -0
  56. package/data/semanticTokens/css.json +107 -0
  57. package/data/semanticTokens/tailwindcss.json +161 -0
  58. package/data/signatureHelp/css.json +137 -0
  59. package/data/signatureHelp/tailwindcss.json +64 -0
  60. package/data/typeDefinition/css.json +53 -0
  61. package/data/typeDefinition/tailwindcss.json +47 -0
  62. package/package.json +1 -1
@@ -0,0 +1,411 @@
1
+ {
2
+ "language": "tailwindcss",
3
+ "inlineCompletions": [
4
+ {
5
+ "triggerPattern": "flex\\s+",
6
+ "insertText": "flex items-center justify-center",
7
+ "description": "Common flex centering pattern — centers items both vertically and horizontally.",
8
+ "completeBracketPairs": true
9
+ },
10
+ {
11
+ "triggerPattern": "flex\\s+items-center\\s+",
12
+ "insertText": "flex items-center justify-between",
13
+ "description": "Flex row with vertically centered items spaced between — common navbar/header layout.",
14
+ "completeBracketPairs": true
15
+ },
16
+ {
17
+ "triggerPattern": "grid\\s+",
18
+ "insertText": "grid grid-cols-3 gap-4",
19
+ "description": "3-column responsive grid with gap — common card/gallery layout pattern.",
20
+ "completeBracketPairs": true
21
+ },
22
+ {
23
+ "triggerPattern": "grid\\s+grid-cols-",
24
+ "insertText": "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",
25
+ "description": "Responsive grid: 1 column on mobile, 2 on tablet, 3 on desktop.",
26
+ "completeBracketPairs": true
27
+ },
28
+ {
29
+ "triggerPattern": "rounded-",
30
+ "insertText": "rounded-lg shadow-md p-6 bg-white",
31
+ "description": "Card component pattern — rounded corners, shadow, padding, white background.",
32
+ "completeBracketPairs": true
33
+ },
34
+ {
35
+ "triggerPattern": "px-\\d+\\s+py-",
36
+ "insertText": "px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition",
37
+ "description": "Button component pattern — padded, colored, rounded with hover transition.",
38
+ "completeBracketPairs": true
39
+ },
40
+ {
41
+ "triggerPattern": "dark:",
42
+ "insertText": "dark:bg-gray-800 dark:text-white",
43
+ "description": "Common dark mode background and text color pairing.",
44
+ "completeBracketPairs": true
45
+ },
46
+ {
47
+ "triggerPattern": "hover:",
48
+ "insertText": "hover:bg-blue-600 hover:shadow-lg transition duration-200",
49
+ "description": "Interactive hover state with background change, shadow, and smooth transition.",
50
+ "completeBracketPairs": true
51
+ },
52
+ {
53
+ "triggerPattern": "focus:",
54
+ "insertText": "focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",
55
+ "description": "Accessible focus ring pattern — removes outline, adds visible ring indicator.",
56
+ "completeBracketPairs": true
57
+ },
58
+ {
59
+ "triggerPattern": "min-h-screen",
60
+ "insertText": "min-h-screen flex flex-col",
61
+ "description": "Full-height page layout pattern with flex column for sticky footer.",
62
+ "completeBracketPairs": true
63
+ },
64
+ {
65
+ "triggerPattern": "@tailwind\\s+",
66
+ "insertText": "@tailwind base;\n@tailwind components;\n@tailwind utilities;",
67
+ "description": "Standard Tailwind CSS entry point — includes all three directive layers.",
68
+ "completeBracketPairs": true
69
+ },
70
+ {
71
+ "triggerPattern": "@layer\\s+components\\s*\\{",
72
+ "insertText": "@layer components {\n .btn {\n @apply px-4 py-2 rounded-lg font-medium transition;\n }\n}",
73
+ "description": "Component layer with reusable button class using @apply.",
74
+ "completeBracketPairs": true
75
+ },
76
+ {
77
+ "triggerPattern": "container\\s+",
78
+ "insertText": "container mx-auto px-4",
79
+ "description": "Centered container with horizontal padding — common page wrapper pattern.",
80
+ "completeBracketPairs": true
81
+ },
82
+ {
83
+ "triggerPattern": "bg-gradient",
84
+ "insertText": "bg-gradient-to-r from-blue-500 to-purple-600",
85
+ "description": "Horizontal gradient background from blue to purple.",
86
+ "completeBracketPairs": true
87
+ },
88
+ {
89
+ "triggerPattern": "sr-only",
90
+ "insertText": "sr-only",
91
+ "description": "Screen-reader only — visually hides element while keeping it accessible.",
92
+ "completeBracketPairs": true
93
+ },
94
+
95
+ {
96
+ "triggerPattern": "flex\\s+flex-col\\s+",
97
+ "insertText": "flex flex-col min-h-screen",
98
+ "description": "Full-height flex column layout — common for page shell with sticky header/footer.",
99
+ "completeBracketPairs": true
100
+ },
101
+ {
102
+ "triggerPattern": "flex\\s+items-center\\s+gap-",
103
+ "insertText": "flex items-center gap-4 p-4",
104
+ "description": "Flex row with centered items, gap, and padding — toolbar/action bar pattern.",
105
+ "completeBracketPairs": true
106
+ },
107
+ {
108
+ "triggerPattern": "grid\\s+grid-cols-1\\s+",
109
+ "insertText": "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6",
110
+ "description": "Responsive grid: 1→2→3→4 columns across breakpoints — product/card grid.",
111
+ "completeBracketPairs": true
112
+ },
113
+ {
114
+ "triggerPattern": "grid\\s+grid-cols-12",
115
+ "insertText": "grid grid-cols-12 gap-4",
116
+ "description": "12-column layout grid with gap — traditional columnar layout.",
117
+ "completeBracketPairs": true
118
+ },
119
+ {
120
+ "triggerPattern": "absolute\\s+",
121
+ "insertText": "absolute inset-0",
122
+ "description": "Absolute position filling parent — overlay pattern.",
123
+ "completeBracketPairs": true
124
+ },
125
+ {
126
+ "triggerPattern": "absolute\\s+inset-0\\s+",
127
+ "insertText": "absolute inset-0 flex items-center justify-center bg-black/50",
128
+ "description": "Centered overlay with semi-transparent background — modal backdrop.",
129
+ "completeBracketPairs": true
130
+ },
131
+ {
132
+ "triggerPattern": "fixed\\s+",
133
+ "insertText": "fixed inset-x-0 top-0 z-50",
134
+ "description": "Fixed top bar — sticky header/navbar pattern.",
135
+ "completeBracketPairs": true
136
+ },
137
+ {
138
+ "triggerPattern": "fixed\\s+bottom-",
139
+ "insertText": "fixed bottom-4 right-4 z-50",
140
+ "description": "Fixed bottom-right FAB — floating action button pattern.",
141
+ "completeBracketPairs": true
142
+ },
143
+ {
144
+ "triggerPattern": "sticky\\s+",
145
+ "insertText": "sticky top-0 z-40 bg-white/80 backdrop-blur-sm",
146
+ "description": "Sticky header with glass morphism — frosted glass navbar.",
147
+ "completeBracketPairs": true
148
+ },
149
+ {
150
+ "triggerPattern": "relative\\s+overflow-",
151
+ "insertText": "relative overflow-hidden rounded-lg",
152
+ "description": "Relative container with hidden overflow and rounding — image card pattern.",
153
+ "completeBracketPairs": true
154
+ },
155
+
156
+ {
157
+ "triggerPattern": "max-w-\\w+\\s+mx-",
158
+ "insertText": "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",
159
+ "description": "Responsive centered container — standard page width wrapper with responsive padding.",
160
+ "completeBracketPairs": true
161
+ },
162
+ {
163
+ "triggerPattern": "w-full\\s+max-",
164
+ "insertText": "w-full max-w-md mx-auto",
165
+ "description": "Centered card/form wrapper — medium-width centered content.",
166
+ "completeBracketPairs": true
167
+ },
168
+ {
169
+ "triggerPattern": "aspect-",
170
+ "insertText": "aspect-video rounded-lg overflow-hidden",
171
+ "description": "Video container — 16:9 ratio with rounded corners and clipped overflow.",
172
+ "completeBracketPairs": true
173
+ },
174
+
175
+ {
176
+ "triggerPattern": "px-\\d+\\s+py-\\d+\\s+",
177
+ "insertText": "px-6 py-3 bg-blue-600 text-white font-medium rounded-lg shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors",
178
+ "description": "Fully accessible button — padded, colored, rounded with hover, focus ring, and transition.",
179
+ "completeBracketPairs": true
180
+ },
181
+ {
182
+ "triggerPattern": "border\\s+rounded-",
183
+ "insertText": "border rounded-lg p-4 bg-white shadow-sm hover:shadow-md transition-shadow",
184
+ "description": "Interactive card — bordered, rounded, padded with hover shadow lift.",
185
+ "completeBracketPairs": true
186
+ },
187
+ {
188
+ "triggerPattern": "bg-white\\s+rounded-",
189
+ "insertText": "bg-white rounded-xl shadow-lg p-6 space-y-4",
190
+ "description": "Card component — white background, large rounded corners, shadow, spaced content.",
191
+ "completeBracketPairs": true
192
+ },
193
+ {
194
+ "triggerPattern": "bg-white\\s+dark:",
195
+ "insertText": "bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100",
196
+ "description": "Dark mode adaptive — light/dark background and text pair.",
197
+ "completeBracketPairs": true
198
+ },
199
+
200
+ {
201
+ "triggerPattern": "hover:scale-",
202
+ "insertText": "hover:scale-105 transition-transform duration-200",
203
+ "description": "Hover zoom effect — subtle scale up with smooth transition.",
204
+ "completeBracketPairs": true
205
+ },
206
+ {
207
+ "triggerPattern": "hover:bg-\\w+\\s+",
208
+ "insertText": "hover:bg-blue-700 active:bg-blue-800 focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 transition-colors",
209
+ "description": "Full interactive state stack — hover, active, and focus-visible states with transition.",
210
+ "completeBracketPairs": true
211
+ },
212
+ {
213
+ "triggerPattern": "group\\s+",
214
+ "insertText": "group relative cursor-pointer",
215
+ "description": "Group parent setup — enables group-hover/group-focus on children.",
216
+ "completeBracketPairs": true
217
+ },
218
+ {
219
+ "triggerPattern": "group-hover:",
220
+ "insertText": "group-hover:opacity-100 group-hover:translate-y-0 transition-all duration-200 opacity-0 translate-y-2",
221
+ "description": "Group hover reveal — element slides up and fades in when parent is hovered.",
222
+ "completeBracketPairs": true
223
+ },
224
+ {
225
+ "triggerPattern": "peer\\s+",
226
+ "insertText": "peer",
227
+ "description": "Peer sibling marker — enables peer-* variants on subsequent siblings.",
228
+ "completeBracketPairs": true
229
+ },
230
+ {
231
+ "triggerPattern": "peer-checked:",
232
+ "insertText": "peer-checked:bg-blue-600 peer-checked:text-white peer-checked:border-blue-600 transition-colors",
233
+ "description": "Peer checked state — styled label/toggle that reacts to checkbox state.",
234
+ "completeBracketPairs": true
235
+ },
236
+ {
237
+ "triggerPattern": "peer-focus:",
238
+ "insertText": "peer-focus:text-blue-600 peer-focus:text-sm peer-focus:-translate-y-5 transition-all",
239
+ "description": "Floating label pattern — label moves up and changes color when input is focused.",
240
+ "completeBracketPairs": true
241
+ },
242
+ {
243
+ "triggerPattern": "disabled:",
244
+ "insertText": "disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none",
245
+ "description": "Disabled state — reduces opacity and disables interaction.",
246
+ "completeBracketPairs": true
247
+ },
248
+ {
249
+ "triggerPattern": "aria-",
250
+ "insertText": "aria-expanded:rotate-180 transition-transform duration-200",
251
+ "description": "ARIA expanded rotation — icon rotates when element is expanded (accordion/dropdown).",
252
+ "completeBracketPairs": true
253
+ },
254
+
255
+ {
256
+ "triggerPattern": "sm:flex\\s+",
257
+ "insertText": "sm:flex sm:items-center sm:justify-between",
258
+ "description": "Responsive flex row from sm — stack on mobile, row with space-between on tablet+.",
259
+ "completeBracketPairs": true
260
+ },
261
+ {
262
+ "triggerPattern": "md:grid-cols-",
263
+ "insertText": "md:grid-cols-2 lg:grid-cols-3",
264
+ "description": "Responsive grid columns — 2 columns on tablet, 3 on desktop.",
265
+ "completeBracketPairs": true
266
+ },
267
+ {
268
+ "triggerPattern": "lg:flex-row\\s+",
269
+ "insertText": "lg:flex-row flex-col",
270
+ "description": "Responsive direction — column on mobile/tablet, row on desktop.",
271
+ "completeBracketPairs": true
272
+ },
273
+ {
274
+ "triggerPattern": "hidden\\s+sm:",
275
+ "insertText": "hidden sm:block",
276
+ "description": "Mobile-hidden — hidden on mobile, visible from sm breakpoint.",
277
+ "completeBracketPairs": true
278
+ },
279
+ {
280
+ "triggerPattern": "sm:hidden",
281
+ "insertText": "sm:hidden",
282
+ "description": "Desktop-hidden — visible on mobile only.",
283
+ "completeBracketPairs": true
284
+ },
285
+ {
286
+ "triggerPattern": "text-sm\\s+sm:",
287
+ "insertText": "text-sm sm:text-base md:text-lg lg:text-xl",
288
+ "description": "Responsive typography — text scales up across breakpoints.",
289
+ "completeBracketPairs": true
290
+ },
291
+ {
292
+ "triggerPattern": "p-4\\s+sm:",
293
+ "insertText": "p-4 sm:p-6 md:p-8 lg:p-12",
294
+ "description": "Responsive padding — padding increases across breakpoints.",
295
+ "completeBracketPairs": true
296
+ },
297
+ {
298
+ "triggerPattern": "gap-4\\s+sm:",
299
+ "insertText": "gap-4 sm:gap-6 md:gap-8",
300
+ "description": "Responsive gap — gap size increases across breakpoints.",
301
+ "completeBracketPairs": true
302
+ },
303
+
304
+ {
305
+ "triggerPattern": "@layer\\s+base\\s*\\{",
306
+ "insertText": "@layer base {\n html {\n @apply scroll-smooth antialiased;\n }\n body {\n @apply bg-white text-gray-900 dark:bg-gray-950 dark:text-gray-100;\n }\n}",
307
+ "description": "Base layer with global defaults — smooth scroll, antialiased text, dark mode body.",
308
+ "completeBracketPairs": true
309
+ },
310
+ {
311
+ "triggerPattern": "@layer\\s+utilities\\s*\\{",
312
+ "insertText": "@layer utilities {\n .text-balance {\n text-wrap: balance;\n }\n .no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n .no-scrollbar {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n}",
313
+ "description": "Utility layer with custom utilities — balanced text wrap and hidden scrollbar.",
314
+ "completeBracketPairs": true
315
+ },
316
+
317
+ {
318
+ "triggerPattern": "before:content-",
319
+ "insertText": "before:content-[''] before:absolute before:inset-0",
320
+ "description": "Before pseudo-element overlay — empty content, absolutely positioned to fill parent.",
321
+ "completeBracketPairs": true
322
+ },
323
+ {
324
+ "triggerPattern": "after:content-",
325
+ "insertText": "after:content-[''] after:absolute after:bottom-0 after:left-0 after:h-0.5 after:w-full after:bg-blue-500 after:scale-x-0 hover:after:scale-x-100 after:transition-transform",
326
+ "description": "Animated underline — expanding line on hover using ::after pseudo-element.",
327
+ "completeBracketPairs": true
328
+ },
329
+
330
+ {
331
+ "triggerPattern": "motion-safe:",
332
+ "insertText": "motion-safe:animate-bounce motion-reduce:animate-none",
333
+ "description": "Accessible animation — bounces for users who allow motion, static for those who don't.",
334
+ "completeBracketPairs": true
335
+ },
336
+ {
337
+ "triggerPattern": "print:",
338
+ "insertText": "print:hidden",
339
+ "description": "Print-hidden — hides element when printing.",
340
+ "completeBracketPairs": true
341
+ },
342
+ {
343
+ "triggerPattern": "placeholder:text-",
344
+ "insertText": "placeholder:text-gray-400 placeholder:italic",
345
+ "description": "Styled placeholder — gray italic placeholder text.",
346
+ "completeBracketPairs": true
347
+ },
348
+ {
349
+ "triggerPattern": "file:",
350
+ "insertText": "file:mr-4 file:py-2 file:px-4 file:rounded-lg file:border-0 file:bg-blue-50 file:text-blue-700 file:font-medium hover:file:bg-blue-100 file:cursor-pointer",
351
+ "description": "Styled file input button — rounded, colored file selector button with hover.",
352
+ "completeBracketPairs": true
353
+ },
354
+ {
355
+ "triggerPattern": "selection:",
356
+ "insertText": "selection:bg-blue-200 selection:text-blue-900",
357
+ "description": "Custom text selection — blue highlight with dark text.",
358
+ "completeBracketPairs": true
359
+ },
360
+ {
361
+ "triggerPattern": "marker:",
362
+ "insertText": "marker:text-blue-500",
363
+ "description": "Custom list markers — blue bullet points.",
364
+ "completeBracketPairs": true
365
+ },
366
+
367
+ {
368
+ "triggerPattern": "snap-x\\s+",
369
+ "insertText": "snap-x snap-mandatory overflow-x-auto flex gap-4 scroll-smooth",
370
+ "description": "Horizontal scroll snap carousel — flex row with mandatory snap points.",
371
+ "completeBracketPairs": true
372
+ },
373
+ {
374
+ "triggerPattern": "snap-start\\s+",
375
+ "insertText": "snap-start shrink-0 w-80",
376
+ "description": "Carousel item — snaps to start, doesn't shrink, fixed width.",
377
+ "completeBracketPairs": true
378
+ },
379
+ {
380
+ "triggerPattern": "backdrop-blur-",
381
+ "insertText": "backdrop-blur-md bg-white/30 dark:bg-gray-900/30",
382
+ "description": "Glass morphism — frosted glass effect with backdrop blur and semi-transparent background.",
383
+ "completeBracketPairs": true
384
+ },
385
+
386
+ {
387
+ "triggerPattern": "odd:",
388
+ "insertText": "odd:bg-gray-50 even:bg-white",
389
+ "description": "Striped rows — alternating row backgrounds for tables/lists.",
390
+ "completeBracketPairs": true
391
+ },
392
+ {
393
+ "triggerPattern": "first:",
394
+ "insertText": "first:mt-0 last:mb-0",
395
+ "description": "Boundary margin reset — removes top margin from first and bottom margin from last child.",
396
+ "completeBracketPairs": true
397
+ },
398
+ {
399
+ "triggerPattern": "data-\\[",
400
+ "insertText": "data-[state=open]:animate-in data-[state=closed]:animate-out",
401
+ "description": "Data state animations — animate in/out based on open/closed data attribute.",
402
+ "completeBracketPairs": true
403
+ },
404
+ {
405
+ "triggerPattern": "has-\\[",
406
+ "insertText": "has-[:checked]:bg-blue-50 has-[:checked]:ring-2 has-[:checked]:ring-blue-500",
407
+ "description": "Parent styling from child state — parent highlights when child checkbox is checked.",
408
+ "completeBracketPairs": true
409
+ }
410
+ ]
411
+ }
@@ -12,6 +12,18 @@
12
12
  "insertText": "interface ${1:Name} {\n\t${2:property}: ${3:type};\n}",
13
13
  "description": "Interface",
14
14
  "completeBracketPairs": true
15
+ },
16
+ {
17
+ "triggerPattern": "^\\\\s*rfc\\\\s*$",
18
+ "insertText": "type ${1:Props} = { ${2:label}: ${3:string} };\n\nexport function ${4:Component}({ ${2:label} }: ${1:Props}) {\n\treturn (\n\t\t<div className=\"${5}\">${6}</div>\n\t);\n}",
19
+ "description": "React function component (TSX)",
20
+ "completeBracketPairs": true
21
+ },
22
+ {
23
+ "triggerPattern": "^\\\\s*useState\\\\s*$",
24
+ "insertText": "const [${1:state}, set${2:State}] = useState<${3:Type}>(${4:initial});",
25
+ "description": "Typed useState hook",
26
+ "completeBracketPairs": true
15
27
  }
16
28
  ]
17
29
  }
@@ -0,0 +1,40 @@
1
+ {
2
+ "language": "css",
3
+ "linkedEditingPatterns": [
4
+ {
5
+ "pattern": "(--(([a-zA-Z_][a-zA-Z0-9_-]*)))\\s*:.*var\\(\\s*\\1\\s*(?:,[^)]*)?\\)",
6
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
7
+ "description": "Linked editing between CSS custom property definition (--name: value) and var(--name) references. Renaming one updates all occurrences."
8
+ },
9
+ {
10
+ "pattern": "@keyframes\\s+([a-zA-Z_][a-zA-Z0-9_-]*).*animation(?:-name)?\\s*:\\s*\\1",
11
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
12
+ "description": "Linked editing between @keyframes name and animation-name references. Editing the animation name in either location synchronizes both."
13
+ },
14
+ {
15
+ "pattern": "@font-face\\s*\\{[^}]*font-family\\s*:\\s*['\"]?([^'\";}]+).*font-family\\s*:[^;]*\\1",
16
+ "wordPattern": "[a-zA-Z][a-zA-Z0-9 _-]+",
17
+ "description": "Linked editing between @font-face font-family declaration and font-family usage in rules. Keeps font names in sync."
18
+ },
19
+ {
20
+ "pattern": "@layer\\s+([a-zA-Z_][a-zA-Z0-9_-]*)\\s*[{;]",
21
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
22
+ "description": "Linked editing between @layer declarations and layer references. Editing a layer name in one location updates @layer blocks and @import layer() assignments."
23
+ },
24
+ {
25
+ "pattern": "grid-template-areas\\s*:[^;]*\"[^\"]*([a-zA-Z_][a-zA-Z0-9_-]*).*grid-area\\s*:\\s*\\1",
26
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
27
+ "description": "Linked editing between grid-template-areas names and grid-area references. Renaming an area in the template updates the grid-area assignments."
28
+ },
29
+ {
30
+ "pattern": "counter-reset\\s*:\\s*([a-zA-Z_][a-zA-Z0-9_-]*).*counter\\(\\s*\\1",
31
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
32
+ "description": "Linked editing between counter-reset definition and counter()/counters() references. Keeps counter names in sync."
33
+ },
34
+ {
35
+ "pattern": "@counter-style\\s+([a-zA-Z_][a-zA-Z0-9_-]*).*list-style-type\\s*:\\s*\\1",
36
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_-]*",
37
+ "description": "Linked editing between @counter-style name and list-style-type references."
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "language": "tailwindcss",
3
+ "linkedEditingPatterns": [
4
+ {
5
+ "pattern": "@apply\\s+([\\w:-]+)",
6
+ "wordPattern": "[\\w:-]+",
7
+ "description": "Linked editing between @apply class reference and its utility class definition — renaming one updates the other."
8
+ },
9
+ {
10
+ "pattern": "@layer\\s+(base|components|utilities)",
11
+ "wordPattern": "\\w+",
12
+ "description": "Linked editing for @layer names — renaming a layer name updates all @layer and @tailwind references."
13
+ },
14
+ {
15
+ "pattern": "\\.([\\w-]+)\\s*\\{",
16
+ "wordPattern": "[\\w-]+",
17
+ "description": "Linked editing for custom class names — renaming a class selector updates all usages in class attributes."
18
+ },
19
+ {
20
+ "pattern": "@keyframes\\s+([\\w-]+)",
21
+ "wordPattern": "[\\w-]+",
22
+ "description": "Linked editing for @keyframes names — renaming updates animation-name references."
23
+ },
24
+ {
25
+ "pattern": "class\\s*=\\s*[\"'][^\"']*\\b([\\w-]+)\\b",
26
+ "wordPattern": "[\\w-]+",
27
+ "description": "Linked editing for custom class names used in HTML class attributes."
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "language": "css",
3
+ "linkPatterns": [
4
+ {
5
+ "pattern": "url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
6
+ "captureGroup": 1,
7
+ "tooltip": "Open resource: ${1} — CSS url() reference to an external file (image, font, stylesheet, or other resource)."
8
+ },
9
+ {
10
+ "pattern": "@import\\s+url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
11
+ "captureGroup": 1,
12
+ "tooltip": "Open imported stylesheet: ${1} — @import rule loading an external CSS file."
13
+ },
14
+ {
15
+ "pattern": "@import\\s+['\"]([^'\"]+)['\"]",
16
+ "captureGroup": 1,
17
+ "tooltip": "Open imported stylesheet: ${1} — @import rule using string URL syntax."
18
+ },
19
+ {
20
+ "pattern": "src:\\s*(?:url\\(['\"]?([^'\"\\)]+\\.(?:woff2?|ttf|otf|eot|svg))['\"]?\\))",
21
+ "captureGroup": 1,
22
+ "tooltip": "Open font file: ${1} — @font-face source reference to a web font file."
23
+ },
24
+ {
25
+ "pattern": "background(?:-image)?\\s*:[^;]*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
26
+ "captureGroup": 1,
27
+ "tooltip": "Open background image: ${1} — Background image resource referenced by url()."
28
+ },
29
+ {
30
+ "pattern": "list-style-image\\s*:\\s*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
31
+ "captureGroup": 1,
32
+ "tooltip": "Open list marker image: ${1} — Custom list marker image."
33
+ },
34
+ {
35
+ "pattern": "cursor\\s*:\\s*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
36
+ "captureGroup": 1,
37
+ "tooltip": "Open cursor image: ${1} — Custom cursor image resource."
38
+ },
39
+ {
40
+ "pattern": "content\\s*:\\s*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
41
+ "captureGroup": 1,
42
+ "tooltip": "Open content resource: ${1} — Replaced content image for pseudo-elements."
43
+ },
44
+ {
45
+ "pattern": "mask(?:-image)?\\s*:[^;]*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
46
+ "captureGroup": 1,
47
+ "tooltip": "Open mask image: ${1} — CSS mask image resource (SVG or image)."
48
+ },
49
+ {
50
+ "pattern": "image-set\\([^)]*url\\(['\"]?([^'\"\\)]+)['\"]?\\)",
51
+ "captureGroup": 1,
52
+ "tooltip": "Open image from image-set: ${1} — Resolution-dependent image resource."
53
+ }
54
+ ]
55
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "language": "tailwindcss",
3
+ "linkPatterns": [
4
+ {
5
+ "pattern": "@config\\s+['\"]([^'\"]+)['\"]",
6
+ "captureGroup": 1,
7
+ "tooltip": "Open Tailwind configuration file: ${1}"
8
+ },
9
+ {
10
+ "pattern": "@import\\s+['\"]([^'\"]+)['\"]",
11
+ "captureGroup": 1,
12
+ "tooltip": "Open imported CSS file: ${1}"
13
+ },
14
+ {
15
+ "pattern": "url\\(['\"]?([^)'\"]+)['\"]?\\)",
16
+ "captureGroup": 1,
17
+ "tooltip": "Open linked resource: ${1}"
18
+ },
19
+ {
20
+ "pattern": "theme\\(['\"]([^'\"]+)['\"]\\)",
21
+ "captureGroup": 1,
22
+ "tooltip": "Resolve theme value from tailwind.config.js: ${1}"
23
+ },
24
+ {
25
+ "pattern": "screen\\(['\"]([^'\"]+)['\"]\\)",
26
+ "captureGroup": 1,
27
+ "tooltip": "Resolve breakpoint from tailwind.config.js: ${1}"
28
+ },
29
+ {
30
+ "pattern": "require\\(['\"]([^'\"]+)['\"]\\)",
31
+ "captureGroup": 1,
32
+ "tooltip": "Open required module: ${1}"
33
+ },
34
+ {
35
+ "pattern": "content:\\s*\\[([^\\]]+)\\]",
36
+ "captureGroup": 1,
37
+ "tooltip": "Content paths for Tailwind class scanning"
38
+ }
39
+ ]
40
+ }