@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
@@ -0,0 +1,1202 @@
1
+ {
2
+ "language": "shadcn",
3
+ "completions": [
4
+ {
5
+ "label": "shadcn-form-with-zod",
6
+ "kind": 28,
7
+ "detail": "Form with react-hook-form + zod validation",
8
+ "documentation": { "value": "Complete form setup with shadcn/ui Form component, react-hook-form, and zod schema validation.\n\n```tsx\nconst formSchema = z.object({\n username: z.string().min(2),\n});\n\nfunction MyForm() {\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n });\n return (\n <Form {...form}>\n <FormField control={form.control} name=\"username\" render={({ field }) => (\n <FormItem>\n <FormLabel>Username</FormLabel>\n <FormControl><Input {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n </Form>\n );\n}\n```" },
9
+ "insertText": "const ${1:formSchema} = z.object({\n\t${2:field}: z.string().min(${3:2}, { message: \"${4:Must be at least 2 characters}\" }),\n});\n\nfunction ${5:MyForm}() {\n\tconst form = useForm<z.infer<typeof ${1:formSchema}>>({\n\t\tresolver: zodResolver(${1:formSchema}),\n\t\tdefaultValues: { ${2:field}: \"\" },\n\t});\n\n\tfunction onSubmit(values: z.infer<typeof ${1:formSchema}>) {\n\t\tconsole.log(values);\n\t}\n\n\treturn (\n\t\t<Form {...form}>\n\t\t\t<form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-4\">\n\t\t\t\t<FormField\n\t\t\t\t\tcontrol={form.control}\n\t\t\t\t\tname=\"${2:field}\"\n\t\t\t\t\trender={({ field }) => (\n\t\t\t\t\t\t<FormItem>\n\t\t\t\t\t\t\t<FormLabel>${6:Label}</FormLabel>\n\t\t\t\t\t\t\t<FormControl>\n\t\t\t\t\t\t\t\t<Input placeholder=\"${7:placeholder}\" {...field} />\n\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t<FormDescription>${8:Description}</FormDescription>\n\t\t\t\t\t\t\t<FormMessage />\n\t\t\t\t\t\t</FormItem>\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t</form>\n\t\t</Form>\n\t);\n}",
10
+ "insertTextRules": 4,
11
+ "sortText": "00_form_zod"
12
+ },
13
+ {
14
+ "label": "shadcn-data-table",
15
+ "kind": 28,
16
+ "detail": "DataTable with TanStack Table setup",
17
+ "documentation": { "value": "Full DataTable component setup with column definitions and TanStack Table.\n\n```tsx\nconst columns: ColumnDef<Payment>[] = [\n { accessorKey: \"status\", header: \"Status\" },\n { accessorKey: \"amount\", header: \"Amount\" },\n];\n```" },
18
+ "insertText": "const columns: ColumnDef<${1:TData}>[] = [\n\t{\n\t\taccessorKey: \"${2:field}\",\n\t\theader: \"${3:Header}\",\n\t},\n];\n\nexport function ${4:DataTable}() {\n\tconst [data, setData] = React.useState<${1:TData}[]>([]);\n\tconst table = useReactTable({\n\t\tdata,\n\t\tcolumns,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t});\n\n\treturn (\n\t\t<Table>\n\t\t\t<TableHeader>\n\t\t\t\t{table.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<TableRow key={headerGroup.id}>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<TableHead key={header.id}>\n\t\t\t\t\t\t\t\t{flexRender(header.column.columnDef.header, header.getContext())}\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableHeader>\n\t\t\t<TableBody>\n\t\t\t\t{table.getRowModel().rows.map((row) => (\n\t\t\t\t\t<TableRow key={row.id}>\n\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t<TableCell key={cell.id}>\n\t\t\t\t\t\t\t\t{flexRender(cell.column.columnDef.cell, cell.getContext())}\n\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableBody>\n\t\t</Table>\n\t);\n}",
19
+ "insertTextRules": 4,
20
+ "sortText": "00_data_table"
21
+ },
22
+ {
23
+ "label": "shadcn-date-picker",
24
+ "kind": 28,
25
+ "detail": "Date Picker with Calendar and Popover",
26
+ "documentation": { "value": "Date picker implemented with Calendar inside a Popover.\n\n```tsx\n<Popover>\n <PopoverTrigger asChild>\n <Button variant=\"outline\">Pick a date</Button>\n </PopoverTrigger>\n <PopoverContent>\n <Calendar mode=\"single\" selected={date} onSelect={setDate} />\n </PopoverContent>\n</Popover>\n```" },
27
+ "insertText": "const [${1:date}, ${2:setDate}] = React.useState<Date>();\n\n<Popover>\n\t<PopoverTrigger asChild>\n\t\t<Button variant=\"outline\" className={cn(\"w-[280px] justify-start text-left font-normal\", !${1:date} && \"text-muted-foreground\")}>\n\t\t\t<CalendarIcon className=\"mr-2 h-4 w-4\" />\n\t\t\t{${1:date} ? format(${1:date}, \"PPP\") : <span>Pick a date</span>}\n\t\t</Button>\n\t</PopoverTrigger>\n\t<PopoverContent className=\"w-auto p-0\">\n\t\t<Calendar mode=\"single\" selected={${1:date}} onSelect={${2:setDate}} initialFocus />\n\t</PopoverContent>\n</Popover>",
28
+ "insertTextRules": 4,
29
+ "sortText": "00_date_picker"
30
+ },
31
+ {
32
+ "label": "shadcn-command-palette",
33
+ "kind": 28,
34
+ "detail": "Command palette with dialog",
35
+ "documentation": { "value": "Command palette using CommandDialog for keyboard-driven navigation.\n\n```tsx\n<CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder=\"Type a command...\" />\n <CommandList>\n <CommandGroup heading=\"Suggestions\">\n <CommandItem>Calendar</CommandItem>\n </CommandGroup>\n </CommandList>\n</CommandDialog>\n```" },
36
+ "insertText": "const [${1:open}, ${2:setOpen}] = React.useState(false);\n\nReact.useEffect(() => {\n\tconst down = (e: KeyboardEvent) => {\n\t\tif (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\t${2:setOpen}((open) => !open);\n\t\t}\n\t};\n\tdocument.addEventListener(\"keydown\", down);\n\treturn () => document.removeEventListener(\"keydown\", down);\n}, []);\n\n<CommandDialog open={${1:open}} onOpenChange={${2:setOpen}}>\n\t<CommandInput placeholder=\"Type a command or search...\" />\n\t<CommandList>\n\t\t<CommandEmpty>No results found.</CommandEmpty>\n\t\t<CommandGroup heading=\"${3:Suggestions}\">\n\t\t\t<CommandItem>${4:Item}</CommandItem>\n\t\t</CommandGroup>\n\t</CommandList>\n</CommandDialog>",
37
+ "insertTextRules": 4,
38
+ "sortText": "00_command_palette"
39
+ },
40
+ {
41
+ "label": "shadcn-toast-notification",
42
+ "kind": 28,
43
+ "detail": "Toast notification with useToast",
44
+ "documentation": { "value": "Show a toast notification using the shadcn/ui toast system.\n\n```tsx\nconst { toast } = useToast();\ntoast({ title: \"Success\", description: \"Action completed.\" });\n```" },
45
+ "insertText": "const { toast } = useToast();\n\ntoast({\n\ttitle: \"${1:Notification}\",\n\tdescription: \"${2:Your action was successful.}\",\n\tvariant: \"${3|default,destructive|}\",\n});",
46
+ "insertTextRules": 4,
47
+ "sortText": "00_toast"
48
+ },
49
+ {
50
+ "label": "shadcn-dialog-pattern",
51
+ "kind": 28,
52
+ "detail": "Dialog with header, content, and footer",
53
+ "documentation": { "value": "Full dialog pattern with trigger, content, header, description, and footer." },
54
+ "insertText": "<Dialog>\n\t<DialogTrigger asChild>\n\t\t<Button variant=\"outline\">${1:Open Dialog}</Button>\n\t</DialogTrigger>\n\t<DialogContent className=\"sm:max-w-[425px]\">\n\t\t<DialogHeader>\n\t\t\t<DialogTitle>${2:Title}</DialogTitle>\n\t\t\t<DialogDescription>${3:Description}</DialogDescription>\n\t\t</DialogHeader>\n\t\t<div className=\"grid gap-4 py-4\">\n\t\t\t${4:content}\n\t\t</div>\n\t\t<DialogFooter>\n\t\t\t<Button type=\"submit\">${5:Save changes}</Button>\n\t\t</DialogFooter>\n\t</DialogContent>\n</Dialog>",
55
+ "insertTextRules": 4,
56
+ "sortText": "00_dialog_pattern"
57
+ },
58
+ {
59
+ "label": "shadcn-sheet-pattern",
60
+ "kind": 28,
61
+ "detail": "Sheet with side panel content",
62
+ "documentation": { "value": "Sheet side panel with trigger, header, content, and footer." },
63
+ "insertText": "<Sheet>\n\t<SheetTrigger asChild>\n\t\t<Button variant=\"outline\">${1:Open Sheet}</Button>\n\t</SheetTrigger>\n\t<SheetContent side=\"${2|right,left,top,bottom|}\">\n\t\t<SheetHeader>\n\t\t\t<SheetTitle>${3:Title}</SheetTitle>\n\t\t\t<SheetDescription>${4:Description}</SheetDescription>\n\t\t</SheetHeader>\n\t\t<div className=\"py-4\">\n\t\t\t${5:content}\n\t\t</div>\n\t\t<SheetFooter>\n\t\t\t<Button>${6:Save}</Button>\n\t\t</SheetFooter>\n\t</SheetContent>\n</Sheet>",
64
+ "insertTextRules": 4,
65
+ "sortText": "00_sheet_pattern"
66
+ },
67
+ {
68
+ "label": "shadcn-dropdown-pattern",
69
+ "kind": 28,
70
+ "detail": "Dropdown menu with items",
71
+ "documentation": { "value": "DropdownMenu with trigger, content, labels, items, and separators." },
72
+ "insertText": "<DropdownMenu>\n\t<DropdownMenuTrigger asChild>\n\t\t<Button variant=\"outline\">${1:Open}</Button>\n\t</DropdownMenuTrigger>\n\t<DropdownMenuContent className=\"w-56\">\n\t\t<DropdownMenuLabel>${2:My Account}</DropdownMenuLabel>\n\t\t<DropdownMenuSeparator />\n\t\t<DropdownMenuItem>${3:Profile}</DropdownMenuItem>\n\t\t<DropdownMenuItem>${4:Settings}</DropdownMenuItem>\n\t\t<DropdownMenuSeparator />\n\t\t<DropdownMenuItem>${5:Log out}</DropdownMenuItem>\n\t</DropdownMenuContent>\n</DropdownMenu>",
73
+ "insertTextRules": 4,
74
+ "sortText": "00_dropdown_pattern"
75
+ },
76
+ {
77
+ "label": "shadcn-alert-dialog-pattern",
78
+ "kind": 28,
79
+ "detail": "Alert dialog for confirmations",
80
+ "documentation": { "value": "AlertDialog for destructive or confirmation actions." },
81
+ "insertText": "<AlertDialog>\n\t<AlertDialogTrigger asChild>\n\t\t<Button variant=\"destructive\">${1:Delete}</Button>\n\t</AlertDialogTrigger>\n\t<AlertDialogContent>\n\t\t<AlertDialogHeader>\n\t\t\t<AlertDialogTitle>${2:Are you sure?}</AlertDialogTitle>\n\t\t\t<AlertDialogDescription>${3:This action cannot be undone.}</AlertDialogDescription>\n\t\t</AlertDialogHeader>\n\t\t<AlertDialogFooter>\n\t\t\t<AlertDialogCancel>Cancel</AlertDialogCancel>\n\t\t\t<AlertDialogAction>${4:Continue}</AlertDialogAction>\n\t\t</AlertDialogFooter>\n\t</AlertDialogContent>\n</AlertDialog>",
82
+ "insertTextRules": 4,
83
+ "sortText": "00_alert_dialog_pattern"
84
+ },
85
+ {
86
+ "label": "shadcn-tabs-pattern",
87
+ "kind": 28,
88
+ "detail": "Tabs with tab list and content panels",
89
+ "documentation": { "value": "Tabs component with TabsList, TabsTrigger, and TabsContent." },
90
+ "insertText": "<Tabs defaultValue=\"${1:tab1}\" className=\"w-[400px]\">\n\t<TabsList>\n\t\t<TabsTrigger value=\"${1:tab1}\">${2:Tab 1}</TabsTrigger>\n\t\t<TabsTrigger value=\"${3:tab2}\">${4:Tab 2}</TabsTrigger>\n\t</TabsList>\n\t<TabsContent value=\"${1:tab1}\">${5:Content 1}</TabsContent>\n\t<TabsContent value=\"${3:tab2}\">${6:Content 2}</TabsContent>\n</Tabs>",
91
+ "insertTextRules": 4,
92
+ "sortText": "00_tabs_pattern"
93
+ },
94
+ {
95
+ "label": "import Accordion",
96
+ "kind": 8,
97
+ "detail": "Import Accordion components from shadcn/ui",
98
+ "documentation": { "value": "Import Accordion, AccordionItem, AccordionTrigger, and AccordionContent from `@/components/ui/accordion`." },
99
+ "insertText": "import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from \"@/components/ui/accordion\";",
100
+ "insertTextRules": 4,
101
+ "sortText": "01_import_accordion"
102
+ },
103
+ {
104
+ "label": "import Alert",
105
+ "kind": 8,
106
+ "detail": "Import Alert components from shadcn/ui",
107
+ "documentation": { "value": "Import Alert, AlertTitle, and AlertDescription from `@/components/ui/alert`." },
108
+ "insertText": "import { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";",
109
+ "insertTextRules": 4,
110
+ "sortText": "01_import_alert"
111
+ },
112
+ {
113
+ "label": "import AlertDialog",
114
+ "kind": 8,
115
+ "detail": "Import AlertDialog components from shadcn/ui",
116
+ "documentation": { "value": "Import AlertDialog components from `@/components/ui/alert-dialog`." },
117
+ "insertText": "import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from \"@/components/ui/alert-dialog\";",
118
+ "insertTextRules": 4,
119
+ "sortText": "01_import_alertdialog"
120
+ },
121
+ {
122
+ "label": "import AspectRatio",
123
+ "kind": 8,
124
+ "detail": "Import AspectRatio from shadcn/ui",
125
+ "documentation": { "value": "Import AspectRatio from `@/components/ui/aspect-ratio`." },
126
+ "insertText": "import { AspectRatio } from \"@/components/ui/aspect-ratio\";",
127
+ "insertTextRules": 4,
128
+ "sortText": "01_import_aspectratio"
129
+ },
130
+ {
131
+ "label": "import Avatar",
132
+ "kind": 8,
133
+ "detail": "Import Avatar components from shadcn/ui",
134
+ "documentation": { "value": "Import Avatar, AvatarImage, and AvatarFallback from `@/components/ui/avatar`." },
135
+ "insertText": "import { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";",
136
+ "insertTextRules": 4,
137
+ "sortText": "01_import_avatar"
138
+ },
139
+ {
140
+ "label": "import Badge",
141
+ "kind": 8,
142
+ "detail": "Import Badge from shadcn/ui",
143
+ "documentation": { "value": "Import Badge and badgeVariants from `@/components/ui/badge`." },
144
+ "insertText": "import { Badge, badgeVariants } from \"@/components/ui/badge\";",
145
+ "insertTextRules": 4,
146
+ "sortText": "01_import_badge"
147
+ },
148
+ {
149
+ "label": "import Button",
150
+ "kind": 8,
151
+ "detail": "Import Button from shadcn/ui",
152
+ "documentation": { "value": "Import Button and buttonVariants from `@/components/ui/button`." },
153
+ "insertText": "import { Button, buttonVariants } from \"@/components/ui/button\";",
154
+ "insertTextRules": 4,
155
+ "sortText": "01_import_button"
156
+ },
157
+ {
158
+ "label": "import Calendar",
159
+ "kind": 8,
160
+ "detail": "Import Calendar from shadcn/ui",
161
+ "documentation": { "value": "Import Calendar from `@/components/ui/calendar`." },
162
+ "insertText": "import { Calendar } from \"@/components/ui/calendar\";",
163
+ "insertTextRules": 4,
164
+ "sortText": "01_import_calendar"
165
+ },
166
+ {
167
+ "label": "import Card",
168
+ "kind": 8,
169
+ "detail": "Import Card components from shadcn/ui",
170
+ "documentation": { "value": "Import Card, CardHeader, CardTitle, CardDescription, CardContent, and CardFooter from `@/components/ui/card`." },
171
+ "insertText": "import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\";",
172
+ "insertTextRules": 4,
173
+ "sortText": "01_import_card"
174
+ },
175
+ {
176
+ "label": "import Carousel",
177
+ "kind": 8,
178
+ "detail": "Import Carousel components from shadcn/ui",
179
+ "documentation": { "value": "Import Carousel, CarouselContent, CarouselItem, CarouselNext, and CarouselPrevious from `@/components/ui/carousel`." },
180
+ "insertText": "import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from \"@/components/ui/carousel\";",
181
+ "insertTextRules": 4,
182
+ "sortText": "01_import_carousel"
183
+ },
184
+ {
185
+ "label": "import Checkbox",
186
+ "kind": 8,
187
+ "detail": "Import Checkbox from shadcn/ui",
188
+ "documentation": { "value": "Import Checkbox from `@/components/ui/checkbox`." },
189
+ "insertText": "import { Checkbox } from \"@/components/ui/checkbox\";",
190
+ "insertTextRules": 4,
191
+ "sortText": "01_import_checkbox"
192
+ },
193
+ {
194
+ "label": "import Collapsible",
195
+ "kind": 8,
196
+ "detail": "Import Collapsible components from shadcn/ui",
197
+ "documentation": { "value": "Import Collapsible, CollapsibleContent, and CollapsibleTrigger from `@/components/ui/collapsible`." },
198
+ "insertText": "import { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@/components/ui/collapsible\";",
199
+ "insertTextRules": 4,
200
+ "sortText": "01_import_collapsible"
201
+ },
202
+ {
203
+ "label": "import Command",
204
+ "kind": 8,
205
+ "detail": "Import Command components from shadcn/ui",
206
+ "documentation": { "value": "Import Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator from `@/components/ui/command`." },
207
+ "insertText": "import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from \"@/components/ui/command\";",
208
+ "insertTextRules": 4,
209
+ "sortText": "01_import_command"
210
+ },
211
+ {
212
+ "label": "import ContextMenu",
213
+ "kind": 8,
214
+ "detail": "Import ContextMenu components from shadcn/ui",
215
+ "documentation": { "value": "Import ContextMenu, ContextMenuContent, ContextMenuItem, and ContextMenuTrigger from `@/components/ui/context-menu`." },
216
+ "insertText": "import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuTrigger } from \"@/components/ui/context-menu\";",
217
+ "insertTextRules": 4,
218
+ "sortText": "01_import_contextmenu"
219
+ },
220
+ {
221
+ "label": "import Dialog",
222
+ "kind": 8,
223
+ "detail": "Import Dialog components from shadcn/ui",
224
+ "documentation": { "value": "Import Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger from `@/components/ui/dialog`." },
225
+ "insertText": "import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from \"@/components/ui/dialog\";",
226
+ "insertTextRules": 4,
227
+ "sortText": "01_import_dialog"
228
+ },
229
+ {
230
+ "label": "import Drawer",
231
+ "kind": 8,
232
+ "detail": "Import Drawer components from shadcn/ui",
233
+ "documentation": { "value": "Import Drawer components from `@/components/ui/drawer`." },
234
+ "insertText": "import { Drawer, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger } from \"@/components/ui/drawer\";",
235
+ "insertTextRules": 4,
236
+ "sortText": "01_import_drawer"
237
+ },
238
+ {
239
+ "label": "import DropdownMenu",
240
+ "kind": 8,
241
+ "detail": "Import DropdownMenu components from shadcn/ui",
242
+ "documentation": { "value": "Import DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger from `@/components/ui/dropdown-menu`." },
243
+ "insertText": "import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from \"@/components/ui/dropdown-menu\";",
244
+ "insertTextRules": 4,
245
+ "sortText": "01_import_dropdownmenu"
246
+ },
247
+ {
248
+ "label": "import Form",
249
+ "kind": 8,
250
+ "detail": "Import Form components from shadcn/ui",
251
+ "documentation": { "value": "Import Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage from `@/components/ui/form`." },
252
+ "insertText": "import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";",
253
+ "insertTextRules": 4,
254
+ "sortText": "01_import_form"
255
+ },
256
+ {
257
+ "label": "import HoverCard",
258
+ "kind": 8,
259
+ "detail": "Import HoverCard components from shadcn/ui",
260
+ "documentation": { "value": "Import HoverCard, HoverCardContent, and HoverCardTrigger from `@/components/ui/hover-card`." },
261
+ "insertText": "import { HoverCard, HoverCardContent, HoverCardTrigger } from \"@/components/ui/hover-card\";",
262
+ "insertTextRules": 4,
263
+ "sortText": "01_import_hovercard"
264
+ },
265
+ {
266
+ "label": "import Input",
267
+ "kind": 8,
268
+ "detail": "Import Input from shadcn/ui",
269
+ "documentation": { "value": "Import Input from `@/components/ui/input`." },
270
+ "insertText": "import { Input } from \"@/components/ui/input\";",
271
+ "insertTextRules": 4,
272
+ "sortText": "01_import_input"
273
+ },
274
+ {
275
+ "label": "import Label",
276
+ "kind": 8,
277
+ "detail": "Import Label from shadcn/ui",
278
+ "documentation": { "value": "Import Label from `@/components/ui/label`." },
279
+ "insertText": "import { Label } from \"@/components/ui/label\";",
280
+ "insertTextRules": 4,
281
+ "sortText": "01_import_label"
282
+ },
283
+ {
284
+ "label": "import Menubar",
285
+ "kind": 8,
286
+ "detail": "Import Menubar from shadcn/ui",
287
+ "documentation": { "value": "Import Menubar from `@/components/ui/menubar`." },
288
+ "insertText": "import { Menubar, MenubarContent, MenubarItem, MenubarMenu, MenubarSeparator, MenubarTrigger } from \"@/components/ui/menubar\";",
289
+ "insertTextRules": 4,
290
+ "sortText": "01_import_menubar"
291
+ },
292
+ {
293
+ "label": "import NavigationMenu",
294
+ "kind": 8,
295
+ "detail": "Import NavigationMenu from shadcn/ui",
296
+ "documentation": { "value": "Import NavigationMenu components from `@/components/ui/navigation-menu`." },
297
+ "insertText": "import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger } from \"@/components/ui/navigation-menu\";",
298
+ "insertTextRules": 4,
299
+ "sortText": "01_import_navigationmenu"
300
+ },
301
+ {
302
+ "label": "import Pagination",
303
+ "kind": 8,
304
+ "detail": "Import Pagination from shadcn/ui",
305
+ "documentation": { "value": "Import Pagination components from `@/components/ui/pagination`." },
306
+ "insertText": "import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from \"@/components/ui/pagination\";",
307
+ "insertTextRules": 4,
308
+ "sortText": "01_import_pagination"
309
+ },
310
+ {
311
+ "label": "import Popover",
312
+ "kind": 8,
313
+ "detail": "Import Popover components from shadcn/ui",
314
+ "documentation": { "value": "Import Popover, PopoverContent, and PopoverTrigger from `@/components/ui/popover`." },
315
+ "insertText": "import { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";",
316
+ "insertTextRules": 4,
317
+ "sortText": "01_import_popover"
318
+ },
319
+ {
320
+ "label": "import Progress",
321
+ "kind": 8,
322
+ "detail": "Import Progress from shadcn/ui",
323
+ "documentation": { "value": "Import Progress from `@/components/ui/progress`." },
324
+ "insertText": "import { Progress } from \"@/components/ui/progress\";",
325
+ "insertTextRules": 4,
326
+ "sortText": "01_import_progress"
327
+ },
328
+ {
329
+ "label": "import RadioGroup",
330
+ "kind": 8,
331
+ "detail": "Import RadioGroup from shadcn/ui",
332
+ "documentation": { "value": "Import RadioGroup and RadioGroupItem from `@/components/ui/radio-group`." },
333
+ "insertText": "import { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";",
334
+ "insertTextRules": 4,
335
+ "sortText": "01_import_radiogroup"
336
+ },
337
+ {
338
+ "label": "import ScrollArea",
339
+ "kind": 8,
340
+ "detail": "Import ScrollArea from shadcn/ui",
341
+ "documentation": { "value": "Import ScrollArea from `@/components/ui/scroll-area`." },
342
+ "insertText": "import { ScrollArea } from \"@/components/ui/scroll-area\";",
343
+ "insertTextRules": 4,
344
+ "sortText": "01_import_scrollarea"
345
+ },
346
+ {
347
+ "label": "import Select",
348
+ "kind": 8,
349
+ "detail": "Import Select components from shadcn/ui",
350
+ "documentation": { "value": "Import Select, SelectContent, SelectItem, SelectTrigger, and SelectValue from `@/components/ui/select`." },
351
+ "insertText": "import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";",
352
+ "insertTextRules": 4,
353
+ "sortText": "01_import_select"
354
+ },
355
+ {
356
+ "label": "import Separator",
357
+ "kind": 8,
358
+ "detail": "Import Separator from shadcn/ui",
359
+ "documentation": { "value": "Import Separator from `@/components/ui/separator`." },
360
+ "insertText": "import { Separator } from \"@/components/ui/separator\";",
361
+ "insertTextRules": 4,
362
+ "sortText": "01_import_separator"
363
+ },
364
+ {
365
+ "label": "import Sheet",
366
+ "kind": 8,
367
+ "detail": "Import Sheet components from shadcn/ui",
368
+ "documentation": { "value": "Import Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger from `@/components/ui/sheet`." },
369
+ "insertText": "import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from \"@/components/ui/sheet\";",
370
+ "insertTextRules": 4,
371
+ "sortText": "01_import_sheet"
372
+ },
373
+ {
374
+ "label": "import Skeleton",
375
+ "kind": 8,
376
+ "detail": "Import Skeleton from shadcn/ui",
377
+ "documentation": { "value": "Import Skeleton from `@/components/ui/skeleton`." },
378
+ "insertText": "import { Skeleton } from \"@/components/ui/skeleton\";",
379
+ "insertTextRules": 4,
380
+ "sortText": "01_import_skeleton"
381
+ },
382
+ {
383
+ "label": "import Slider",
384
+ "kind": 8,
385
+ "detail": "Import Slider from shadcn/ui",
386
+ "documentation": { "value": "Import Slider from `@/components/ui/slider`." },
387
+ "insertText": "import { Slider } from \"@/components/ui/slider\";",
388
+ "insertTextRules": 4,
389
+ "sortText": "01_import_slider"
390
+ },
391
+ {
392
+ "label": "import Switch",
393
+ "kind": 8,
394
+ "detail": "Import Switch from shadcn/ui",
395
+ "documentation": { "value": "Import Switch from `@/components/ui/switch`." },
396
+ "insertText": "import { Switch } from \"@/components/ui/switch\";",
397
+ "insertTextRules": 4,
398
+ "sortText": "01_import_switch"
399
+ },
400
+ {
401
+ "label": "import Table",
402
+ "kind": 8,
403
+ "detail": "Import Table components from shadcn/ui",
404
+ "documentation": { "value": "Import Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow from `@/components/ui/table`." },
405
+ "insertText": "import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from \"@/components/ui/table\";",
406
+ "insertTextRules": 4,
407
+ "sortText": "01_import_table"
408
+ },
409
+ {
410
+ "label": "import Tabs",
411
+ "kind": 8,
412
+ "detail": "Import Tabs components from shadcn/ui",
413
+ "documentation": { "value": "Import Tabs, TabsContent, TabsList, and TabsTrigger from `@/components/ui/tabs`." },
414
+ "insertText": "import { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";",
415
+ "insertTextRules": 4,
416
+ "sortText": "01_import_tabs"
417
+ },
418
+ {
419
+ "label": "import Textarea",
420
+ "kind": 8,
421
+ "detail": "Import Textarea from shadcn/ui",
422
+ "documentation": { "value": "Import Textarea from `@/components/ui/textarea`." },
423
+ "insertText": "import { Textarea } from \"@/components/ui/textarea\";",
424
+ "insertTextRules": 4,
425
+ "sortText": "01_import_textarea"
426
+ },
427
+ {
428
+ "label": "import Toast",
429
+ "kind": 8,
430
+ "detail": "Import Toast and Toaster from shadcn/ui",
431
+ "documentation": { "value": "Import Toast, Toaster, and useToast from `@/components/ui/toast` and `@/components/ui/use-toast`." },
432
+ "insertText": "import { Toaster } from \"@/components/ui/toaster\";\nimport { useToast } from \"@/components/ui/use-toast\";",
433
+ "insertTextRules": 4,
434
+ "sortText": "01_import_toast"
435
+ },
436
+ {
437
+ "label": "import Toggle",
438
+ "kind": 8,
439
+ "detail": "Import Toggle from shadcn/ui",
440
+ "documentation": { "value": "Import Toggle from `@/components/ui/toggle`." },
441
+ "insertText": "import { Toggle } from \"@/components/ui/toggle\";",
442
+ "insertTextRules": 4,
443
+ "sortText": "01_import_toggle"
444
+ },
445
+ {
446
+ "label": "import ToggleGroup",
447
+ "kind": 8,
448
+ "detail": "Import ToggleGroup from shadcn/ui",
449
+ "documentation": { "value": "Import ToggleGroup and ToggleGroupItem from `@/components/ui/toggle-group`." },
450
+ "insertText": "import { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";",
451
+ "insertTextRules": 4,
452
+ "sortText": "01_import_togglegroup"
453
+ },
454
+ {
455
+ "label": "import Tooltip",
456
+ "kind": 8,
457
+ "detail": "Import Tooltip components from shadcn/ui",
458
+ "documentation": { "value": "Import Tooltip, TooltipContent, TooltipProvider, and TooltipTrigger from `@/components/ui/tooltip`." },
459
+ "insertText": "import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";",
460
+ "insertTextRules": 4,
461
+ "sortText": "01_import_tooltip"
462
+ },
463
+ {
464
+ "label": "Accordion",
465
+ "kind": 5,
466
+ "detail": "shadcn/ui Accordion component",
467
+ "documentation": { "value": "A vertically stacked set of interactive headings that reveal content. Built on Radix UI Accordion primitive.\n\n```tsx\n<Accordion type=\"single\" collapsible>\n <AccordionItem value=\"item-1\">\n <AccordionTrigger>Is it accessible?</AccordionTrigger>\n <AccordionContent>Yes.</AccordionContent>\n </AccordionItem>\n</Accordion>\n```" },
468
+ "insertText": "<Accordion type=\"${1|single,multiple|}\" ${2:collapsible}>\n\t<AccordionItem value=\"${3:item-1}\">\n\t\t<AccordionTrigger>${4:Title}</AccordionTrigger>\n\t\t<AccordionContent>${5:Content}</AccordionContent>\n\t</AccordionItem>\n</Accordion>",
469
+ "insertTextRules": 4,
470
+ "sortText": "02_accordion"
471
+ },
472
+ {
473
+ "label": "AccordionItem",
474
+ "kind": 5,
475
+ "detail": "shadcn/ui AccordionItem",
476
+ "documentation": { "value": "Individual item within an Accordion. Requires a unique `value` prop." },
477
+ "insertText": "<AccordionItem value=\"${1:item}\">\n\t<AccordionTrigger>${2:Title}</AccordionTrigger>\n\t<AccordionContent>${3:Content}</AccordionContent>\n</AccordionItem>",
478
+ "insertTextRules": 4,
479
+ "sortText": "02_accordionitem"
480
+ },
481
+ {
482
+ "label": "AccordionTrigger",
483
+ "kind": 5,
484
+ "detail": "shadcn/ui AccordionTrigger",
485
+ "documentation": { "value": "The clickable heading that toggles an AccordionItem open/closed." },
486
+ "insertText": "<AccordionTrigger>${1:Title}</AccordionTrigger>",
487
+ "insertTextRules": 4,
488
+ "sortText": "02_accordiontrigger"
489
+ },
490
+ {
491
+ "label": "AccordionContent",
492
+ "kind": 5,
493
+ "detail": "shadcn/ui AccordionContent",
494
+ "documentation": { "value": "The collapsible content area of an AccordionItem." },
495
+ "insertText": "<AccordionContent>${1:Content}</AccordionContent>",
496
+ "insertTextRules": 4,
497
+ "sortText": "02_accordioncontent"
498
+ },
499
+ {
500
+ "label": "Alert",
501
+ "kind": 5,
502
+ "detail": "shadcn/ui Alert component",
503
+ "documentation": { "value": "Displays a callout for important information.\n\n```tsx\n<Alert>\n <AlertTitle>Heads up!</AlertTitle>\n <AlertDescription>Description here.</AlertDescription>\n</Alert>\n```" },
504
+ "insertText": "<Alert variant=\"${1|default,destructive|}\">\n\t<AlertTitle>${2:Title}</AlertTitle>\n\t<AlertDescription>${3:Description}</AlertDescription>\n</Alert>",
505
+ "insertTextRules": 4,
506
+ "sortText": "02_alert"
507
+ },
508
+ {
509
+ "label": "AlertTitle",
510
+ "kind": 5,
511
+ "detail": "shadcn/ui AlertTitle",
512
+ "documentation": { "value": "Title element within an Alert component." },
513
+ "insertText": "<AlertTitle>${1:Title}</AlertTitle>",
514
+ "insertTextRules": 4,
515
+ "sortText": "02_alerttitle"
516
+ },
517
+ {
518
+ "label": "AlertDescription",
519
+ "kind": 5,
520
+ "detail": "shadcn/ui AlertDescription",
521
+ "documentation": { "value": "Description element within an Alert component." },
522
+ "insertText": "<AlertDescription>${1:Description}</AlertDescription>",
523
+ "insertTextRules": 4,
524
+ "sortText": "02_alertdescription"
525
+ },
526
+ {
527
+ "label": "AlertDialog",
528
+ "kind": 5,
529
+ "detail": "shadcn/ui AlertDialog component",
530
+ "documentation": { "value": "A modal dialog that interrupts the user for important confirmations. Built on Radix UI AlertDialog." },
531
+ "insertText": "<AlertDialog>\n\t<AlertDialogTrigger>${1:Open}</AlertDialogTrigger>\n\t<AlertDialogContent>\n\t\t<AlertDialogHeader>\n\t\t\t<AlertDialogTitle>${2:Title}</AlertDialogTitle>\n\t\t\t<AlertDialogDescription>${3:Description}</AlertDialogDescription>\n\t\t</AlertDialogHeader>\n\t\t<AlertDialogFooter>\n\t\t\t<AlertDialogCancel>Cancel</AlertDialogCancel>\n\t\t\t<AlertDialogAction>${4:Continue}</AlertDialogAction>\n\t\t</AlertDialogFooter>\n\t</AlertDialogContent>\n</AlertDialog>",
532
+ "insertTextRules": 4,
533
+ "sortText": "02_alertdialog"
534
+ },
535
+ {
536
+ "label": "AspectRatio",
537
+ "kind": 5,
538
+ "detail": "shadcn/ui AspectRatio component",
539
+ "documentation": { "value": "Displays content within a desired ratio. Built on Radix UI AspectRatio.\n\n```tsx\n<AspectRatio ratio={16 / 9}>\n <img src=\"...\" alt=\"...\" />\n</AspectRatio>\n```" },
540
+ "insertText": "<AspectRatio ratio={${1:16 / 9}}>\n\t${2:content}\n</AspectRatio>",
541
+ "insertTextRules": 4,
542
+ "sortText": "02_aspectratio"
543
+ },
544
+ {
545
+ "label": "Avatar",
546
+ "kind": 5,
547
+ "detail": "shadcn/ui Avatar component",
548
+ "documentation": { "value": "An image element with a fallback for representing the user. Built on Radix UI Avatar.\n\n```tsx\n<Avatar>\n <AvatarImage src=\"https://example.com/avatar.png\" />\n <AvatarFallback>CN</AvatarFallback>\n</Avatar>\n```" },
549
+ "insertText": "<Avatar>\n\t<AvatarImage src=\"${1:url}\" alt=\"${2:alt}\" />\n\t<AvatarFallback>${3:FB}</AvatarFallback>\n</Avatar>",
550
+ "insertTextRules": 4,
551
+ "sortText": "02_avatar"
552
+ },
553
+ {
554
+ "label": "Badge",
555
+ "kind": 5,
556
+ "detail": "shadcn/ui Badge component",
557
+ "documentation": { "value": "Displays a badge or label. Supports variants: default, secondary, outline, destructive." },
558
+ "insertText": "<Badge variant=\"${1|default,secondary,outline,destructive|}\">${2:Badge}</Badge>",
559
+ "insertTextRules": 4,
560
+ "sortText": "02_badge"
561
+ },
562
+ {
563
+ "label": "Button",
564
+ "kind": 5,
565
+ "detail": "shadcn/ui Button component",
566
+ "documentation": { "value": "A button component with multiple variants and sizes.\n\n```tsx\n<Button variant=\"default\" size=\"default\">Click me</Button>\n<Button variant=\"destructive\">Delete</Button>\n<Button variant=\"outline\" size=\"sm\">Small</Button>\n<Button variant=\"ghost\" size=\"icon\"><Icon /></Button>\n```" },
567
+ "insertText": "<Button variant=\"${1|default,destructive,outline,secondary,ghost,link|}\" size=\"${2|default,sm,lg,icon|}\">${3:Click me}</Button>",
568
+ "insertTextRules": 4,
569
+ "sortText": "02_button"
570
+ },
571
+ {
572
+ "label": "Calendar",
573
+ "kind": 5,
574
+ "detail": "shadcn/ui Calendar component",
575
+ "documentation": { "value": "A date picker calendar component. Built on react-day-picker.\n\n```tsx\n<Calendar mode=\"single\" selected={date} onSelect={setDate} />\n```" },
576
+ "insertText": "<Calendar\n\tmode=\"${1|single,multiple,range|}\"\n\tselected={${2:date}}\n\tonSelect={${3:setDate}}\n\tclassName=\"rounded-md border\"\n/>",
577
+ "insertTextRules": 4,
578
+ "sortText": "02_calendar"
579
+ },
580
+ {
581
+ "label": "Card",
582
+ "kind": 5,
583
+ "detail": "shadcn/ui Card component",
584
+ "documentation": { "value": "A card container with header, content, and footer sections.\n\n```tsx\n<Card>\n <CardHeader>\n <CardTitle>Title</CardTitle>\n <CardDescription>Description</CardDescription>\n </CardHeader>\n <CardContent>Content</CardContent>\n <CardFooter>Footer</CardFooter>\n</Card>\n```" },
585
+ "insertText": "<Card>\n\t<CardHeader>\n\t\t<CardTitle>${1:Title}</CardTitle>\n\t\t<CardDescription>${2:Description}</CardDescription>\n\t</CardHeader>\n\t<CardContent>\n\t\t${3:Content}\n\t</CardContent>\n\t<CardFooter>\n\t\t${4:Footer}\n\t</CardFooter>\n</Card>",
586
+ "insertTextRules": 4,
587
+ "sortText": "02_card"
588
+ },
589
+ {
590
+ "label": "Carousel",
591
+ "kind": 5,
592
+ "detail": "shadcn/ui Carousel component",
593
+ "documentation": { "value": "A carousel with motion and swipe built using Embla Carousel." },
594
+ "insertText": "<Carousel>\n\t<CarouselContent>\n\t\t<CarouselItem>${1:Slide 1}</CarouselItem>\n\t\t<CarouselItem>${2:Slide 2}</CarouselItem>\n\t</CarouselContent>\n\t<CarouselPrevious />\n\t<CarouselNext />\n</Carousel>",
595
+ "insertTextRules": 4,
596
+ "sortText": "02_carousel"
597
+ },
598
+ {
599
+ "label": "Checkbox",
600
+ "kind": 5,
601
+ "detail": "shadcn/ui Checkbox component",
602
+ "documentation": { "value": "A control that allows the user to toggle between checked and not checked. Built on Radix UI Checkbox." },
603
+ "insertText": "<Checkbox id=\"${1:terms}\" checked={${2:checked}} onCheckedChange={${3:setChecked}} />",
604
+ "insertTextRules": 4,
605
+ "sortText": "02_checkbox"
606
+ },
607
+ {
608
+ "label": "Collapsible",
609
+ "kind": 5,
610
+ "detail": "shadcn/ui Collapsible component",
611
+ "documentation": { "value": "An interactive component that expands/collapses content. Built on Radix UI Collapsible." },
612
+ "insertText": "<Collapsible>\n\t<CollapsibleTrigger>${1:Toggle}</CollapsibleTrigger>\n\t<CollapsibleContent>${2:Content}</CollapsibleContent>\n</Collapsible>",
613
+ "insertTextRules": 4,
614
+ "sortText": "02_collapsible"
615
+ },
616
+ {
617
+ "label": "Command",
618
+ "kind": 5,
619
+ "detail": "shadcn/ui Command component",
620
+ "documentation": { "value": "Fast, composable command menu. Built on cmdk." },
621
+ "insertText": "<Command>\n\t<CommandInput placeholder=\"${1:Type a command...}\" />\n\t<CommandList>\n\t\t<CommandEmpty>No results found.</CommandEmpty>\n\t\t<CommandGroup heading=\"${2:Group}\">\n\t\t\t<CommandItem>${3:Item}</CommandItem>\n\t\t</CommandGroup>\n\t</CommandList>\n</Command>",
622
+ "insertTextRules": 4,
623
+ "sortText": "02_command"
624
+ },
625
+ {
626
+ "label": "ContextMenu",
627
+ "kind": 5,
628
+ "detail": "shadcn/ui ContextMenu component",
629
+ "documentation": { "value": "Displays a menu at the pointer's position upon right-click. Built on Radix UI ContextMenu." },
630
+ "insertText": "<ContextMenu>\n\t<ContextMenuTrigger>${1:Right click here}</ContextMenuTrigger>\n\t<ContextMenuContent>\n\t\t<ContextMenuItem>${2:Item}</ContextMenuItem>\n\t</ContextMenuContent>\n</ContextMenu>",
631
+ "insertTextRules": 4,
632
+ "sortText": "02_contextmenu"
633
+ },
634
+ {
635
+ "label": "Dialog",
636
+ "kind": 5,
637
+ "detail": "shadcn/ui Dialog component",
638
+ "documentation": { "value": "A window overlaid on the primary window. Built on Radix UI Dialog." },
639
+ "insertText": "<Dialog>\n\t<DialogTrigger>${1:Open}</DialogTrigger>\n\t<DialogContent>\n\t\t<DialogHeader>\n\t\t\t<DialogTitle>${2:Title}</DialogTitle>\n\t\t\t<DialogDescription>${3:Description}</DialogDescription>\n\t\t</DialogHeader>\n\t\t${4:content}\n\t</DialogContent>\n</Dialog>",
640
+ "insertTextRules": 4,
641
+ "sortText": "02_dialog"
642
+ },
643
+ {
644
+ "label": "Drawer",
645
+ "kind": 5,
646
+ "detail": "shadcn/ui Drawer component",
647
+ "documentation": { "value": "A drawer component for mobile interfaces. Built on vaul." },
648
+ "insertText": "<Drawer>\n\t<DrawerTrigger>${1:Open}</DrawerTrigger>\n\t<DrawerContent>\n\t\t<DrawerHeader>\n\t\t\t<DrawerTitle>${2:Title}</DrawerTitle>\n\t\t\t<DrawerDescription>${3:Description}</DrawerDescription>\n\t\t</DrawerHeader>\n\t\t${4:content}\n\t\t<DrawerFooter>\n\t\t\t<Button>${5:Submit}</Button>\n\t\t</DrawerFooter>\n\t</DrawerContent>\n</Drawer>",
649
+ "insertTextRules": 4,
650
+ "sortText": "02_drawer"
651
+ },
652
+ {
653
+ "label": "DropdownMenu",
654
+ "kind": 5,
655
+ "detail": "shadcn/ui DropdownMenu component",
656
+ "documentation": { "value": "Displays a menu to the user triggered by a button. Built on Radix UI DropdownMenu." },
657
+ "insertText": "<DropdownMenu>\n\t<DropdownMenuTrigger>${1:Open}</DropdownMenuTrigger>\n\t<DropdownMenuContent>\n\t\t<DropdownMenuLabel>${2:Label}</DropdownMenuLabel>\n\t\t<DropdownMenuSeparator />\n\t\t<DropdownMenuItem>${3:Item}</DropdownMenuItem>\n\t</DropdownMenuContent>\n</DropdownMenu>",
658
+ "insertTextRules": 4,
659
+ "sortText": "02_dropdownmenu"
660
+ },
661
+ {
662
+ "label": "Form",
663
+ "kind": 5,
664
+ "detail": "shadcn/ui Form component",
665
+ "documentation": { "value": "Form component built on react-hook-form with accessible form fields, labels, and validation messages." },
666
+ "insertText": "<Form {...${1:form}}>\n\t<form onSubmit={${1:form}.handleSubmit(${2:onSubmit})} className=\"space-y-4\">\n\t\t${3:fields}\n\t\t<Button type=\"submit\">Submit</Button>\n\t</form>\n</Form>",
667
+ "insertTextRules": 4,
668
+ "sortText": "02_form"
669
+ },
670
+ {
671
+ "label": "FormField",
672
+ "kind": 5,
673
+ "detail": "shadcn/ui FormField component",
674
+ "documentation": { "value": "Connects a form control to react-hook-form with automatic error handling." },
675
+ "insertText": "<FormField\n\tcontrol={${1:form}.control}\n\tname=\"${2:name}\"\n\trender={({ field }) => (\n\t\t<FormItem>\n\t\t\t<FormLabel>${3:Label}</FormLabel>\n\t\t\t<FormControl>\n\t\t\t\t<Input placeholder=\"${4:placeholder}\" {...field} />\n\t\t\t</FormControl>\n\t\t\t<FormMessage />\n\t\t</FormItem>\n\t)}\n/>",
676
+ "insertTextRules": 4,
677
+ "sortText": "02_formfield"
678
+ },
679
+ {
680
+ "label": "HoverCard",
681
+ "kind": 5,
682
+ "detail": "shadcn/ui HoverCard component",
683
+ "documentation": { "value": "For sighted users to preview content behind a link. Built on Radix UI HoverCard." },
684
+ "insertText": "<HoverCard>\n\t<HoverCardTrigger>${1:Hover me}</HoverCardTrigger>\n\t<HoverCardContent>${2:Content}</HoverCardContent>\n</HoverCard>",
685
+ "insertTextRules": 4,
686
+ "sortText": "02_hovercard"
687
+ },
688
+ {
689
+ "label": "Input",
690
+ "kind": 5,
691
+ "detail": "shadcn/ui Input component",
692
+ "documentation": { "value": "A styled input element.\n\n```tsx\n<Input type=\"email\" placeholder=\"Email\" />\n```" },
693
+ "insertText": "<Input type=\"${1|text,email,password,number,search,tel,url|}\" placeholder=\"${2:placeholder}\" />",
694
+ "insertTextRules": 4,
695
+ "sortText": "02_input"
696
+ },
697
+ {
698
+ "label": "Label",
699
+ "kind": 5,
700
+ "detail": "shadcn/ui Label component",
701
+ "documentation": { "value": "Renders an accessible label associated with controls. Built on Radix UI Label." },
702
+ "insertText": "<Label htmlFor=\"${1:id}\">${2:Label}</Label>",
703
+ "insertTextRules": 4,
704
+ "sortText": "02_label"
705
+ },
706
+ {
707
+ "label": "Menubar",
708
+ "kind": 5,
709
+ "detail": "shadcn/ui Menubar component",
710
+ "documentation": { "value": "A visually persistent menu common in desktop applications. Built on Radix UI Menubar." },
711
+ "insertText": "<Menubar>\n\t<MenubarMenu>\n\t\t<MenubarTrigger>${1:File}</MenubarTrigger>\n\t\t<MenubarContent>\n\t\t\t<MenubarItem>${2:New}</MenubarItem>\n\t\t</MenubarContent>\n\t</MenubarMenu>\n</Menubar>",
712
+ "insertTextRules": 4,
713
+ "sortText": "02_menubar"
714
+ },
715
+ {
716
+ "label": "NavigationMenu",
717
+ "kind": 5,
718
+ "detail": "shadcn/ui NavigationMenu component",
719
+ "documentation": { "value": "A collection of links for navigation. Built on Radix UI NavigationMenu." },
720
+ "insertText": "<NavigationMenu>\n\t<NavigationMenuList>\n\t\t<NavigationMenuItem>\n\t\t\t<NavigationMenuTrigger>${1:Item}</NavigationMenuTrigger>\n\t\t\t<NavigationMenuContent>\n\t\t\t\t${2:Content}\n\t\t\t</NavigationMenuContent>\n\t\t</NavigationMenuItem>\n\t</NavigationMenuList>\n</NavigationMenu>",
721
+ "insertTextRules": 4,
722
+ "sortText": "02_navigationmenu"
723
+ },
724
+ {
725
+ "label": "Pagination",
726
+ "kind": 5,
727
+ "detail": "shadcn/ui Pagination component",
728
+ "documentation": { "value": "Pagination with page navigation, previous/next links." },
729
+ "insertText": "<Pagination>\n\t<PaginationContent>\n\t\t<PaginationItem>\n\t\t\t<PaginationPrevious href=\"#\" />\n\t\t</PaginationItem>\n\t\t<PaginationItem>\n\t\t\t<PaginationLink href=\"#\">${1:1}</PaginationLink>\n\t\t</PaginationItem>\n\t\t<PaginationItem>\n\t\t\t<PaginationNext href=\"#\" />\n\t\t</PaginationItem>\n\t</PaginationContent>\n</Pagination>",
730
+ "insertTextRules": 4,
731
+ "sortText": "02_pagination"
732
+ },
733
+ {
734
+ "label": "Popover",
735
+ "kind": 5,
736
+ "detail": "shadcn/ui Popover component",
737
+ "documentation": { "value": "Displays rich content in a portal, triggered by a button. Built on Radix UI Popover." },
738
+ "insertText": "<Popover>\n\t<PopoverTrigger>${1:Open}</PopoverTrigger>\n\t<PopoverContent>${2:Content}</PopoverContent>\n</Popover>",
739
+ "insertTextRules": 4,
740
+ "sortText": "02_popover"
741
+ },
742
+ {
743
+ "label": "Progress",
744
+ "kind": 5,
745
+ "detail": "shadcn/ui Progress component",
746
+ "documentation": { "value": "Displays an indicator showing completion progress. Built on Radix UI Progress." },
747
+ "insertText": "<Progress value={${1:33}} />",
748
+ "insertTextRules": 4,
749
+ "sortText": "02_progress"
750
+ },
751
+ {
752
+ "label": "RadioGroup",
753
+ "kind": 5,
754
+ "detail": "shadcn/ui RadioGroup component",
755
+ "documentation": { "value": "A set of checkable buttons where only one can be checked at a time. Built on Radix UI RadioGroup." },
756
+ "insertText": "<RadioGroup defaultValue=\"${1:option-1}\">\n\t<div className=\"flex items-center space-x-2\">\n\t\t<RadioGroupItem value=\"${1:option-1}\" id=\"${1:option-1}\" />\n\t\t<Label htmlFor=\"${1:option-1}\">${2:Option 1}</Label>\n\t</div>\n</RadioGroup>",
757
+ "insertTextRules": 4,
758
+ "sortText": "02_radiogroup"
759
+ },
760
+ {
761
+ "label": "ScrollArea",
762
+ "kind": 5,
763
+ "detail": "shadcn/ui ScrollArea component",
764
+ "documentation": { "value": "Augments native scroll with custom styling. Built on Radix UI ScrollArea." },
765
+ "insertText": "<ScrollArea className=\"h-[${1:200px}] w-[${2:350px}] rounded-md border p-4\">\n\t${3:content}\n</ScrollArea>",
766
+ "insertTextRules": 4,
767
+ "sortText": "02_scrollarea"
768
+ },
769
+ {
770
+ "label": "Select",
771
+ "kind": 5,
772
+ "detail": "shadcn/ui Select component",
773
+ "documentation": { "value": "Displays a list of options for the user to pick from. Built on Radix UI Select." },
774
+ "insertText": "<Select>\n\t<SelectTrigger className=\"w-[180px]\">\n\t\t<SelectValue placeholder=\"${1:Select}\" />\n\t</SelectTrigger>\n\t<SelectContent>\n\t\t<SelectItem value=\"${2:value}\">${3:Label}</SelectItem>\n\t</SelectContent>\n</Select>",
775
+ "insertTextRules": 4,
776
+ "sortText": "02_select"
777
+ },
778
+ {
779
+ "label": "Separator",
780
+ "kind": 5,
781
+ "detail": "shadcn/ui Separator component",
782
+ "documentation": { "value": "Visually or semantically separates content. Built on Radix UI Separator." },
783
+ "insertText": "<Separator orientation=\"${1|horizontal,vertical|}\" />",
784
+ "insertTextRules": 4,
785
+ "sortText": "02_separator"
786
+ },
787
+ {
788
+ "label": "Sheet",
789
+ "kind": 5,
790
+ "detail": "shadcn/ui Sheet component",
791
+ "documentation": { "value": "Extends the Dialog component to display content that complements the main screen. Slides in from screen edge." },
792
+ "insertText": "<Sheet>\n\t<SheetTrigger>${1:Open}</SheetTrigger>\n\t<SheetContent>\n\t\t<SheetHeader>\n\t\t\t<SheetTitle>${2:Title}</SheetTitle>\n\t\t\t<SheetDescription>${3:Description}</SheetDescription>\n\t\t</SheetHeader>\n\t\t${4:content}\n\t</SheetContent>\n</Sheet>",
793
+ "insertTextRules": 4,
794
+ "sortText": "02_sheet"
795
+ },
796
+ {
797
+ "label": "Skeleton",
798
+ "kind": 5,
799
+ "detail": "shadcn/ui Skeleton component",
800
+ "documentation": { "value": "Used to show a placeholder while content is loading." },
801
+ "insertText": "<Skeleton className=\"h-[${1:20px}] w-[${2:100px}]\" />",
802
+ "insertTextRules": 4,
803
+ "sortText": "02_skeleton"
804
+ },
805
+ {
806
+ "label": "Slider",
807
+ "kind": 5,
808
+ "detail": "shadcn/ui Slider component",
809
+ "documentation": { "value": "An input for selecting a value from a range. Built on Radix UI Slider." },
810
+ "insertText": "<Slider defaultValue={[${1:50}]} max={${2:100}} step={${3:1}} />",
811
+ "insertTextRules": 4,
812
+ "sortText": "02_slider"
813
+ },
814
+ {
815
+ "label": "Switch",
816
+ "kind": 5,
817
+ "detail": "shadcn/ui Switch component",
818
+ "documentation": { "value": "A toggle control that switches between on and off. Built on Radix UI Switch." },
819
+ "insertText": "<Switch id=\"${1:mode}\" checked={${2:checked}} onCheckedChange={${3:setChecked}} />",
820
+ "insertTextRules": 4,
821
+ "sortText": "02_switch"
822
+ },
823
+ {
824
+ "label": "Table",
825
+ "kind": 5,
826
+ "detail": "shadcn/ui Table component",
827
+ "documentation": { "value": "A responsive table component with header, body, and caption support." },
828
+ "insertText": "<Table>\n\t<TableCaption>${1:Caption}</TableCaption>\n\t<TableHeader>\n\t\t<TableRow>\n\t\t\t<TableHead>${2:Header}</TableHead>\n\t\t</TableRow>\n\t</TableHeader>\n\t<TableBody>\n\t\t<TableRow>\n\t\t\t<TableCell>${3:Cell}</TableCell>\n\t\t</TableRow>\n\t</TableBody>\n</Table>",
829
+ "insertTextRules": 4,
830
+ "sortText": "02_table"
831
+ },
832
+ {
833
+ "label": "Tabs",
834
+ "kind": 5,
835
+ "detail": "shadcn/ui Tabs component",
836
+ "documentation": { "value": "A set of layered sections of content. Built on Radix UI Tabs." },
837
+ "insertText": "<Tabs defaultValue=\"${1:tab1}\">\n\t<TabsList>\n\t\t<TabsTrigger value=\"${1:tab1}\">${2:Tab 1}</TabsTrigger>\n\t\t<TabsTrigger value=\"${3:tab2}\">${4:Tab 2}</TabsTrigger>\n\t</TabsList>\n\t<TabsContent value=\"${1:tab1}\">${5:Content 1}</TabsContent>\n\t<TabsContent value=\"${3:tab2}\">${6:Content 2}</TabsContent>\n</Tabs>",
838
+ "insertTextRules": 4,
839
+ "sortText": "02_tabs"
840
+ },
841
+ {
842
+ "label": "Textarea",
843
+ "kind": 5,
844
+ "detail": "shadcn/ui Textarea component",
845
+ "documentation": { "value": "A styled textarea element for multi-line text input." },
846
+ "insertText": "<Textarea placeholder=\"${1:Type your message here.}\" />",
847
+ "insertTextRules": 4,
848
+ "sortText": "02_textarea"
849
+ },
850
+ {
851
+ "label": "Toast",
852
+ "kind": 5,
853
+ "detail": "shadcn/ui Toast component",
854
+ "documentation": { "value": "A succinct message displayed temporarily. Uses Radix UI Toast." },
855
+ "insertText": "<Toast>\n\t<ToastTitle>${1:Title}</ToastTitle>\n\t<ToastDescription>${2:Description}</ToastDescription>\n</Toast>",
856
+ "insertTextRules": 4,
857
+ "sortText": "02_toast"
858
+ },
859
+ {
860
+ "label": "Toaster",
861
+ "kind": 5,
862
+ "detail": "shadcn/ui Toaster component",
863
+ "documentation": { "value": "Renders toast notifications. Place in your root layout.\n\n```tsx\n<Toaster />\n```" },
864
+ "insertText": "<Toaster />",
865
+ "insertTextRules": 4,
866
+ "sortText": "02_toaster"
867
+ },
868
+ {
869
+ "label": "Toggle",
870
+ "kind": 5,
871
+ "detail": "shadcn/ui Toggle component",
872
+ "documentation": { "value": "A two-state button that can be on or off. Built on Radix UI Toggle." },
873
+ "insertText": "<Toggle variant=\"${1|default,outline|}\" aria-label=\"${2:Toggle}\">\n\t${3:content}\n</Toggle>",
874
+ "insertTextRules": 4,
875
+ "sortText": "02_toggle"
876
+ },
877
+ {
878
+ "label": "ToggleGroup",
879
+ "kind": 5,
880
+ "detail": "shadcn/ui ToggleGroup component",
881
+ "documentation": { "value": "A group of toggle buttons. Built on Radix UI ToggleGroup." },
882
+ "insertText": "<ToggleGroup type=\"${1|single,multiple|}\">\n\t<ToggleGroupItem value=\"${2:a}\">${3:A}</ToggleGroupItem>\n\t<ToggleGroupItem value=\"${4:b}\">${5:B}</ToggleGroupItem>\n</ToggleGroup>",
883
+ "insertTextRules": 4,
884
+ "sortText": "02_togglegroup"
885
+ },
886
+ {
887
+ "label": "Tooltip",
888
+ "kind": 5,
889
+ "detail": "shadcn/ui Tooltip component",
890
+ "documentation": { "value": "A popup that displays information on hover/focus. Built on Radix UI Tooltip. Must be wrapped in TooltipProvider." },
891
+ "insertText": "<TooltipProvider>\n\t<Tooltip>\n\t\t<TooltipTrigger>${1:Hover me}</TooltipTrigger>\n\t\t<TooltipContent>\n\t\t\t<p>${2:Tooltip text}</p>\n\t\t</TooltipContent>\n\t</Tooltip>\n</TooltipProvider>",
892
+ "insertTextRules": 4,
893
+ "sortText": "02_tooltip"
894
+ },
895
+ {
896
+ "label": "DataTable",
897
+ "kind": 5,
898
+ "detail": "shadcn/ui DataTable component",
899
+ "documentation": { "value": "Powerful table built with TanStack Table for sorting, filtering, and pagination." },
900
+ "insertText": "<DataTable columns={${1:columns}} data={${2:data}} />",
901
+ "insertTextRules": 4,
902
+ "sortText": "02_datatable"
903
+ },
904
+ {
905
+ "label": "DatePicker",
906
+ "kind": 5,
907
+ "detail": "shadcn/ui DatePicker component",
908
+ "documentation": { "value": "Date picker composed from Popover and Calendar components." },
909
+ "insertText": "<DatePicker date={${1:date}} setDate={${2:setDate}} />",
910
+ "insertTextRules": 4,
911
+ "sortText": "02_datepicker"
912
+ },
913
+ {
914
+ "label": "cn",
915
+ "kind": 1,
916
+ "detail": "Utility: merge Tailwind CSS classes",
917
+ "documentation": { "value": "Merges class names using clsx and tailwind-merge. Handles conditional classes and deduplication.\n\n```tsx\nimport { cn } from \"@/lib/utils\";\ncn(\"px-2 py-1\", condition && \"bg-blue-500\", \"text-white\");\n```" },
918
+ "insertText": "cn(${1:classes})",
919
+ "insertTextRules": 4,
920
+ "sortText": "03_cn"
921
+ },
922
+ {
923
+ "label": "cva",
924
+ "kind": 1,
925
+ "detail": "Utility: class-variance-authority",
926
+ "documentation": { "value": "Creates variant-based class name functions using class-variance-authority.\n\n```tsx\nconst buttonVariants = cva(\"inline-flex items-center\", {\n variants: {\n variant: { default: \"bg-primary\", destructive: \"bg-destructive\" },\n size: { default: \"h-10 px-4\", sm: \"h-9 px-3\" },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n});\n```" },
927
+ "insertText": "cva(\"${1:base-classes}\", {\n\tvariants: {\n\t\t${2:variant}: {\n\t\t\t${3:default}: \"${4:classes}\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\t${2:variant}: \"${3:default}\",\n\t},\n})",
928
+ "insertTextRules": 4,
929
+ "sortText": "03_cva"
930
+ },
931
+ {
932
+ "label": "buttonVariants",
933
+ "kind": 1,
934
+ "detail": "Button variant function",
935
+ "documentation": { "value": "Pre-defined variant function for Button component. Use to apply button styles to non-button elements.\n\n```tsx\n<Link className={buttonVariants({ variant: \"outline\" })}>Link</Link>\n```" },
936
+ "insertText": "buttonVariants({ variant: \"${1|default,destructive,outline,secondary,ghost,link|}\", size: \"${2|default,sm,lg,icon|}\" })",
937
+ "insertTextRules": 4,
938
+ "sortText": "03_buttonvariants"
939
+ },
940
+ {
941
+ "label": "badgeVariants",
942
+ "kind": 1,
943
+ "detail": "Badge variant function",
944
+ "documentation": { "value": "Pre-defined variant function for Badge component.\n\n```tsx\n<div className={badgeVariants({ variant: \"outline\" })}>Custom badge</div>\n```" },
945
+ "insertText": "badgeVariants({ variant: \"${1|default,secondary,outline,destructive|}\" })",
946
+ "insertTextRules": 4,
947
+ "sortText": "03_badgevariants"
948
+ },
949
+ {
950
+ "label": "useToast",
951
+ "kind": 1,
952
+ "detail": "Hook: toast notification system",
953
+ "documentation": { "value": "Returns toast function and toasts array for managing notifications.\n\n```tsx\nconst { toast } = useToast();\ntoast({ title: \"Done!\", description: \"Saved.\" });\n```" },
954
+ "insertText": "const { toast } = useToast();",
955
+ "insertTextRules": 4,
956
+ "sortText": "03_usetoast"
957
+ },
958
+ {
959
+ "label": "toast",
960
+ "kind": 1,
961
+ "detail": "Show toast notification",
962
+ "documentation": { "value": "Displays a notification toast.\n\n```tsx\ntoast({\n title: \"Scheduled\",\n description: \"Friday, Feb 10, 2024\",\n});\n```" },
963
+ "insertText": "toast({\n\ttitle: \"${1:Title}\",\n\tdescription: \"${2:Description}\",\n})",
964
+ "insertTextRules": 4,
965
+ "sortText": "03_toast"
966
+ },
967
+ {
968
+ "label": "useFormField",
969
+ "kind": 1,
970
+ "detail": "Hook: access form field context",
971
+ "documentation": { "value": "Returns the current form field context including error, id, name. Used internally by FormItem, FormLabel, FormMessage." },
972
+ "insertText": "const { error, formItemId, formDescriptionId, formMessageId } = useFormField();",
973
+ "insertTextRules": 4,
974
+ "sortText": "03_useformfield"
975
+ },
976
+ {
977
+ "label": "variant-default",
978
+ "kind": 9,
979
+ "detail": "variant=\"default\"",
980
+ "documentation": { "value": "Default variant prop for shadcn/ui components." },
981
+ "insertText": "variant=\"default\"",
982
+ "insertTextRules": 4,
983
+ "sortText": "04_variant_default"
984
+ },
985
+ {
986
+ "label": "variant-destructive",
987
+ "kind": 9,
988
+ "detail": "variant=\"destructive\"",
989
+ "documentation": { "value": "Destructive variant for alerts, buttons, badges, and toasts." },
990
+ "insertText": "variant=\"destructive\"",
991
+ "insertTextRules": 4,
992
+ "sortText": "04_variant_destructive"
993
+ },
994
+ {
995
+ "label": "variant-outline",
996
+ "kind": 9,
997
+ "detail": "variant=\"outline\"",
998
+ "documentation": { "value": "Outline variant — bordered with transparent background." },
999
+ "insertText": "variant=\"outline\"",
1000
+ "insertTextRules": 4,
1001
+ "sortText": "04_variant_outline"
1002
+ },
1003
+ {
1004
+ "label": "variant-secondary",
1005
+ "kind": 9,
1006
+ "detail": "variant=\"secondary\"",
1007
+ "documentation": { "value": "Secondary variant — muted background color." },
1008
+ "insertText": "variant=\"secondary\"",
1009
+ "insertTextRules": 4,
1010
+ "sortText": "04_variant_secondary"
1011
+ },
1012
+ {
1013
+ "label": "variant-ghost",
1014
+ "kind": 9,
1015
+ "detail": "variant=\"ghost\"",
1016
+ "documentation": { "value": "Ghost variant — transparent background, visible on hover." },
1017
+ "insertText": "variant=\"ghost\"",
1018
+ "insertTextRules": 4,
1019
+ "sortText": "04_variant_ghost"
1020
+ },
1021
+ {
1022
+ "label": "variant-link",
1023
+ "kind": 9,
1024
+ "detail": "variant=\"link\"",
1025
+ "documentation": { "value": "Link variant — styled as an underlined hyperlink." },
1026
+ "insertText": "variant=\"link\"",
1027
+ "insertTextRules": 4,
1028
+ "sortText": "04_variant_link"
1029
+ },
1030
+ {
1031
+ "label": "size-default",
1032
+ "kind": 9,
1033
+ "detail": "size=\"default\"",
1034
+ "documentation": { "value": "Default size for buttons (h-10 px-4 py-2)." },
1035
+ "insertText": "size=\"default\"",
1036
+ "insertTextRules": 4,
1037
+ "sortText": "04_size_default"
1038
+ },
1039
+ {
1040
+ "label": "size-sm",
1041
+ "kind": 9,
1042
+ "detail": "size=\"sm\"",
1043
+ "documentation": { "value": "Small size variant (h-9 rounded-md px-3)." },
1044
+ "insertText": "size=\"sm\"",
1045
+ "insertTextRules": 4,
1046
+ "sortText": "04_size_sm"
1047
+ },
1048
+ {
1049
+ "label": "size-lg",
1050
+ "kind": 9,
1051
+ "detail": "size=\"lg\"",
1052
+ "documentation": { "value": "Large size variant (h-11 rounded-md px-8)." },
1053
+ "insertText": "size=\"lg\"",
1054
+ "insertTextRules": 4,
1055
+ "sortText": "04_size_lg"
1056
+ },
1057
+ {
1058
+ "label": "size-icon",
1059
+ "kind": 9,
1060
+ "detail": "size=\"icon\"",
1061
+ "documentation": { "value": "Icon size variant (h-10 w-10) — for icon-only buttons." },
1062
+ "insertText": "size=\"icon\"",
1063
+ "insertTextRules": 4,
1064
+ "sortText": "04_size_icon"
1065
+ },
1066
+ {
1067
+ "label": "asChild",
1068
+ "kind": 9,
1069
+ "detail": "asChild prop (Radix UI)",
1070
+ "documentation": { "value": "Merges props onto the child element instead of rendering a default element. Common Radix UI pattern.\n\n```tsx\n<DialogTrigger asChild>\n <Button>Open</Button>\n</DialogTrigger>\n```" },
1071
+ "insertText": "asChild",
1072
+ "insertTextRules": 4,
1073
+ "sortText": "04_aschild"
1074
+ },
1075
+ {
1076
+ "label": "className-cn",
1077
+ "kind": 9,
1078
+ "detail": "className with cn() utility",
1079
+ "documentation": { "value": "className prop using cn() for conditional class merging." },
1080
+ "insertText": "className={cn(\"${1:base-classes}\", ${2:condition} && \"${3:conditional-classes}\")}",
1081
+ "insertTextRules": 4,
1082
+ "sortText": "04_classname_cn"
1083
+ },
1084
+ {
1085
+ "label": "--background",
1086
+ "kind": 14,
1087
+ "detail": "CSS variable: background color",
1088
+ "documentation": { "value": "shadcn/ui theme variable for the default background color.\n\n```css\n--background: 0 0% 100%; /* hsl */\n```" },
1089
+ "insertText": "--background",
1090
+ "insertTextRules": 4,
1091
+ "sortText": "04_css_background"
1092
+ },
1093
+ {
1094
+ "label": "--foreground",
1095
+ "kind": 14,
1096
+ "detail": "CSS variable: foreground color",
1097
+ "documentation": { "value": "shadcn/ui theme variable for the default foreground/text color.\n\n```css\n--foreground: 222.2 84% 4.9%;\n```" },
1098
+ "insertText": "--foreground",
1099
+ "insertTextRules": 4,
1100
+ "sortText": "04_css_foreground"
1101
+ },
1102
+ {
1103
+ "label": "--primary",
1104
+ "kind": 14,
1105
+ "detail": "CSS variable: primary color",
1106
+ "documentation": { "value": "shadcn/ui theme variable for the primary brand color.\n\n```css\n--primary: 222.2 47.4% 11.2%;\n```" },
1107
+ "insertText": "--primary",
1108
+ "insertTextRules": 4,
1109
+ "sortText": "04_css_primary"
1110
+ },
1111
+ {
1112
+ "label": "--secondary",
1113
+ "kind": 14,
1114
+ "detail": "CSS variable: secondary color",
1115
+ "documentation": { "value": "shadcn/ui theme variable for the secondary color.\n\n```css\n--secondary: 210 40% 96.1%;\n```" },
1116
+ "insertText": "--secondary",
1117
+ "insertTextRules": 4,
1118
+ "sortText": "04_css_secondary"
1119
+ },
1120
+ {
1121
+ "label": "--muted",
1122
+ "kind": 14,
1123
+ "detail": "CSS variable: muted color",
1124
+ "documentation": { "value": "shadcn/ui theme variable for muted backgrounds.\n\n```css\n--muted: 210 40% 96.1%;\n```" },
1125
+ "insertText": "--muted",
1126
+ "insertTextRules": 4,
1127
+ "sortText": "04_css_muted"
1128
+ },
1129
+ {
1130
+ "label": "--accent",
1131
+ "kind": 14,
1132
+ "detail": "CSS variable: accent color",
1133
+ "documentation": { "value": "shadcn/ui theme variable for accent highlights.\n\n```css\n--accent: 210 40% 96.1%;\n```" },
1134
+ "insertText": "--accent",
1135
+ "insertTextRules": 4,
1136
+ "sortText": "04_css_accent"
1137
+ },
1138
+ {
1139
+ "label": "--destructive",
1140
+ "kind": 14,
1141
+ "detail": "CSS variable: destructive color",
1142
+ "documentation": { "value": "shadcn/ui theme variable for destructive actions (red).\n\n```css\n--destructive: 0 84.2% 60.2%;\n```" },
1143
+ "insertText": "--destructive",
1144
+ "insertTextRules": 4,
1145
+ "sortText": "04_css_destructive"
1146
+ },
1147
+ {
1148
+ "label": "--border",
1149
+ "kind": 14,
1150
+ "detail": "CSS variable: border color",
1151
+ "documentation": { "value": "shadcn/ui theme variable for default border color.\n\n```css\n--border: 214.3 31.8% 91.4%;\n```" },
1152
+ "insertText": "--border",
1153
+ "insertTextRules": 4,
1154
+ "sortText": "04_css_border"
1155
+ },
1156
+ {
1157
+ "label": "--input",
1158
+ "kind": 14,
1159
+ "detail": "CSS variable: input border color",
1160
+ "documentation": { "value": "shadcn/ui theme variable for input element borders.\n\n```css\n--input: 214.3 31.8% 91.4%;\n```" },
1161
+ "insertText": "--input",
1162
+ "insertTextRules": 4,
1163
+ "sortText": "04_css_input"
1164
+ },
1165
+ {
1166
+ "label": "--ring",
1167
+ "kind": 14,
1168
+ "detail": "CSS variable: focus ring color",
1169
+ "documentation": { "value": "shadcn/ui theme variable for focus ring outlines.\n\n```css\n--ring: 222.2 84% 4.9%;\n```" },
1170
+ "insertText": "--ring",
1171
+ "insertTextRules": 4,
1172
+ "sortText": "04_css_ring"
1173
+ },
1174
+ {
1175
+ "label": "--radius",
1176
+ "kind": 14,
1177
+ "detail": "CSS variable: border radius",
1178
+ "documentation": { "value": "shadcn/ui theme variable for default border radius.\n\n```css\n--radius: 0.5rem;\n```" },
1179
+ "insertText": "--radius",
1180
+ "insertTextRules": 4,
1181
+ "sortText": "04_css_radius"
1182
+ },
1183
+ {
1184
+ "label": "--card",
1185
+ "kind": 14,
1186
+ "detail": "CSS variable: card background",
1187
+ "documentation": { "value": "shadcn/ui theme variable for card background color.\n\n```css\n--card: 0 0% 100%;\n```" },
1188
+ "insertText": "--card",
1189
+ "insertTextRules": 4,
1190
+ "sortText": "04_css_card"
1191
+ },
1192
+ {
1193
+ "label": "--popover",
1194
+ "kind": 14,
1195
+ "detail": "CSS variable: popover background",
1196
+ "documentation": { "value": "shadcn/ui theme variable for popover background color.\n\n```css\n--popover: 0 0% 100%;\n```" },
1197
+ "insertText": "--popover",
1198
+ "insertTextRules": 4,
1199
+ "sortText": "04_css_popover"
1200
+ }
1201
+ ]
1202
+ }