{
	"name": "Svelte Component",
	"scopeName": "source.svelte",
	"fileTypes": ["svelte"],
	"uuid": "7582b62f-51d9-4a84-8c8d-fc189530faf6",
	"injections": {
		"L:meta.script.svelte meta.lang.javascript - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.js",
					"patterns": [
						{
							"include": "source.js"
						}
					]
				}
			]
		},
		"L:meta.script.svelte (meta.lang.ts | meta.lang.typescript) - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.ts",
					"patterns": [
						{
							"include": "source.ts"
						}
					]
				}
			]
		},
		"L:meta.script.svelte meta.lang.coffee - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.coffee",
					"patterns": [
						{
							"include": "source.coffee"
						}
					]
				}
			]
		},
		"L:meta.script.svelte - meta.lang - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.js",
					"patterns": [
						{
							"include": "source.js"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.stylus - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.stylus",
					"patterns": [
						{
							"include": "source.stylus"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.sass - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.sass",
					"patterns": [
						{
							"include": "source.sass"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.css - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.css",
					"patterns": [
						{
							"include": "source.css"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.scss - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.css.scss",
					"patterns": [
						{
							"include": "source.css.scss"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.less - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.css.less",
					"patterns": [
						{
							"include": "source.css.less"
						}
					]
				}
			]
		},
		"L:meta.style.svelte meta.lang.postcss - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.css.postcss",
					"patterns": [
						{
							"include": "source.css.postcss"
						}
					]
				}
			]
		},
		"L:meta.style.svelte - meta.lang - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "source.css",
					"patterns": [
						{
							"include": "source.css"
						}
					]
				}
			]
		},
		"L:meta.template.svelte meta.lang.pug - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)(?!</)",
					"end": "(?=</)",
					"name": "meta.embedded.block.svelte",
					"contentName": "text.pug",
					"patterns": [
						{
							"include": "text.pug"
						}
					]
				}
			]
		},
		"L:meta.template.svelte - meta.lang - (meta source)": {
			"patterns": [
				{
					"begin": "(?<=>)\\s",
					"end": "(?=</template)",
					"patterns": [
						{
							"include": "#scope"
						}
					]
				}
			]
		},
		"L:(source.ts, source.js, source.coffee)": {
			"patterns": [
				{
					"match": "(?<![_$[:alnum:]])\\$(?=[_[:alpha:]][_$[:alnum:]]*)",
					"name": "punctuation.definition.variable.svelte"
				},
				{
					"match": "(?<![_$[:alnum:]])(\\$\\$)(?=props|restProps|slots)",
					"name": "punctuation.definition.variable.svelte"
				}
			]
		}
	},
	"patterns": [
		{
			"include": "#scope"
		}
	],
	"repository": {
		"scope": {
			"patterns": [
				{
					"include": "#comments"
				},
				{
					"include": "#special-tags"
				},
				{
					"include": "#tags"
				},
				{
					"include": "#interpolation"
				},
				{
					"begin": "(?<=>|})",
					"end": "(?=<|{)",
					"name": "text.svelte"
				}
			]
		},
		"comments": {
			"begin": "<!--",
			"end": "-->",
			"captures": {
				"0": {
					"name": "punctuation.definition.comment.svelte"
				}
			},
			"name": "comment.block.svelte",
			"patterns": [
				{
					"begin": "(@)(component)",
					"beginCaptures": {
						"1": {
							"name": "punctuation.definition.keyword.svelte"
						},
						"2": {
							"name": "storage.type.class.component.svelte keyword.declaration.class.component.svelte"
						}
					},
					"end": "(?=-->)",
					"contentName": "comment.block.documentation.svelte",
					"patterns": [
						{
							"match": ".*?(?=-->)",
							"captures": {
								"0": {
									"patterns": [
										{
											"include": "text.html.markdown"
										}
									]
								}
							}
						},
						{
							"include": "text.html.markdown"
						}
					]
				},
				{
					"match": "\\G-?>|<!--(?!>)|<!-(?=-->)|--!>",
					"name": "invalid.illegal.characters-not-allowed-here.svelte"
				}
			]
		},
		"destructuring": {
			"patterns": [
				{
					"begin": "(?={)",
					"end": "(?<=})",
					"name": "meta.embedded.expression.svelte source.ts",
					"patterns": [
						{
							"include": "source.ts#object-binding-pattern"
						}
					]
				},
				{
					"begin": "(?=\\[)",
					"end": "(?<=\\])",
					"name": "meta.embedded.expression.svelte source.ts",
					"patterns": [
						{
							"include": "source.ts#array-binding-pattern"
						}
					]
				}
			]
		},
		"interpolation": {
			"patterns": [
				{
					"begin": "\\{",
					"end": "\\}",
					"beginCaptures": {
						"0": {
							"name": "punctuation.section.embedded.begin.svelte"
						}
					},
					"endCaptures": {
						"0": {
							"name": "punctuation.section.embedded.end.svelte"
						}
					},
					"contentName": "meta.embedded.expression.svelte source.ts",
					"patterns": [
						{
							"begin": "\\G\\s*(?={)",
							"end": "(?<=})",
							"patterns": [
								{
									"include": "source.ts#object-literal"
								}
							]
						},
						{
							"include": "source.ts"
						}
					]
				}
			]
		},
		"special-tags": {
			"patterns": [
				{
					"include": "#special-tags-void"
				},
				{
					"include": "#special-tags-block-begin"
				},
				{
					"include": "#special-tags-block-end"
				}
			]
		},
		"special-tags-keywords": {
			"match": "([#@/:])(else\\s+if|[a-z]*)",
			"captures": {
				"1": {
					"name": "punctuation.definition.keyword.svelte"
				},
				"2": {
					"patterns": [
						{
							"match": "if|else\\s+if|else",
							"name": "keyword.control.conditional.svelte"
						},
						{
							"match": "each|key",
							"name": "keyword.control.svelte"
						},
						{
							"match": "await|then|catch",
							"name": "keyword.control.flow.svelte"
						},
						{
							"match": "html",
							"name": "keyword.other.svelte"
						},
						{
							"match": "debug",
							"name": "keyword.other.debugger.svelte"
						}
					]
				}
			}
		},
		"special-tags-modes": {
			"patterns": [
				{
					"begin": "(?<=(if|key|then|catch|html).*?)\\G",
					"end": "(?=})",
					"name": "meta.embedded.expression.svelte source.ts",
					"patterns": [
						{
							"include": "source.ts"
						}
					]
				},
				{
					"begin": "(?<=each.*?)\\G",
					"end": "(?=})",
					"patterns": [
						{
							"begin": "\\G\\s*?(?=\\S)",
							"end": "(?=(?:^\\s*|\\s+)(as))",
							"contentName": "meta.embedded.expression.svelte source.ts",
							"patterns": [
								{
									"include": "source.ts"
								}
							]
						},
						{
							"begin": "(as)",
							"beginCaptures": {
								"1": {
									"name": "keyword.control.as.svelte"
								}
							},
							"end": "(?=})",
							"patterns": [
								{
									"include": "#destructuring"
								},
								{
									"begin": "\\(",
									"end": "\\)|(?=})",
									"captures": {
										"0": {
											"name": "meta.brace.round.svelte"
										}
									},
									"contentName": "meta.embedded.expression.svelte source.ts",
									"patterns": [
										{
											"include": "source.ts"
										}
									]
								},
								{
									"match": "(\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*)",
									"captures": {
										"1": {
											"name": "meta.embedded.expression.svelte source.ts",
											"patterns": [
												{
													"include": "source.ts"
												}
											]
										}
									}
								},
								{
									"match": ",",
									"name": "punctuation.separator.svelte"
								}
							]
						}
					]
				},
				{
					"begin": "(?<=await.*?)\\G",
					"end": "(?=})",
					"patterns": [
						{
							"begin": "\\G\\s*?(?=\\S)",
							"end": "\\s+(then)|(?=})",
							"endCaptures": {
								"1": {
									"name": "keyword.control.flow.svelte"
								}
							},
							"contentName": "meta.embedded.expression.svelte source.ts",
							"patterns": [
								{
									"include": "source.ts"
								}
							]
						},
						{
							"begin": "(?<=then\\b)",
							"end": "(?=})",
							"contentName": "meta.embedded.expression.svelte source.ts",
							"patterns": [
								{
									"include": "source.ts"
								}
							]
						}
					]
				},
				{
					"begin": "(?<=debug.*?)\\G",
					"end": "(?=})",
					"patterns": [
						{
							"match": "[_$[:alpha:]][_$[:alnum:]]*",
							"captures": {
								"0": {
									"name": "meta.embedded.expression.svelte source.ts",
									"patterns": [
										{
											"include": "source.ts"
										}
									]
								}
							}
						},
						{
							"match": ",",
							"name": "punctuation.separator.svelte"
						}
					]
				}
			]
		},
		"special-tags-void": {
			"begin": "({)\\s*((?:[@:])(else\\s+if|[a-z]*))",
			"beginCaptures": {
				"1": {
					"name": "punctuation.definition.block.begin.svelte"
				},
				"2": {
					"patterns": [
						{
							"include": "#special-tags-keywords"
						}
					]
				}
			},
			"end": "\\}",
			"endCaptures": {
				"0": {
					"name": "punctuation.definition.block.end.svelte"
				}
			},
			"name": "meta.special.$3.svelte",
			"patterns": [
				{
					"include": "#special-tags-modes"
				}
			]
		},
		"special-tags-block-begin": {
			"begin": "({)\\s*(#([a-z]*))",
			"end": "(})",
			"name": "meta.special.$3.svelte meta.special.start.svelte",
			"beginCaptures": {
				"1": {
					"name": "punctuation.definition.block.begin.svelte"
				},
				"2": {
					"patterns": [
						{
							"include": "#special-tags-keywords"
						}
					]
				}
			},
			"endCaptures": {
				"0": {
					"name": "punctuation.definition.block.end.svelte"
				}
			},
			"patterns": [
				{
					"include": "#special-tags-modes"
				}
			]
		},
		"special-tags-block-end": {
			"begin": "({)\\s*(/([a-z]*))",
			"end": "(})",
			"name": "meta.special.$3.svelte meta.special.end.svelte",
			"beginCaptures": {
				"1": {
					"name": "punctuation.definition.block.begin.svelte"
				},
				"2": {
					"patterns": [
						{
							"include": "#special-tags-keywords"
						}
					]
				}
			},
			"endCaptures": {
				"1": {
					"name": "punctuation.definition.block.end.svelte"
				}
			}
		},
		"attributes": {
			"patterns": [
				{
					"include": "#attributes-directives"
				},
				{
					"include": "#attributes-keyvalue"
				},
				{
					"include": "#attributes-interpolated"
				}
			]
		},
		"attributes-interpolated": {
			"begin": "(?<!:|=)\\s*({)",
			"end": "(\\})",
			"captures": {
				"1": {
					"name": "entity.other.attribute-name.svelte"
				}
			},
			"contentName": "meta.embedded.expression.svelte source.ts",
			"patterns": [
				{
					"include": "source.ts"
				}
			]
		},
		"attributes-keyvalue": {
			"begin": "([_$[:alpha:]][_\\-$[:alnum:]]*)",
			"beginCaptures": {
				"1": {
					"name": "entity.other.attribute-name.svelte"
				}
			},
			"end": "(?=\\s*+[^=\\s])",
			"name": "meta.attribute.$1.svelte",
			"patterns": [
				{
					"include": "#attributes-value"
				}
			]
		},
		"attributes-value": {
			"begin": "=",
			"beginCaptures": {
				"0": {
					"name": "punctuation.separator.key-value.svelte"
				}
			},
			"end": "(?<=[^\\s=])(?!\\s*=)|(?=/?>)",
			"patterns": [
				{
					"include": "#interpolation"
				},
				{
					"match": "([0-9._]+[\\w]{,4})(?=\\s|/?>)",
					"name": "constant.numeric.decimal.svelte",
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				},
				{
					"match": "([^\\s\"'=<>`/]|/(?!>))+",
					"name": "string.unquoted.svelte",
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				},
				{
					"begin": "(['\"])",
					"end": "\\1",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.string.begin.svelte"
						}
					},
					"endCaptures": {
						"0": {
							"name": "punctuation.definition.string.end.svelte"
						}
					},
					"name": "string.quoted.svelte",
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				}
			]
		},
		"attributes-directives-keywords": {
			"patterns": [
				{
					"match": "on|use|bind",
					"name": "keyword.control.svelte"
				},
				{
					"match": "transition|in|out|animate",
					"name": "keyword.other.animation.svelte"
				},
				{
					"match": "let",
					"name": "storage.type.svelte"
				},
				{
					"match": "class",
					"name": "entity.other.attribute-name.svelte"
				}
			]
		},
		"attributes-directives-types": {
			"patterns": [
				{
					"match": "(?<=(on):).*$",
					"name": "entity.name.type.svelte"
				},
				{
					"match": "(?<=(bind):).*$",
					"name": "variable.parameter.svelte"
				},
				{
					"match": "(?<=(use|transition|in|out|animate):).*$",
					"name": "variable.function.svelte"
				},
				{
					"match": "(?<=(let|class):).*$",
					"name": "variable.parameter.svelte"
				}
			]
		},
		"attributes-directives-types-assigned": {
			"patterns": [
				{
					"match": "(?<=(bind):)this$",
					"name": "variable.language.svelte"
				},
				{
					"match": "(?<=(bind):).*$",
					"name": "entity.name.type.svelte"
				},
				{
					"match": "(?<=(class):).*$",
					"name": "entity.other.attribute-name.class.svelte"
				},
				{
					"include": "#attributes-directives-types"
				}
			]
		},
		"attributes-directives": {
			"begin": "(?<!<)(on|use|bind|transition|in|out|animate|let|class)(:)(?:([_$[:alpha:]][_\\-$[:alnum:]]*(?=\\s*=))|([_$[:alpha:]][_\\-$[:alnum:]]*))((\\|\\w+)*)",
			"beginCaptures": {
				"1": {
					"patterns": [
						{
							"include": "#attributes-directives-keywords"
						}
					]
				},
				"2": {
					"name": "punctuation.definition.keyword.svelte"
				},
				"3": {
					"patterns": [
						{
							"include": "#attributes-directives-types-assigned"
						}
					]
				},
				"4": {
					"patterns": [
						{
							"include": "#attributes-directives-types"
						}
					]
				},
				"5": {
					"patterns": [
						{
							"match": "\\w+",
							"name": "support.function.svelte"
						},
						{
							"match": "\\|",
							"name": "punctuation.separator.svelte"
						}
					]
				}
			},
			"end": "(?=\\s*+[^=\\s])",
			"name": "meta.directive.$1.svelte",
			"patterns": [
				{
					"include": "#attributes-value"
				}
			]
		},
		"tags": {
			"patterns": [
				{
					"include": "#tags-lang"
				},
				{
					"include": "#tags-void"
				},
				{
					"include": "#tags-general-end"
				},
				{
					"include": "#tags-general-start"
				}
			]
		},
		"tags-name": {
			"patterns": [
				{
					"match": "(svelte)(:)([a-z][\\w0-9:-]*)",
					"captures": {
						"1": {
							"name": "keyword.control.svelte"
						},
						"2": {
							"name": "punctuation.definition.keyword.svelte"
						},
						"3": {
							"name": "entity.name.tag.svelte"
						}
					}
				},
				{
					"match": "slot",
					"name": "keyword.control.svelte"
				},
				{
					"match": "[A-Z][a-zA-Z0-9_]*",
					"name": "support.class.component.svelte"
				},
				{
					"match": "[a-z][\\w0-9:]*-[\\w0-9:-]*",
					"name": "meta.tag.custom.svelte entity.name.tag.svelte"
				},
				{
					"match": "[a-z][\\w0-9:-]*",
					"name": "entity.name.tag.svelte"
				}
			]
		},
		"tags-start-attributes": {
			"begin": "\\G",
			"end": "(?=/?>)",
			"name": "meta.tag.start.svelte",
			"patterns": [
				{
					"include": "#attributes"
				}
			]
		},
		"tags-lang-start-attributes": {
			"begin": "\\G",
			"end": "(?=/>)|>",
			"endCaptures": {
				"0": {
					"name": "punctuation.definition.tag.end.svelte"
				}
			},
			"name": "meta.tag.start.svelte",
			"patterns": [
				{
					"include": "#attributes"
				}
			]
		},
		"tags-start-node": {
			"match": "(<)([^/\\s>/]*)",
			"captures": {
				"1": {
					"name": "punctuation.definition.tag.begin.svelte"
				},
				"2": {
					"patterns": [
						{
							"include": "#tags-name"
						}
					]
				}
			},
			"name": "meta.tag.start.svelte"
		},
		"tags-end-node": {
			"match": "(</)(.*?)\\s*(>)|(/>)",
			"captures": {
				"1": {
					"name": "meta.tag.end.svelte punctuation.definition.tag.begin.svelte"
				},
				"2": {
					"name": "meta.tag.end.svelte",
					"patterns": [
						{
							"include": "#tags-name"
						}
					]
				},
				"3": {
					"name": "meta.tag.end.svelte punctuation.definition.tag.end.svelte"
				},
				"4": {
					"name": "meta.tag.start.svelte punctuation.definition.tag.end.svelte"
				}
			}
		},
		"tags-lang": {
			"begin": "<(script|style|template)",
			"end": "</\\1\\s*>|/>",
			"beginCaptures": {
				"0": {
					"patterns": [
						{
							"include": "#tags-start-node"
						}
					]
				}
			},
			"endCaptures": {
				"0": {
					"patterns": [
						{
							"include": "#tags-end-node"
						}
					]
				}
			},
			"name": "meta.$1.svelte",
			"patterns": [
				{
					"begin": "\\G(?=\\s*(type|lang)\\s*=\\s*(['\"]|)(?:text/)?(\\w+)\\2)",
					"end": "(?=</|/>)",
					"name": "meta.lang.$3.svelte",
					"patterns": [
						{
							"include": "#tags-lang-start-attributes"
						}
					]
				},
				{
					"include": "#tags-lang-start-attributes"
				}
			]
		},
		"tags-void": {
			"begin": "(<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\\s|/?>)",
			"beginCaptures": {
				"1": {
					"name": "punctuation.definition.tag.begin.svelte"
				},
				"2": {
					"name": "entity.name.tag.svelte"
				}
			},
			"end": "/?>",
			"endCaptures": {
				"0": {
					"name": "punctuation.definition.tag.begin.svelte"
				}
			},
			"name": "meta.tag.void.svelte",
			"patterns": [
				{
					"include": "#attributes"
				}
			]
		},
		"tags-general-start": {
			"begin": "(<)([^/\\s>/]*)",
			"end": "(/?>)",
			"beginCaptures": {
				"0": {
					"patterns": [
						{
							"include": "#tags-start-node"
						}
					]
				}
			},
			"endCaptures": {
				"1": {
					"name": "meta.tag.start.svelte punctuation.definition.tag.end.svelte"
				}
			},
			"name": "meta.scope.tag.$2.svelte",
			"patterns": [
				{
					"include": "#tags-start-attributes"
				}
			]
		},
		"tags-general-end": {
			"begin": "(</)([^/\\s>]*)",
			"end": "(>)",
			"beginCaptures": {
				"1": {
					"name": "meta.tag.end.svelte punctuation.definition.tag.begin.svelte"
				},
				"2": {
					"name": "meta.tag.end.svelte",
					"patterns": [
						{
							"include": "#tags-name"
						}
					]
				}
			},
			"endCaptures": {
				"1": {
					"name": "meta.tag.end.svelte punctuation.definition.tag.end.svelte"
				}
			},
			"name": "meta.scope.tag.$2.svelte"
		}
	}
}
