@enjoys/context-engine 1.3.1 → 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 (221) hide show
  1. package/data/codeActions/angular.json +126 -0
  2. package/data/codeActions/nestjs.json +124 -0
  3. package/data/codeActions/nextjs.json +198 -0
  4. package/data/codeActions/react.json +154 -0
  5. package/data/codeActions/shadcn.json +112 -0
  6. package/data/codeActions/shell.json +169 -26
  7. package/data/codeLens/angular.json +22 -0
  8. package/data/codeLens/nestjs.json +21 -0
  9. package/data/codeLens/nextjs.json +117 -0
  10. package/data/codeLens/react.json +89 -0
  11. package/data/codeLens/shadcn.json +89 -0
  12. package/data/codeLens/shell.json +59 -17
  13. package/data/codeLens/tailwindcss.json +56 -0
  14. package/data/color/angular.json +21 -0
  15. package/data/color/nestjs.json +18 -0
  16. package/data/color/nextjs.json +22 -0
  17. package/data/color/react.json +93 -0
  18. package/data/color/shadcn.json +66 -0
  19. package/data/color/shell.json +106 -80
  20. package/data/commands/angular.json +312 -0
  21. package/data/commands/manifest.json +5 -0
  22. package/data/commands/nestjs.json +273 -0
  23. package/data/commands/nextjs.json +123 -0
  24. package/data/commands/react.json +210 -0
  25. package/data/commands/shadcn.json +410 -0
  26. package/data/commands/shell.json +571 -41
  27. package/data/completion/angular.json +1490 -0
  28. package/data/completion/css.json +793 -0
  29. package/data/completion/nestjs.json +1454 -0
  30. package/data/completion/nextjs.json +1373 -0
  31. package/data/completion/react.json +1319 -0
  32. package/data/completion/shadcn.json +1202 -0
  33. package/data/completion/shell.json +2446 -510
  34. package/data/declaration/angular.json +46 -0
  35. package/data/declaration/nestjs.json +47 -0
  36. package/data/declaration/nextjs.json +274 -0
  37. package/data/declaration/react.json +199 -0
  38. package/data/declaration/shadcn.json +211 -0
  39. package/data/declaration/shell.json +343 -24
  40. package/data/declaration/tailwindcss.json +72 -0
  41. package/data/definition/angular.json +670 -0
  42. package/data/definition/nestjs.json +684 -0
  43. package/data/definition/nextjs.json +439 -0
  44. package/data/definition/react.json +397 -0
  45. package/data/definition/shadcn.json +99 -0
  46. package/data/definition/shell.json +820 -0
  47. package/data/documentHighlight/angular.json +414 -0
  48. package/data/documentHighlight/css.json +77 -2
  49. package/data/documentHighlight/nestjs.json +115 -0
  50. package/data/documentHighlight/nextjs.json +212 -0
  51. package/data/documentHighlight/react.json +119 -0
  52. package/data/documentHighlight/shadcn.json +168 -0
  53. package/data/documentHighlight/shell.json +664 -334
  54. package/data/documentHighlight/tailwindcss.json +105 -10
  55. package/data/documentRangeFormatting/angular.json +45 -0
  56. package/data/documentRangeFormatting/nestjs.json +17 -0
  57. package/data/documentRangeFormatting/nextjs.json +17 -0
  58. package/data/documentRangeFormatting/react.json +78 -0
  59. package/data/documentRangeFormatting/shadcn.json +45 -0
  60. package/data/documentRangeFormatting/shell.json +120 -53
  61. package/data/documentSymbol/angular.json +180 -0
  62. package/data/documentSymbol/nestjs.json +152 -0
  63. package/data/documentSymbol/nextjs.json +159 -0
  64. package/data/documentSymbol/react.json +145 -0
  65. package/data/documentSymbol/shadcn.json +131 -0
  66. package/data/documentSymbol/shell.json +166 -26
  67. package/data/documentSymbol/tailwindcss.json +49 -0
  68. package/data/foldingRange/angular.json +99 -0
  69. package/data/foldingRange/nestjs.json +26 -0
  70. package/data/foldingRange/nextjs.json +26 -0
  71. package/data/foldingRange/react.json +120 -0
  72. package/data/foldingRange/shadcn.json +93 -0
  73. package/data/foldingRange/shell.json +106 -46
  74. package/data/formatting/angular.json +21 -0
  75. package/data/formatting/nestjs.json +23 -0
  76. package/data/formatting/nextjs.json +23 -0
  77. package/data/formatting/react.json +71 -0
  78. package/data/formatting/shadcn.json +61 -0
  79. package/data/formatting/shell.json +103 -19
  80. package/data/hover/angular.json +455 -0
  81. package/data/hover/css.json +232 -0
  82. package/data/hover/nestjs.json +296 -0
  83. package/data/hover/nextjs.json +305 -0
  84. package/data/hover/react.json +173 -0
  85. package/data/hover/shadcn.json +450 -0
  86. package/data/hover/shell.json +684 -75
  87. package/data/implementation/angular.json +22 -0
  88. package/data/implementation/nestjs.json +24 -0
  89. package/data/implementation/nextjs.json +137 -0
  90. package/data/implementation/react.json +125 -0
  91. package/data/implementation/shadcn.json +89 -0
  92. package/data/implementation/shell.json +59 -3
  93. package/data/inlayHints/angular.json +24 -0
  94. package/data/inlayHints/nestjs.json +24 -0
  95. package/data/inlayHints/nextjs.json +143 -0
  96. package/data/inlayHints/react.json +177 -0
  97. package/data/inlayHints/shadcn.json +109 -0
  98. package/data/inlayHints/shell.json +223 -35
  99. package/data/inlineCompletions/angular.json +135 -0
  100. package/data/inlineCompletions/nestjs.json +25 -0
  101. package/data/inlineCompletions/nextjs.json +179 -0
  102. package/data/inlineCompletions/react.json +203 -0
  103. package/data/inlineCompletions/shadcn.json +115 -0
  104. package/data/inlineCompletions/shell.json +185 -35
  105. package/data/linkedEditingRange/angular.json +23 -0
  106. package/data/linkedEditingRange/nestjs.json +10 -0
  107. package/data/linkedEditingRange/nextjs.json +11 -0
  108. package/data/linkedEditingRange/react.json +75 -0
  109. package/data/linkedEditingRange/shadcn.json +23 -0
  110. package/data/linkedEditingRange/shell.json +25 -25
  111. package/data/links/angular.json +95 -0
  112. package/data/links/nestjs.json +130 -0
  113. package/data/links/nextjs.json +91 -0
  114. package/data/links/react.json +75 -0
  115. package/data/links/shadcn.json +98 -0
  116. package/data/links/shell.json +56 -0
  117. package/data/links/tailwindcss.json +25 -0
  118. package/data/manifest.json +339 -152
  119. package/data/onTypeFormatting/angular.json +14 -0
  120. package/data/onTypeFormatting/nestjs.json +16 -0
  121. package/data/onTypeFormatting/nextjs.json +17 -0
  122. package/data/onTypeFormatting/react.json +127 -0
  123. package/data/onTypeFormatting/shadcn.json +54 -0
  124. package/data/onTypeFormatting/shell.json +72 -68
  125. package/data/rangeSemanticTokens/angular.json +140 -0
  126. package/data/rangeSemanticTokens/nestjs.json +27 -0
  127. package/data/rangeSemanticTokens/nextjs.json +28 -0
  128. package/data/rangeSemanticTokens/react.json +216 -0
  129. package/data/rangeSemanticTokens/shadcn.json +140 -0
  130. package/data/rangeSemanticTokens/shell.json +247 -69
  131. package/data/rangeSemanticTokens/tailwindcss.json +99 -8
  132. package/data/references/angular.json +26 -0
  133. package/data/references/nestjs.json +24 -0
  134. package/data/references/nextjs.json +178 -0
  135. package/data/references/react.json +192 -0
  136. package/data/references/shadcn.json +101 -0
  137. package/data/references/shell.json +323 -92
  138. package/data/references/tailwindcss.json +66 -0
  139. package/data/rename/angular.json +131 -0
  140. package/data/rename/nestjs.json +32 -0
  141. package/data/rename/nextjs.json +31 -0
  142. package/data/rename/react.json +88 -0
  143. package/data/rename/shadcn.json +79 -0
  144. package/data/rename/shell.json +101 -31
  145. package/data/selectionRange/angular.json +95 -0
  146. package/data/selectionRange/nestjs.json +21 -0
  147. package/data/selectionRange/nextjs.json +22 -0
  148. package/data/selectionRange/react.json +87 -0
  149. package/data/selectionRange/shadcn.json +89 -0
  150. package/data/selectionRange/shell.json +65 -35
  151. package/data/semanticTokens/angular.json +198 -0
  152. package/data/semanticTokens/nestjs.json +35 -0
  153. package/data/semanticTokens/nextjs.json +38 -0
  154. package/data/semanticTokens/react.json +215 -0
  155. package/data/semanticTokens/shadcn.json +180 -0
  156. package/data/semanticTokens/shell.json +238 -65
  157. package/data/signatureHelp/angular.json +182 -0
  158. package/data/signatureHelp/nestjs.json +128 -0
  159. package/data/signatureHelp/nextjs.json +127 -0
  160. package/data/signatureHelp/react.json +281 -0
  161. package/data/signatureHelp/shadcn.json +237 -0
  162. package/data/signatureHelp/shell.json +797 -104
  163. package/data/typeDefinition/angular.json +362 -0
  164. package/data/typeDefinition/nestjs.json +334 -0
  165. package/data/typeDefinition/nextjs.json +285 -0
  166. package/data/typeDefinition/react.json +236 -0
  167. package/data/typeDefinition/shadcn.json +292 -0
  168. package/data/typeDefinition/shell.json +104 -40
  169. package/package.json +1 -1
  170. package/data/codeActions/bash.json +0 -169
  171. package/data/codeActions/zsh.json +0 -49
  172. package/data/codeLens/bash.json +0 -75
  173. package/data/codeLens/zsh.json +0 -19
  174. package/data/color/bash.json +0 -100
  175. package/data/color/zsh.json +0 -80
  176. package/data/commands/bash.json +0 -102
  177. package/data/commands/zsh.json +0 -166
  178. package/data/completion/bash.json +0 -1184
  179. package/data/completion/zsh.json +0 -973
  180. package/data/declaration/bash.json +0 -301
  181. package/data/declaration/zsh.json +0 -205
  182. package/data/definition/bash.json +0 -565
  183. package/data/definition/zsh.json +0 -350
  184. package/data/documentHighlight/bash.json +0 -393
  185. package/data/documentHighlight/zsh.json +0 -266
  186. package/data/documentRangeFormatting/bash.json +0 -41
  187. package/data/documentRangeFormatting/zsh.json +0 -59
  188. package/data/documentSymbol/bash.json +0 -124
  189. package/data/documentSymbol/zsh.json +0 -26
  190. package/data/foldingRange/bash.json +0 -76
  191. package/data/foldingRange/zsh.json +0 -46
  192. package/data/formatting/bash.json +0 -88
  193. package/data/formatting/zsh.json +0 -28
  194. package/data/hover/bash.json +0 -579
  195. package/data/hover/zsh.json +0 -96
  196. package/data/implementation/bash.json +0 -44
  197. package/data/implementation/zsh.json +0 -41
  198. package/data/inlayHints/bash.json +0 -207
  199. package/data/inlayHints/zsh.json +0 -43
  200. package/data/inlineCompletions/bash.json +0 -155
  201. package/data/inlineCompletions/zsh.json +0 -17
  202. package/data/linkedEditingRange/bash.json +0 -25
  203. package/data/linkedEditingRange/zsh.json +0 -25
  204. package/data/links/bash.json +0 -56
  205. package/data/links/zsh.json +0 -15
  206. package/data/onTypeFormatting/bash.json +0 -68
  207. package/data/onTypeFormatting/zsh.json +0 -68
  208. package/data/rangeSemanticTokens/bash.json +0 -90
  209. package/data/rangeSemanticTokens/zsh.json +0 -76
  210. package/data/references/bash.json +0 -221
  211. package/data/references/zsh.json +0 -166
  212. package/data/rename/bash.json +0 -37
  213. package/data/rename/zsh.json +0 -31
  214. package/data/selectionRange/bash.json +0 -35
  215. package/data/selectionRange/zsh.json +0 -35
  216. package/data/semanticTokens/bash.json +0 -71
  217. package/data/semanticTokens/zsh.json +0 -71
  218. package/data/signatureHelp/bash.json +0 -111
  219. package/data/signatureHelp/zsh.json +0 -118
  220. package/data/typeDefinition/bash.json +0 -95
  221. package/data/typeDefinition/zsh.json +0 -40
@@ -0,0 +1,115 @@
1
+ {
2
+ "language": "shadcn",
3
+ "inlineCompletions": [
4
+ {
5
+ "text": "import { Button } from \"@/components/ui/button\"\n\n<Button variant=\"default\" size=\"default\">\n Click me\n</Button>",
6
+ "description": "Button component with variant and size props",
7
+ "triggerPrefix": "shadcn-button"
8
+ },
9
+ {
10
+ "text": "import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\"\n\n<Card>\n <CardHeader>\n <CardTitle>Title</CardTitle>\n <CardDescription>Description</CardDescription>\n </CardHeader>\n <CardContent>\n <p>Content</p>\n </CardContent>\n <CardFooter>\n <p>Footer</p>\n </CardFooter>\n</Card>",
11
+ "description": "Card with all sub-components",
12
+ "triggerPrefix": "shadcn-card"
13
+ },
14
+ {
15
+ "text": "import {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"@/components/ui/dialog\"\n\n<Dialog>\n <DialogTrigger asChild>\n <Button variant=\"outline\">Open</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Dialog Title</DialogTitle>\n <DialogDescription>Dialog description text.</DialogDescription>\n </DialogHeader>\n <div className=\"py-4\">\n Content here\n </div>\n <DialogFooter>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </DialogContent>\n</Dialog>",
16
+ "description": "Dialog with header, content, and footer",
17
+ "triggerPrefix": "shadcn-dialog"
18
+ },
19
+ {
20
+ "text": "import { zodResolver } from \"@hookform/resolvers/zod\"\nimport { useForm } from \"react-hook-form\"\nimport * as z from \"zod\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Form,\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from \"@/components/ui/form\"\nimport { Input } from \"@/components/ui/input\"\n\nconst formSchema = z.object({\n username: z.string().min(2).max(50),\n})\n\nexport function MyForm() {\n const form = useForm<z.infer<typeof formSchema>>({\n resolver: zodResolver(formSchema),\n defaultValues: {\n username: \"\",\n },\n })\n\n function onSubmit(values: z.infer<typeof formSchema>) {\n console.log(values)\n }\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-8\">\n <FormField\n control={form.control}\n name=\"username\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Username</FormLabel>\n <FormControl>\n <Input placeholder=\"username\" {...field} />\n </FormControl>\n <FormDescription>Your display name.</FormDescription>\n <FormMessage />\n </FormItem>\n )}\n />\n <Button type=\"submit\">Submit</Button>\n </form>\n </Form>\n )\n}",
21
+ "description": "Form with react-hook-form, zod validation, and shadcn fields",
22
+ "triggerPrefix": "shadcn-form"
23
+ },
24
+ {
25
+ "text": "import {\n ColumnDef,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n SortingState,\n ColumnFiltersState,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\"\nimport { Button } from \"@/components/ui/button\"\nimport { Input } from \"@/components/ui/input\"\nimport { useState } from \"react\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n\n const table = useReactTable({\n data,\n columns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n onColumnFiltersChange: setColumnFilters,\n getFilteredRowModel: getFilteredRowModel(),\n state: { sorting, columnFilters },\n })\n\n return (\n <div>\n <div className=\"flex items-center py-4\">\n <Input\n placeholder=\"Filter...\"\n value={(table.getColumn(\"name\")?.getFilterValue() as string) ?? \"\"}\n onChange={(e) => table.getColumn(\"name\")?.setFilterValue(e.target.value)}\n className=\"max-w-sm\"\n />\n </div>\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2 py-4\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>Previous</Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>Next</Button>\n </div>\n </div>\n )\n}",
26
+ "description": "DataTable with columns, sorting, filtering, and pagination",
27
+ "triggerPrefix": "shadcn-datatable"
28
+ },
29
+ {
30
+ "text": "import {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\"\n\n<Select>\n <SelectTrigger className=\"w-[180px]\">\n <SelectValue placeholder=\"Select an option\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"option1\">Option 1</SelectItem>\n <SelectItem value=\"option2\">Option 2</SelectItem>\n <SelectItem value=\"option3\">Option 3</SelectItem>\n </SelectContent>\n</Select>",
31
+ "description": "Select dropdown with trigger and items",
32
+ "triggerPrefix": "shadcn-select"
33
+ },
34
+ {
35
+ "text": "import {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Button } from \"@/components/ui/button\"\n\n<DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\">Open Menu</Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"w-56\">\n <DropdownMenuLabel>My Account</DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuItem>Profile</DropdownMenuItem>\n <DropdownMenuItem>Settings</DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem>Logout</DropdownMenuItem>\n </DropdownMenuContent>\n</DropdownMenu>",
36
+ "description": "Dropdown menu with label, items, and separators",
37
+ "triggerPrefix": "shadcn-dropdown"
38
+ },
39
+ {
40
+ "text": "import {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from \"@/components/ui/command\"\nimport { useState, useEffect } from \"react\"\n\nconst [open, setOpen] = useState(false)\n\nuseEffect(() => {\n const down = (e: KeyboardEvent) => {\n if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault()\n setOpen((open) => !open)\n }\n }\n document.addEventListener(\"keydown\", down)\n return () => document.removeEventListener(\"keydown\", down)\n}, [])\n\n<CommandDialog open={open} onOpenChange={setOpen}>\n <CommandInput placeholder=\"Type a command or search...\" />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup heading=\"Suggestions\">\n <CommandItem>Calendar</CommandItem>\n <CommandItem>Search</CommandItem>\n <CommandItem>Settings</CommandItem>\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup heading=\"Actions\">\n <CommandItem>New File</CommandItem>\n <CommandItem>New Folder</CommandItem>\n </CommandGroup>\n </CommandList>\n</CommandDialog>",
41
+ "description": "Command palette with keyboard shortcut, search, and grouped items",
42
+ "triggerPrefix": "shadcn-command"
43
+ },
44
+ {
45
+ "text": "import { useToast } from \"@/components/ui/use-toast\"\n\nconst { toast } = useToast()\n\ntoast({\n title: \"Success\",\n description: \"Your action was completed.\",\n})",
46
+ "description": "Toast notification call with title and description",
47
+ "triggerPrefix": "shadcn-toast"
48
+ },
49
+ {
50
+ "text": "import {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\"\n\n<AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"destructive\">Delete</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction>Continue</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n</AlertDialog>",
51
+ "description": "AlertDialog confirmation with cancel and continue actions",
52
+ "triggerPrefix": "shadcn-alertdialog"
53
+ },
54
+ {
55
+ "text": "import {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@/components/ui/sheet\"\n\n<Sheet>\n <SheetTrigger asChild>\n <Button variant=\"outline\">Open Sidebar</Button>\n </SheetTrigger>\n <SheetContent side=\"left\">\n <SheetHeader>\n <SheetTitle>Navigation</SheetTitle>\n <SheetDescription>Browse sections.</SheetDescription>\n </SheetHeader>\n <nav className=\"flex flex-col space-y-2 mt-4\">\n <a href=\"#\" className=\"text-sm\">Dashboard</a>\n <a href=\"#\" className=\"text-sm\">Settings</a>\n <a href=\"#\" className=\"text-sm\">Profile</a>\n </nav>\n </SheetContent>\n</Sheet>",
56
+ "description": "Sheet sidebar panel with navigation",
57
+ "triggerPrefix": "shadcn-sheet"
58
+ },
59
+ {
60
+ "text": "import { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\"\n\n<Tabs defaultValue=\"tab1\" className=\"w-full\">\n <TabsList>\n <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n <TabsTrigger value=\"tab3\">Tab 3</TabsTrigger>\n </TabsList>\n <TabsContent value=\"tab1\">Content for tab 1</TabsContent>\n <TabsContent value=\"tab2\">Content for tab 2</TabsContent>\n <TabsContent value=\"tab3\">Content for tab 3</TabsContent>\n</Tabs>",
61
+ "description": "Tabs layout with multiple panels",
62
+ "triggerPrefix": "shadcn-tabs"
63
+ },
64
+ {
65
+ "text": "import {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\n\n<Accordion type=\"single\" collapsible>\n <AccordionItem value=\"item-1\">\n <AccordionTrigger>Section 1</AccordionTrigger>\n <AccordionContent>Content for section 1.</AccordionContent>\n </AccordionItem>\n <AccordionItem value=\"item-2\">\n <AccordionTrigger>Section 2</AccordionTrigger>\n <AccordionContent>Content for section 2.</AccordionContent>\n </AccordionItem>\n</Accordion>",
66
+ "description": "Accordion with collapsible sections",
67
+ "triggerPrefix": "shadcn-accordion"
68
+ },
69
+ {
70
+ "text": "import { Input } from \"@/components/ui/input\"\nimport { Label } from \"@/components/ui/label\"\n\n<div className=\"grid w-full max-w-sm items-center gap-1.5\">\n <Label htmlFor=\"email\">Email</Label>\n <Input type=\"email\" id=\"email\" placeholder=\"Email\" />\n</div>",
71
+ "description": "Input field with label",
72
+ "triggerPrefix": "shadcn-input"
73
+ },
74
+ {
75
+ "text": "import { Textarea } from \"@/components/ui/textarea\"\nimport { Label } from \"@/components/ui/label\"\n\n<div className=\"grid w-full gap-1.5\">\n <Label htmlFor=\"message\">Message</Label>\n <Textarea placeholder=\"Type your message here.\" id=\"message\" />\n</div>",
76
+ "description": "Textarea with label",
77
+ "triggerPrefix": "shadcn-textarea"
78
+ },
79
+ {
80
+ "text": "import { Badge } from \"@/components/ui/badge\"\n\n<Badge variant=\"default\">Badge</Badge>\n<Badge variant=\"secondary\">Secondary</Badge>\n<Badge variant=\"outline\">Outline</Badge>\n<Badge variant=\"destructive\">Destructive</Badge>",
81
+ "description": "Badge component with variant options",
82
+ "triggerPrefix": "shadcn-badge"
83
+ },
84
+ {
85
+ "text": "import {\n NavigationMenu,\n NavigationMenuContent,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuTrigger,\n navigationMenuTriggerStyle,\n} from \"@/components/ui/navigation-menu\"\n\n<NavigationMenu>\n <NavigationMenuList>\n <NavigationMenuItem>\n <NavigationMenuTrigger>Getting Started</NavigationMenuTrigger>\n <NavigationMenuContent>\n <ul className=\"grid gap-3 p-4 md:w-[400px]\">\n <li><NavigationMenuLink href=\"/docs\">Documentation</NavigationMenuLink></li>\n <li><NavigationMenuLink href=\"/examples\">Examples</NavigationMenuLink></li>\n </ul>\n </NavigationMenuContent>\n </NavigationMenuItem>\n <NavigationMenuItem>\n <NavigationMenuLink className={navigationMenuTriggerStyle()} href=\"/about\">\n About\n </NavigationMenuLink>\n </NavigationMenuItem>\n </NavigationMenuList>\n</NavigationMenu>",
86
+ "description": "Navigation menu with dropdown content",
87
+ "triggerPrefix": "shadcn-navigation"
88
+ },
89
+ {
90
+ "text": "import {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"@/components/ui/pagination\"\n\n<Pagination>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious href=\"#\" />\n </PaginationItem>\n <PaginationItem>\n <PaginationLink href=\"#\">1</PaginationLink>\n </PaginationItem>\n <PaginationItem>\n <PaginationLink href=\"#\" isActive>2</PaginationLink>\n </PaginationItem>\n <PaginationItem>\n <PaginationLink href=\"#\">3</PaginationLink>\n </PaginationItem>\n <PaginationItem>\n <PaginationEllipsis />\n </PaginationItem>\n <PaginationItem>\n <PaginationNext href=\"#\" />\n </PaginationItem>\n </PaginationContent>\n</Pagination>",
91
+ "description": "Pagination with page links and navigation",
92
+ "triggerPrefix": "shadcn-pagination"
93
+ },
94
+ {
95
+ "text": "import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}",
96
+ "description": "cn() utility function definition using clsx and tailwind-merge",
97
+ "triggerPrefix": "shadcn-cn"
98
+ },
99
+ {
100
+ "text": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nconst myVariants = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\"\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n }\n)",
101
+ "description": "cva() variant definition with multiple variant axes",
102
+ "triggerPrefix": "shadcn-cva"
103
+ },
104
+ {
105
+ "text": "import { Toaster } from \"@/components/ui/toaster\"\n\nexport default function RootLayout({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n <html lang=\"en\">\n <body>\n <main>{children}</main>\n <Toaster />\n </body>\n </html>\n )\n}",
106
+ "description": "Toaster provider setup in root layout",
107
+ "triggerPrefix": "shadcn-toaster"
108
+ },
109
+ {
110
+ "text": "import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface MyComponentProps\n extends React.HTMLAttributes<HTMLDivElement> {\n variant?: \"default\" | \"outline\"\n}\n\nconst MyComponent = React.forwardRef<HTMLDivElement, MyComponentProps>(\n ({ className, variant = \"default\", ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n variant === \"outline\" && \"border-2\",\n className\n )}\n {...props}\n />\n )\n }\n)\nMyComponent.displayName = \"MyComponent\"\n\nexport { MyComponent }",
111
+ "description": "Component with forwardRef, cn(), variants, and displayName",
112
+ "triggerPrefix": "shadcn-component"
113
+ }
114
+ ]
115
+ }
@@ -1,35 +1,185 @@
1
- {
2
- "language": "shell",
3
- "inlineCompletions": [
4
- {
5
- "triggerPattern": "^\\\\s*#!\\\\s*$",
6
- "insertText": "#!/bin/sh\nset -e\n\n${1:# script body}",
7
- "description": "Shell script shebang",
8
- "completeBracketPairs": true
9
- },
10
- {
11
- "triggerPattern": "^\\\\s*if\\\\s*$",
12
- "insertText": "if [ ${1:condition} ]; then\n\t${2:# commands}\nelse\n\t${3:# commands}\nfi",
13
- "description": "If conditional",
14
- "completeBracketPairs": true
15
- },
16
- {
17
- "triggerPattern": "^\\\\s*for\\\\s*$",
18
- "insertText": "for ${1:item} in ${2:list}; do\n\t${3:# commands}\ndone",
19
- "description": "For loop",
20
- "completeBracketPairs": true
21
- },
22
- {
23
- "triggerPattern": "^\\\\s*function\\\\s*$",
24
- "insertText": "${1:function_name}() {\n\t${2:# body}\n}",
25
- "description": "Function definition",
26
- "completeBracketPairs": true
27
- },
28
- {
29
- "triggerPattern": "^\\\\s*case\\\\s*$",
30
- "insertText": "case ${1:\"\\$variable\"} in\n\t${2:pattern1})\n\t\t${3:# commands}\n\t\t;;\n\t${4:pattern2})\n\t\t${5:# commands}\n\t\t;;\n\t*)\n\t\t${6:# default}\n\t\t;;\nesac",
31
- "description": "Case statement",
32
- "completeBracketPairs": true
33
- }
34
- ]
35
- }
1
+ {
2
+ "language": "shell",
3
+ "inlineCompletions": [
4
+ {
5
+ "triggerPattern": "^\\\\s*#!\\\\s*$",
6
+ "insertText": "#!/bin/sh\nset -e\n\n${1:# script body}",
7
+ "description": "Shell script shebang",
8
+ "completeBracketPairs": true
9
+ },
10
+ {
11
+ "triggerPattern": "^\\\\s*if\\\\s*$",
12
+ "insertText": "if [ ${1:condition} ]; then\n\t${2:# commands}\nelse\n\t${3:# commands}\nfi",
13
+ "description": "If conditional",
14
+ "completeBracketPairs": true
15
+ },
16
+ {
17
+ "triggerPattern": "^\\\\s*for\\\\s*$",
18
+ "insertText": "for ${1:item} in ${2:list}; do\n\t${3:# commands}\ndone",
19
+ "description": "For loop",
20
+ "completeBracketPairs": true
21
+ },
22
+ {
23
+ "triggerPattern": "^\\\\s*function\\\\s*$",
24
+ "insertText": "${1:function_name}() {\n\t${2:# body}\n}",
25
+ "description": "Function definition",
26
+ "completeBracketPairs": true
27
+ },
28
+ {
29
+ "triggerPattern": "^\\\\s*case\\\\s*$",
30
+ "insertText": "case ${1:\"\\$variable\"} in\n\t${2:pattern1})\n\t\t${3:# commands}\n\t\t;;\n\t${4:pattern2})\n\t\t${5:# commands}\n\t\t;;\n\t*)\n\t\t${6:# default}\n\t\t;;\nesac",
31
+ "description": "Case statement",
32
+ "completeBracketPairs": true
33
+ },
34
+ {
35
+ "triggerPattern": "^\\s*if\\s*$",
36
+ "insertText": "if [[ ${1:condition} ]]; then\n\t${2:command}\nfi",
37
+ "description": "If statement",
38
+ "completeBracketPairs": true
39
+ },
40
+ {
41
+ "triggerPattern": "^\\s*if\\s*\\[\\[.*\\]\\];\\s*then\\s*$",
42
+ "insertText": "\n\t${1:command}\nelse\n\t${2:command}\nfi",
43
+ "description": "If-else body",
44
+ "completeBracketPairs": true
45
+ },
46
+ {
47
+ "triggerPattern": "^\\s*elif\\s*$",
48
+ "insertText": "elif [[ ${1:condition} ]]; then\n\t${2:command}",
49
+ "description": "Elif clause",
50
+ "completeBracketPairs": true
51
+ },
52
+ {
53
+ "triggerPattern": "^\\s*for\\s*$",
54
+ "insertText": "for ${1:item} in ${2:list}; do\n\t${3:command}\ndone",
55
+ "description": "For-in loop",
56
+ "completeBracketPairs": true
57
+ },
58
+ {
59
+ "triggerPattern": "^\\s*for\\s*\\(\\(\\s*$",
60
+ "insertText": "for (( ${1:i}=0; ${1:i}<${2:n}; ${1:i}++ )); do\n\t${3:command}\ndone",
61
+ "description": "C-style for loop",
62
+ "completeBracketPairs": true
63
+ },
64
+ {
65
+ "triggerPattern": "^\\s*while\\s*$",
66
+ "insertText": "while [[ ${1:condition} ]]; do\n\t${2:command}\ndone",
67
+ "description": "While loop",
68
+ "completeBracketPairs": true
69
+ },
70
+ {
71
+ "triggerPattern": "^\\s*while\\s+IFS=\\s*$",
72
+ "insertText": "while IFS= read -r ${1:line}; do\n\t${2:echo \"$line\"}\ndone < \"${3:file}\"",
73
+ "description": "Read file line by line",
74
+ "completeBracketPairs": true
75
+ },
76
+ {
77
+ "triggerPattern": "^\\s*until\\s*$",
78
+ "insertText": "until [[ ${1:condition} ]]; do\n\t${2:command}\ndone",
79
+ "description": "Until loop",
80
+ "completeBracketPairs": true
81
+ },
82
+ {
83
+ "triggerPattern": "^\\s*case\\s*$",
84
+ "insertText": "case ${1:\"$variable\"} in\n\t${2:pattern1})\n\t\t${3:command}\n\t\t;;\n\t${4:pattern2})\n\t\t${5:command}\n\t\t;;\n\t*)\n\t\t${6:echo \"Unknown option\"}\n\t\t;;\nesac",
85
+ "description": "Case statement",
86
+ "completeBracketPairs": true
87
+ },
88
+ {
89
+ "triggerPattern": "^\\s*select\\s*$",
90
+ "insertText": "select ${1:opt} in ${2:option1 option2 option3}; do\n\tcase \"$${1:opt}\" in\n\t\t${3:option1}) ${4:command} ;;\n\t\t*) echo \"Invalid\" ;;\n\tesac\ndone",
91
+ "description": "Select menu",
92
+ "completeBracketPairs": true
93
+ },
94
+ {
95
+ "triggerPattern": "^\\s*function\\s+\\w+\\s*$",
96
+ "insertText": "() {\n\tlocal ${1:arg}=\"$1\"\n\t${2:command}\n}",
97
+ "description": "Function body",
98
+ "completeBracketPairs": true
99
+ },
100
+ {
101
+ "triggerPattern": "^\\s*\\w+\\(\\)\\s*$",
102
+ "insertText": "{\n\tlocal ${1:arg}=\"$1\"\n\t${2:command}\n}",
103
+ "description": "Function body (parens form)",
104
+ "completeBracketPairs": true
105
+ },
106
+ {
107
+ "triggerPattern": "^#!/usr/bin/env\\s+bash\\s*$",
108
+ "insertText": "\nset -euo pipefail\nIFS=$'\\\\n\\\\t'\n\n${1:main() \\{\n\t$2\n\\}}\n\nmain \"$@\"",
109
+ "description": "Strict mode script template",
110
+ "completeBracketPairs": true
111
+ },
112
+ {
113
+ "triggerPattern": "^\\s*trap\\s*$",
114
+ "insertText": "trap '${1:cleanup}' EXIT ERR INT TERM",
115
+ "description": "Trap cleanup handler",
116
+ "completeBracketPairs": false
117
+ },
118
+ {
119
+ "triggerPattern": "^\\s*getopts\\s*$",
120
+ "insertText": "while getopts \":${1:hv}\" opt; do\n\tcase \"$opt\" in\n\t\th) usage; exit 0 ;;\n\t\tv) echo \"$VERSION\"; exit 0 ;;\n\t\t\\?) echo \"Invalid option: -$OPTARG\" >&2; exit 1 ;;\n\t\t:) echo \"Option -$OPTARG requires an argument\" >&2; exit 1 ;;\n\tesac\ndone\nshift $((OPTIND - 1))",
121
+ "description": "Getopts argument parsing loop",
122
+ "completeBracketPairs": true
123
+ },
124
+ {
125
+ "triggerPattern": "^\\s*read\\s+-r\\s*$",
126
+ "insertText": "read -r -p \"${1:Enter value}: \" ${2:variable}",
127
+ "description": "Read with prompt",
128
+ "completeBracketPairs": false
129
+ },
130
+ {
131
+ "triggerPattern": "^\\s*(?:local\\s+)?tmpdir=\\s*$",
132
+ "insertText": "$(mktemp -d)\ntrap 'rm -rf \"$tmpdir\"' EXIT",
133
+ "description": "Create temp directory with cleanup",
134
+ "completeBracketPairs": false
135
+ },
136
+ {
137
+ "triggerPattern": "^\\s*log\\s*$",
138
+ "insertText": "log() {\n\tlocal level=\"$1\"; shift\n\tprintf '[%s] [%s] %s\\n' \"$(date '+%Y-%m-%d %H:%M:%S')\" \"$level\" \"$*\" >&2\n}",
139
+ "description": "Logging function template",
140
+ "completeBracketPairs": true
141
+ },
142
+ {
143
+ "triggerPattern": "^\\s*die\\s*$",
144
+ "insertText": "die() { echo \"ERROR: $*\" >&2; exit 1; }",
145
+ "description": "Die/error function",
146
+ "completeBracketPairs": true
147
+ },
148
+ {
149
+ "triggerPattern": "^\\s*usage\\s*$",
150
+ "insertText": "usage() {\n\tcat <<-EOF\n\tUsage: $(basename \"$0\") [OPTIONS] ${1:ARGS}\n\n\tOptions:\n\t -h, --help Show this help message\n\t -v, --version Show version\n\t ${2:-f, --file Input file}\n\tEOF\n}",
151
+ "description": "Usage/help function template",
152
+ "completeBracketPairs": true
153
+ },
154
+ {
155
+ "triggerPattern": "^\\s*(?:declare\\s+-[aA]|\\w+=\\()\\s*$",
156
+ "insertText": "(\n\t${1:\"element1\"}\n\t${2:\"element2\"}\n\t${3:\"element3\"}\n)",
157
+ "description": "Array initialization",
158
+ "completeBracketPairs": true
159
+ },
160
+ {
161
+ "triggerPattern": "^\\s*(?:if|\\[\\[).*command\\s+-v\\s*$",
162
+ "insertText": "command -v ${1:cmd} &>/dev/null; then\n\t${2:echo \"$1 is available\"}\nelse\n\techo \"Error: ${1:cmd} is required but not installed.\" >&2\n\texit 1\nfi",
163
+ "description": "Check if command exists",
164
+ "completeBracketPairs": true
165
+ },
166
+ {
167
+ "triggerPattern": "^\\s*find\\s*$",
168
+ "insertText": "find ${1:.} -type ${2:f} -name \"${3:*.txt}\" ${4:-exec echo {} \\;}",
169
+ "description": "Find command template",
170
+ "completeBracketPairs": false
171
+ },
172
+ {
173
+ "triggerPattern": "^\\s*(?:cat|echo).*<<\\s*$",
174
+ "insertText": "EOF\n${1:content}\nEOF",
175
+ "description": "Here-document body",
176
+ "completeBracketPairs": false
177
+ },
178
+ {
179
+ "triggerPattern": "^\\s*mapfile\\s*$",
180
+ "insertText": "mapfile -t ${1:lines} < \"${2:file}\"",
181
+ "description": "Read file into array",
182
+ "completeBracketPairs": false
183
+ }
184
+ ]
185
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "language": "angular",
3
+ "linkedEditingPatterns": [
4
+ {
5
+ "name": "htmlTagPair",
6
+ "openPattern": "<([a-zA-Z][a-zA-Z0-9-]*)(?:\\s[^>]*)?>",
7
+ "closePattern": "</([a-zA-Z][a-zA-Z0-9-]*)\\s*>",
8
+ "description": "Link opening and closing HTML element tags in Angular component templates for synchronized renaming"
9
+ },
10
+ {
11
+ "name": "templateLiteralTagPair",
12
+ "openPattern": "<([a-zA-Z][a-zA-Z0-9-]*)(?:\\s[^>]*)?>",
13
+ "closePattern": "</([a-zA-Z][a-zA-Z0-9-]*)\\s*>",
14
+ "description": "Link opening and closing tags within inline template literals defined in @Component metadata"
15
+ },
16
+ {
17
+ "name": "componentSelectorReference",
18
+ "openPattern": "selector\\s*:\\s*['\"]([a-zA-Z][a-zA-Z0-9-]*)['\"]",
19
+ "closePattern": "</?([a-zA-Z][a-zA-Z0-9-]*)",
20
+ "description": "Link Angular component selector string in @Component metadata with its usage as an HTML tag in parent templates"
21
+ }
22
+ ]
23
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "language": "nestjs",
3
+ "linkedEditingRanges": {
4
+ "patterns": [
5
+ { "description": "Generic type parameter pairs", "openPattern": "<(\\w+)>", "closePattern": "<(\\w+)>", "captureGroup": 1 },
6
+ { "description": "Template literal variable", "pattern": "\\$\\{(\\w+)\\}", "captureGroup": 1 }
7
+ ],
8
+ "wordPattern": "[a-zA-Z_$][a-zA-Z0-9_$]*"
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "language": "nextjs",
3
+ "linkedEditingRanges": {
4
+ "patterns": [
5
+ { "description": "JSX tag pairs", "openPattern": "<([A-Z][a-zA-Z0-9.]*)", "closePattern": "<\\/([A-Z][a-zA-Z0-9.]*)", "captureGroup": 1 },
6
+ { "description": "HTML tag pairs", "openPattern": "<([a-z][a-z0-9]*)", "closePattern": "<\\/([a-z][a-z0-9]*)", "captureGroup": 1 },
7
+ { "description": "Template literal variable", "pattern": "\\$\\{(\\w+)\\}", "captureGroup": 1 }
8
+ ],
9
+ "wordPattern": "[a-zA-Z_$][a-zA-Z0-9_$.]*"
10
+ }
11
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "language": "react",
3
+ "linkedEditingRanges": {
4
+ "wordPattern": "[a-zA-Z_$][a-zA-Z0-9_$]*(?:\\.[a-zA-Z_$][a-zA-Z0-9_$]*)*",
5
+ "patterns": [
6
+ {
7
+ "description": "JSX custom component tags",
8
+ "openPattern": "<([A-Z][a-zA-Z0-9.]*)(?:\\s[^>]*)?>",
9
+ "closePattern": "<\\/([A-Z][a-zA-Z0-9.]*)\\s*>",
10
+ "captureGroup": 1
11
+ },
12
+ {
13
+ "description": "JSX HTML element tags",
14
+ "openPattern": "<([a-z][a-z0-9]*)(?:\\s[^>]*)?>",
15
+ "closePattern": "<\\/([a-z][a-z0-9]*)\\s*>",
16
+ "captureGroup": 1
17
+ },
18
+ {
19
+ "description": "JSX namespaced component tags",
20
+ "openPattern": "<([A-Z][a-zA-Z0-9]*\\.[A-Z][a-zA-Z0-9]*)(?:\\s[^>]*)?>",
21
+ "closePattern": "<\\/([A-Z][a-zA-Z0-9]*\\.[A-Z][a-zA-Z0-9]*)\\s*>",
22
+ "captureGroup": 1
23
+ },
24
+ {
25
+ "description": "Context Provider tags",
26
+ "openPattern": "<(\\w+Context\\.Provider)(?:\\s[^>]*)?>",
27
+ "closePattern": "<\\/(\\w+Context\\.Provider)\\s*>",
28
+ "captureGroup": 1
29
+ },
30
+ {
31
+ "description": "Context Consumer tags",
32
+ "openPattern": "<(\\w+Context\\.Consumer)(?:\\s[^>]*)?>",
33
+ "closePattern": "<\\/(\\w+Context\\.Consumer)\\s*>",
34
+ "captureGroup": 1
35
+ },
36
+ {
37
+ "description": "React.Fragment tags",
38
+ "openPattern": "<(React\\.Fragment)(?:\\s[^>]*)?>",
39
+ "closePattern": "<\\/(React\\.Fragment)\\s*>",
40
+ "captureGroup": 1
41
+ },
42
+ {
43
+ "description": "Fragment shorthand",
44
+ "openPattern": "(<)>",
45
+ "closePattern": "(<)\\/>",
46
+ "captureGroup": 0,
47
+ "note": "Short fragment syntax <> and </>"
48
+ },
49
+ {
50
+ "description": "Suspense tags",
51
+ "openPattern": "<(Suspense)(?:\\s[^>]*)?>",
52
+ "closePattern": "<\\/(Suspense)\\s*>",
53
+ "captureGroup": 1
54
+ },
55
+ {
56
+ "description": "StrictMode tags",
57
+ "openPattern": "<(StrictMode)(?:\\s[^>]*)?>",
58
+ "closePattern": "<\\/(StrictMode)\\s*>",
59
+ "captureGroup": 1
60
+ },
61
+ {
62
+ "description": "Profiler tags",
63
+ "openPattern": "<(Profiler)(?:\\s[^>]*)?>",
64
+ "closePattern": "<\\/(Profiler)\\s*>",
65
+ "captureGroup": 1
66
+ },
67
+ {
68
+ "description": "ErrorBoundary tags",
69
+ "openPattern": "<(ErrorBoundary)(?:\\s[^>]*)?>",
70
+ "closePattern": "<\\/(ErrorBoundary)\\s*>",
71
+ "captureGroup": 1
72
+ }
73
+ ]
74
+ }
75
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "language": "shadcn",
3
+ "linkedEditingPatterns": [
4
+ {
5
+ "name": "jsxOpenCloseTag",
6
+ "openPattern": "<([A-Z][a-zA-Z0-9.]*)(?:\\s[^>]*)?>",
7
+ "closePattern": "</([A-Z][a-zA-Z0-9.]*)>",
8
+ "description": "Link JSX opening and closing component tag names for simultaneous editing"
9
+ },
10
+ {
11
+ "name": "htmlTagPairInJsx",
12
+ "openPattern": "<([a-z][a-z0-9]*)(?:\\s[^>]*)?>",
13
+ "closePattern": "</([a-z][a-z0-9]*)>",
14
+ "description": "Link HTML opening and closing tag names within JSX for simultaneous editing"
15
+ },
16
+ {
17
+ "name": "templateLiteralTag",
18
+ "openPattern": "([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*`",
19
+ "closePattern": "`",
20
+ "description": "Link tagged template literal tag expression with its usage"
21
+ }
22
+ ]
23
+ }
@@ -1,25 +1,25 @@
1
- {
2
- "language": "shell",
3
- "wordPattern": "[a-zA-Z_][a-zA-Z0-9_]*",
4
- "linkedEditingPatterns": [
5
- {
6
- "type": "tag_pair",
7
- "openPattern": "\\bif\\b",
8
- "closePattern": "\\bfi\\b",
9
- "description": "Shell if/fi block pair"
10
- },
11
- {
12
- "type": "tag_pair",
13
- "openPattern": "\\bcase\\b",
14
- "closePattern": "\\besac\\b",
15
- "description": "Shell case/esac block pair"
16
- },
17
- {
18
- "type": "tag_pair",
19
- "openPattern": "\\b(for|while|until)\\b.*\\bdo\\b",
20
- "closePattern": "\\bdone\\b",
21
- "description": "Shell loop do/done block pair"
22
- }
23
- ],
24
- "supported": true
25
- }
1
+ {
2
+ "language": "shell",
3
+ "wordPattern": "[a-zA-Z_][a-zA-Z0-9_]*",
4
+ "linkedEditingPatterns": [
5
+ {
6
+ "type": "tag_pair",
7
+ "openPattern": "\\bif\\b",
8
+ "closePattern": "\\bfi\\b",
9
+ "description": "Shell if/fi block pair"
10
+ },
11
+ {
12
+ "type": "tag_pair",
13
+ "openPattern": "\\bcase\\b",
14
+ "closePattern": "\\besac\\b",
15
+ "description": "Shell case/esac block pair"
16
+ },
17
+ {
18
+ "type": "tag_pair",
19
+ "openPattern": "\\b(for|while|until)\\b.*\\bdo\\b",
20
+ "closePattern": "\\bdone\\b",
21
+ "description": "Shell loop do/done block pair"
22
+ }
23
+ ],
24
+ "supported": true
25
+ }