@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,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
|
+
}
|