<idea-plugin visibility="internal">
  <dependencies>
    <module name="intellij.platform.backend"/>
    <module name="intellij.vuejs.common"/>
    <plugin id="com.intellij.modules.xml"/>
    <plugin id="JavaScript"/>
    <plugin id="com.intellij.css"/>
    <plugin id="intellij.webpack"/>
    <plugin id="org.intellij.plugins.postcss"/>
    <module name="intellij.spellchecker"/>
    <module name="intellij.javascript.ultimate"/>
    <!-- region Generated dependencies - run `Generate Product Layouts` to regenerate -->
    <module name="intellij.libraries.commons.text"/>
    <!-- endregion -->
  </dependencies>

  <extensionPoints>
    <extensionPoint qualifiedName="com.intellij.vuejs.containerInfoProvider"
                    interface="org.jetbrains.vuejs.model.source.VueContainerInfoProvider"
                    dynamic="true"/>
    <extensionPoint qualifiedName="com.intellij.vuejs.templateScopesProvider"
                    interface="org.jetbrains.vuejs.codeInsight.template.VueTemplateScopesProvider"
                    dynamic="true"/>
  </extensionPoints>

  <extensions defaultExtensionNs="com.intellij">
    <registryKey defaultValue="true" description="Use bundled Vue service" key="vue.language.server.bundled.enabled"/>
    <registryKey defaultValue="" description="Vue service version for downloading" key="vue.language.server.default.version"/>
    <registryKey defaultValue="" description="Vue TypeScript plugin version for downloading" key="vue.ts.plugin.default.version"/>
    <registryKey defaultValue="true" description="Use bundled Vue TypeScript plugin" key="vue.ts.plugin.bundled.enabled"/>

    <css.embeddedCssProvider implementation="org.jetbrains.vuejs.css.VueEmbeddedCssProvider"/>
    <css.inclusionContext implementation="org.jetbrains.vuejs.css.VueCssInclusionContext"/>
    <html.attributeValueProvider implementation="org.jetbrains.vuejs.codeInsight.attributes.VueCustomAttributeValueProvider"/>
    <metaLanguage implementation="org.jetbrains.vuejs.lang.expr.VueExprMetaLanguage"/>
    <fileType name="Vue.js" extensions="vue" language="Vue" implementationClass="org.jetbrains.vuejs.lang.html.VueFileType"
              fieldName="INSTANCE"/>
    <lang.parserDefinition language="Vue" implementationClass="org.jetbrains.vuejs.lang.html.parser.VueParserDefinition"/>
    <lang.parserDefinition language="VueJS" implementationClass="org.jetbrains.vuejs.lang.expr.parser.VueJSParserDefinition"/>
    <lang.parserDefinition language="VueTS" implementationClass="org.jetbrains.vuejs.lang.expr.parser.VueTSParserDefinition"/>
    <tree.CustomLanguageASTComparator language="Vue" implementationClass="org.jetbrains.vuejs.lang.html.parser.VueASTComparator"/>
    <html.embeddedContentSupport implementation="org.jetbrains.vuejs.lang.html.lexer.VueEmbeddedContentSupport"/>
    <html.embeddedContentSupport implementation="org.jetbrains.vuejs.libraries.i18n.VueI18nEmbeddedContentSupport"/>
    <typedHandler implementation="org.jetbrains.vuejs.editor.VueJSBracesInterpolationTypedHandler"/>
    <lang.braceMatcher language="VueExpr" implementationClass="com.intellij.lang.javascript.highlighting.JSBraceMatcher"/>
    <psi.referenceContributor language="JavaScript" implementation="org.jetbrains.vuejs.codeInsight.refs.VueJSReferenceContributor"/>
    <psi.referenceContributor language="Vue" implementation="org.jetbrains.vuejs.codeInsight.refs.VueReferenceContributor"/>
    <psi.referenceContributor language="JavaScript"
                              implementation="org.jetbrains.vuejs.libraries.vuex.codeInsight.refs.VuexReferenceContributor"/>
    <psi.referenceContributor language="VueExpr" implementation="org.jetbrains.vuejs.css.refs.VueCssReferencesContributor"/>
    <psi.referenceContributor language="CSS" implementation="org.jetbrains.vuejs.css.refs.VueCssReferencesContributor"/>
    <pom.declarationSearcher implementation="org.jetbrains.vuejs.codeInsight.refs.VuePomDeclarationSearcher"/>
    <psi.fileReferenceHelper implementation="org.jetbrains.vuejs.libraries.nuxt.codeInsight.NuxtFileReferenceHelper"/>
    <useScopeEnlarger implementation="org.jetbrains.vuejs.findUsages.VueUseScopeEnlarger"/>
    <implicitUsageProvider implementation="org.jetbrains.vuejs.codeInsight.refs.VueImplicitUsageProvider"/>
    <platform.lsp.serverSupportProvider implementation="org.jetbrains.vuejs.lang.typescript.service.lsp.VueLspServerSupportProvider"/>

    <quoteHandler className="com.intellij.codeInsight.editorActions.HtmlQuoteHandler" fileType="Vue.js"/>
    <copyPastePostProcessor implementation="org.jetbrains.vuejs.codeInsight.imports.VueTemplateExpressionsCopyPasteProcessor"/>
    <copyPastePostProcessor implementation="org.jetbrains.vuejs.codeInsight.imports.VueComponentCopyPasteProcessor"/>

    <lang.syntaxHighlighterFactory language="Vue"
                                   implementationClass="org.jetbrains.vuejs.lang.html.highlighting.VueSyntaxHighlighterFactory"/>

    <xml.xmlExtension implementation="org.jetbrains.vuejs.codeInsight.VueXmlExtension" order="before poly-symbols-react"/>
    <xml.xmlSuppressionProvider implementation="org.jetbrains.vuejs.inspections.VueXmlSuppressionProvider" order="first"/>
    <notificationGroup displayType="BALLOON" id="Vue" isLogByDefault="true"
                       bundle="messages.VueBundle" key="vue.documentation.vue"/>

    <stubIndex implementation="org.jetbrains.vuejs.index.VueComponentsIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueCompositionAppIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueOptionsIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueMixinBindingIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueExtendsBindingIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueGlobalDirectivesIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueUrlIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueIdIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.index.VueGlobalFiltersIndex"/>
    <stubIndex implementation="org.jetbrains.vuejs.libraries.vuex.index.VuexStoreIndex"/>
    <fileBasedIndex implementation="org.jetbrains.vuejs.index.VueEmptyComponentInitializersIndex"/>
    <fileBasedIndex implementation="org.jetbrains.vuejs.index.VueComponentStylesIndex"/>

    <languageStubDefinition language="Vue" implementationClass="org.jetbrains.vuejs.lang.stubs.VueLanguageStubDefinition"/>
    <stubElementRegistryExtension implementation="org.jetbrains.vuejs.lang.stubs.VueStubRegistryExtension"/>

    <langCodeStyleSettingsProvider implementation="org.jetbrains.vuejs.options.VueCodeStyleSettingsProvider"/>
    <fileIndentOptionsProvider implementation="org.jetbrains.vuejs.lang.html.psi.formatter.VueFileIndentOptionsProvider"
                               id="vue" order="before html"/>

    <!-- we store settings under ts since there are only ts server specific options there -->
    <projectConfigurable parentId="settings.typescriptcompiler"
                         instance="org.jetbrains.vuejs.options.VueConfigurable"
                         id="settings.vue"
                         bundle="messages.VueBundle"
                         key="vue.configurable.title"
                         nonDefaultProject="true"
    />

    <postStartupActivity implementation="org.jetbrains.vuejs.lang.html.psi.arrangement.VueArrangementSettingsMigration"/>

    <!-- works in WebStorm and other SmallIDEs -->
    <directoryProjectGenerator implementation="org.jetbrains.vuejs.cli.VueCliProjectGenerator"/>
    <directoryProjectGenerator implementation="org.jetbrains.vuejs.cli.NuxtProjectGenerator"/>
    <!-- works in IDEA -->
    <projectTemplatesFactory implementation="org.jetbrains.vuejs.cli.VueProjectTemplateFactory"/>
    <projectTemplatesFactory implementation="org.jetbrains.vuejs.cli.NuxtProjectTemplateFactory"/>
    <!-- works in new IDEA wizard -->
    <moduleBuilder builderClass="org.jetbrains.vuejs.cli.VueCLIProjectModuleBuilder"/>
    <moduleBuilder builderClass="org.jetbrains.vuejs.cli.NuxtProjectModuleBuilder"/>

    <workspaceModel.fileIndexContributor implementation="org.jetbrains.vuejs.libraries.nuxt.library.NuxtFolderLibraryContributor"/>
    <postStartupActivity implementation="org.jetbrains.vuejs.libraries.nuxt.library.NuxtFolderLibraryStartupActivity"/>

    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueDataFunction"
                     enabledByDefault="true" level="WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.DataFunctionInspection"
                     key="vue.inspection.display.name.data.function"
                     bundle="messages.VueBundle"/>
    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueDuplicateTag"
                     enabledByDefault="true" level="WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.DuplicateTagInspection"
                     key="vue.inspection.display.name.duplicate.tag" bundle="messages.VueBundle"/>
    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueMissingComponentImportInspection"
                     enabledByDefault="true" level="WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.VueMissingComponentImportInspection"
                     key="vue.inspection.display.name.missing.component.import" bundle="messages.VueBundle"/>

    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueUnrecognizedSlot"
                     enabledByDefault="true" level="WEAK WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.VueUnrecognizedSlotInspection"
                     key="vue.inspection.display.name.unrecognized.slot" bundle="messages.VueBundle"/>
    <polySymbols.inspectionToolMapping problemKind="UnknownSymbol" symbolNamespace="html" symbolKind="vue-available-slots"
                                       toolShortName="VueUnrecognizedSlot"/>

    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueUnrecognizedDirective"
                     enabledByDefault="true" level="WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.VueUnrecognizedDirectiveInspection"
                     key="vue.inspection.display.name.unrecognized.directive" bundle="messages.VueBundle"/>
    <polySymbols.inspectionToolMapping problemKind="UnknownSymbol" symbolNamespace="html" symbolKind="vue-directives"
                                       toolShortName="VueUnrecognizedDirective"/>

    <localInspection language="Vue" groupKey="vue.inspection.group.name" shortName="VueDeprecatedSymbol"
                     enabledByDefault="true" level="WARNING"
                     implementationClass="org.jetbrains.vuejs.inspections.VueDeprecatedSymbolInspection"
                     key="vue.inspection.display.name.deprecated.symbol" bundle="messages.VueBundle"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-available-slots"
                                       toolShortName="VueDeprecatedSymbol"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-components"
                                       toolShortName="VueDeprecatedSymbol"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-directives"
                                       toolShortName="VueDeprecatedSymbol"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-special-properties"
                                       toolShortName="VueDeprecatedSymbol"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-file-top-elements"
                                       toolShortName="VueDeprecatedSymbol"/>
    <polySymbols.inspectionToolMapping problemKind="DeprecatedSymbol" symbolNamespace="html" symbolKind="vue-model-modifiers"
                                       toolShortName="VueDeprecatedSymbol"/>

    <polySymbols.documentationCustomizer implementation="org.jetbrains.vuejs.web.VueDocumentationCustomizer"/>

    <intentionAction>
      <language>Vue</language>
      <className>org.jetbrains.vuejs.intentions.extractComponent.VueExtractComponentIntention</className>
      <!--suppress PluginXmlI18n -->
      <category>VueJS</category>
    </intentionAction>
    <intentionAction>
      <language>Vue</language>
      <className>org.jetbrains.vuejs.intentions.VueExpandVModelIntention</className>
      <!--suppress PluginXmlI18n -->
      <category>VueJS</category>
    </intentionAction>
    <intentionAction>
      <language>Vue</language>
      <className>org.jetbrains.vuejs.intentions.VueImportComponentIntention</className>
      <!--suppress PluginXmlI18n -->
      <category>VueJS</category>
    </intentionAction>

    <!--suppress PluginXmlValidity -->
    <multiHostInjector implementation="org.jetbrains.vuejs.editor.VueInjector"
                       order="before JSConfigurationInjector, before PolySymbolsHtmlText, after TemporaryPlacesInjector"
                       id="VueInjector"/>

    <internalFileTemplate name="Vue Composition API Component"/>
    <internalFileTemplate name="Vue Options API Component"/>
    <internalFileTemplate name="Vue Class API Component"/>

    <createFromTemplateHandler implementation="org.jetbrains.vuejs.VueCreateFromTemplateHandler"/>
    <defaultTemplatePropertiesProvider implementation="org.jetbrains.vuejs.VueDefaultTemplatePropertiesProvider"/>

    <spellchecker.bundledDictionaryProvider implementation="org.jetbrains.vuejs.spellchecker.VueSpellcheckingDictionaryProvider"/>

    <liveTemplateContext contextId="Vue" implementation="org.jetbrains.vuejs.liveTemplate.VueBaseLiveTemplateContextType"/>
    <liveTemplateContext contextId="VUE_SCRIPT" baseContextId="Vue"
                         implementation="org.jetbrains.vuejs.liveTemplate.VueScriptLiveTemplateContextType"/>
    <liveTemplateContext contextId="VUE_COMPONENT_DESCRIPTOR" baseContextId="Vue"
                         implementation="org.jetbrains.vuejs.liveTemplate.VueComponentDescriptorLiveTemplateContextType"/>
    <liveTemplateContext contextId="VUE_TEMPLATE" baseContextId="Vue"
                         implementation="org.jetbrains.vuejs.liveTemplate.VueTemplateLiveTemplateContextType"/>
    <liveTemplateContext contextId="VUE_INSIDE_TAG" baseContextId="Vue"
                         implementation="org.jetbrains.vuejs.liveTemplate.VueInsideTagLiveTemplateContextType"/>
    <liveTemplateContext contextId="VUE_TOP_LEVEL" baseContextId="Vue"
                         implementation="org.jetbrains.vuejs.liveTemplate.VueTopLevelLiveTemplateContextType"/>
    <defaultLiveTemplates file="liveTemplates/Vue"/>
    <referencesSearch implementation="org.jetbrains.vuejs.findUsages.VueReferenceSearcher"/>
    <completion.contributor language="any"
                            implementationClass="org.jetbrains.vuejs.codeInsight.VueCompletionContributor"
                            id="VueCompletionContributor"
                            order="before JSPatternBasedCompletionContributor, before JSCompletionContributor, before xmlNonFirst, before cssClassOrIdReferenceCompletionContributor"/>
    <completion.contributor language="JavaScript"
                            implementationClass="org.jetbrains.vuejs.libraries.vuex.codeInsight.VuexCompletionContributor"
                            id="VuexCompletionContributor"/>
    <typedHandler implementation="org.jetbrains.vuejs.codeInsight.completion.VueAutoPopupHandler"/>
    <include.provider implementation="org.jetbrains.vuejs.index.VueFileIncludeProvider"/>

    <lang.formatter language="Vue" implementationClass="org.jetbrains.vuejs.lang.html.psi.formatter.VueFormattingModelBuilder"/>
    <lang.formatter language="VueExpr" implementationClass="org.jetbrains.vuejs.lang.expr.psi.formatter.VueExprFormattingModelBuilder"/>
    <lang.rearranger language="Vue" implementationClass="org.jetbrains.vuejs.lang.html.psi.arrangement.VueRearranger"/>
    <multiLangCommenter implementation="org.jetbrains.vuejs.editor.VueCommenterProvider"/>

    <lang.syntaxHighlighterFactory language="VueJS"
                                   implementationClass="org.jetbrains.vuejs.lang.expr.highlighting.VueJSHighlighterFactory"/>
    <lang.syntaxHighlighterFactory language="VueTS"
                                   implementationClass="org.jetbrains.vuejs.lang.expr.highlighting.VueTSHighlighterFactory"/>
    <idIndexer filetype="Vue.js" implementationClass="org.jetbrains.vuejs.lang.html.index.VueIdIndexer"/>
    <todoIndexer filetype="Vue.js" implementationClass="org.jetbrains.vuejs.lang.html.index.VueTodoIndexer"/>

    <codeInsight.parameterInfo language="VueExpr" implementationClass="com.intellij.javascript.JSParameterInfoHandler"/>
    <codeInsight.parameterNameHints language="Vue"
                                    implementationClass="org.jetbrains.vuejs.editor.VueInlayParameterHintsProvider"/>

    <eslint.ruleMappersFactory implementation="org.jetbrains.vuejs.libraries.eslint.VueEslintRuleMappersFactory"/>

    <polySymbols.psiReferenceProvider hostElementClass="com.intellij.psi.xml.XmlAttributeValue"
                                      hostLanguage="HtmlCompatible"
                                      implementationClass="org.jetbrains.vuejs.web.VueDeprecatedSlotAttributeReferenceProvider"/>
    <polySymbols.declarationProvider implementation="org.jetbrains.vuejs.web.VueSymbolDeclarationProvider"/>
    <vetoRenameCondition implementation="org.jetbrains.vuejs.web.VueRenameHandlerVeto"/>

    <lang.elementManipulator forClass="org.jetbrains.vuejs.model.VueFakeSrcAttributeValue"
                             implementationClass="org.jetbrains.vuejs.model.VueFakeScrAttributeValueManipulator"/>

    <polySymbols.framework id="vue" implementation="org.jetbrains.vuejs.web.VueFramework"/>
    <polySymbols.context kind="framework" name="vue" implementation="org.jetbrains.vuejs.context.VueFileContextProvider"
                         id="vue.file"/>

    <polySymbols.webTypes source="web-types/vue@1.0.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.0.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.1.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.1.8.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.2.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.3.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.4.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.5.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.6.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@2.7.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.0.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.1.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.2.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.3.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.4.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue@3.5.0.web-types.json" enableByDefault="true"/>
    <polySymbols.webTypes source="web-types/vue@3.6.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue-i18n@0.0.0.web-types.json"/>
    <polySymbols.webTypes source="web-types/vue-contexts@0.0.0.web-types.json" enableByDefault="true"/>
    <polySymbols.webTypes source="web-types/nuxt@0.0.0.web-types.json"/>

    <polySymbols.queryConfigurator implementation="org.jetbrains.vuejs.web.VueSymbolQueryConfigurator" id="vue"/>
    <polySymbols.queryScopeContributor implementation="org.jetbrains.vuejs.web.VueSymbolQueryScopeContributor" id="vue"/>
    <polySymbols.queryScopeContributor implementation="org.jetbrains.vuejs.libraries.i18n.VueI18NSymbolQueryScopeContributor"
                                       id="vue-i18n"/>

    <polySymbols.queryResultsCustomizerFactory implementation="org.jetbrains.vuejs.web.VueSymbolQueryResultsCustomizer$Factory"/>
    <polySymbols.webTypes.filter name="vue-bind" implementation="org.jetbrains.vuejs.web.VueBindFilter"/>
    <polySymbols.codeCompletionItemCustomizer
      implementation="org.jetbrains.vuejs.web.VueCodeCompletionItemCustomizer"/>

    <vuejs.templateScopesProvider
      implementation="org.jetbrains.vuejs.codeInsight.template.VueStandardSymbolsScopesProvider"
      id="standardSymbols"
      order="before templateElements"/>
    <vuejs.templateScopesProvider
      implementation="org.jetbrains.vuejs.codeInsight.template.VueTemplateElementsScopeProvider"
      id="templateElements"/>
    <vuejs.templateScopesProvider
      implementation="org.jetbrains.vuejs.codeInsight.template.VueScriptSetupScopeProvider"
      id="scriptSetupScope"
      order="after templateElements"/>
    <vuejs.templateScopesProvider
      implementation="org.jetbrains.vuejs.codeInsight.template.VueContainerScopeProvider"
      id="containerScope"
      order="after scriptSetupScope"/>

    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.model.source.VueDefaultContainerInfoProvider"
                                 id="default"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.model.source.VueComponentTemplateInfoProvider"
                                 id="defaultTemplate"
                                 order="after default, before decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.model.source.VueCompositionInfoProvider"
                                 id="composition"
                                 order="after default, before decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.model.source.VueScriptSetupInfoProvider"
                                 id="scriptSetup"
                                 order="after default, before decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.componentDecorator.VueDecoratedComponentInfoProvider"
                                 id="decoratedComponent"
                                 order="after default"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.vuex.model.component.VuexBasicComponentInfoProvider"
                                 id="vuexBasic"
                                 order="after decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.vuex.model.component.VuexDecoratedComponentInfoProvider"
                                 id="vuexDecoratedComponent"
                                 order="after decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.templateLoader.TemplateLoaderComponentInfoProvider"
                                 id="templateLoader"
                                 order="after defaultTemplate"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.vuelidate.VuelidateContainerInfoProvider"
                                 id="vuelidate"
                                 order="after decoratedComponent"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.nuxt.model.NuxtComponentProvider"
                                 id="nuxt"/>
    <vuejs.containerInfoProvider implementation="org.jetbrains.vuejs.libraries.cssModules.VueCssModulesInfoProvider"
                                 id="css-modules"/>

    <platform.backend.documentation.psiTargetProvider implementation="org.jetbrains.vuejs.web.VuePsiDocumentationProvider"/>

    <codeInsight.codeVisionSettingsPreviewLanguage language="Vue" modelId="component.usage"/>
  </extensions>

  <actions resource-bundle="messages.VueBundle">
    <action class="org.jetbrains.vuejs.CreateVueSingleFileComponentAction" id="CreateVueSingleFileComp"
            icon="org.jetbrains.vuejs.VuejsIcons.Vue">
      <add-to-group group-id="NewWebDevelopment" anchor="before" relative-to-action="NewJavaScriptFile"/>
    </action>
    <action id="VueExtractComponentAction"
            class="org.jetbrains.vuejs.intentions.extractComponent.VueExtractComponentAction"
            icon="org.jetbrains.vuejs.VuejsIcons.Vue">
      <add-to-group group-id="IntroduceActionsGroup" anchor="last"/>
    </action>
  </actions>

  <applicationListeners>
    <listener class="org.jetbrains.vuejs.lang.html.VueFileType$FileTypeChangeListener"
              topic="com.intellij.openapi.fileTypes.FileTypeListener"/>
  </applicationListeners>

  <extensions defaultExtensionNs="JavaScript">
    <elementScopeProvider implementation="org.jetbrains.vuejs.VueElementResolveScopeProvider"/>
    <indexedFileTypeProvider implementation="org.jetbrains.vuejs.lang.html.VueIndexedFileTypeProvider"/>

    <frameworkIndexingHandler implementation="org.jetbrains.vuejs.index.VueFrameworkHandler" version="39"/>
    <frameworkIndexingHandler implementation="org.jetbrains.vuejs.libraries.vuex.index.VuexFrameworkHandler" version="7"/>
    <frameworkIndexingHandler implementation="org.jetbrains.vuejs.libraries.templateLoader.TemplateLoaderFrameworkHandler" version="1"/>

    <intentionAndInspectionFilter language="VueExpr" implementationClass="org.jetbrains.vuejs.inspections.VueInspectionFilter"/>
    <inheritedLanguagesConfigurableProvider language="VueExpr"
                                            implementationClass="org.jetbrains.vuejs.codeInsight.VueExprLanguageConfigurableProvider"/>
    <dialectSpecificHandlersFactory language="VueJS" implementationClass="org.jetbrains.vuejs.codeInsight.VueJSSpecificHandlersFactory"/>
    <dialectSpecificHandlersFactory language="VueTS" implementationClass="org.jetbrains.vuejs.codeInsight.VueTSSpecificHandlersFactory"/>
    <!-- control flow, strict null checks -->
    <dialectSpecificHandlersFactory language="Vue" implementationClass="org.jetbrains.vuejs.codeInsight.VueFileSpecificHandlersFactory"/>
    <handlersFactory language="VueJS" implementationClass="org.jetbrains.vuejs.codeInsight.VueJSHandlersFactory"/>
    <handlersFactory language="VueTS" implementationClass="org.jetbrains.vuejs.codeInsight.VueTSHandlersFactory"/>
    <handlersFactory language="Vue"
                     implementationClass="org.jetbrains.vuejs.codeInsight.VueJSHandlersFactory"/> <!-- JSImportOnCopyCollectors -->
    <analysisHandlersFactory language="VueJS" implementationClass="org.jetbrains.vuejs.inspections.VueJSAnalysisHandlersFactory"/>
    <analysisHandlersFactory language="VueTS" implementationClass="org.jetbrains.vuejs.inspections.VueTSAnalysisHandlersFactory"/>
    <frameworkSpecificHandler language="JavaScript"
                              implementationClass="org.jetbrains.vuejs.libraries.nuxt.codeInsight.NuxtFrameworkSpecificHandler"/>
    <frameworkSpecificHandler language="JavaScript"
                              implementationClass="org.jetbrains.vuejs.codeInsight.VueFrameworkSpecificHandler"/>
    <frameworkSpecificHandler language="JavaScript"
                              implementationClass="org.jetbrains.vuejs.codeInsight.VueFrameworkInsideScriptSpecificHandler"/>
    <frameworkSpecificHandler language="JavaScript"
                              implementationClass="org.jetbrains.vuejs.libraries.vuex.codeInsight.VuexFrameworkSpecificHandler"/>
    <tsImportResolver implementation="org.jetbrains.vuejs.lang.typescript.VueTypeScriptImportsResolverProvider" order="first"/>
    <importModulePathStrategy order="after TypeScript"
                              implementation="org.jetbrains.vuejs.lang.VueImportModulePathStrategy"/>
    <languageServiceProvider order="first" implementation="org.jetbrains.vuejs.lang.typescript.service.VueLanguageServiceProvider"/>
    <importCandidatesFactory implementation="org.jetbrains.vuejs.codeInsight.imports.VueScriptCandidatesProviderFactory"/>
    <importCandidatesFactory implementation="org.jetbrains.vuejs.codeInsight.imports.VueComponentImportCandidatesProviderFactory"/>
    <scanningFileListenerContributor implementation="org.jetbrains.vuejs.libraries.nuxt.library.NuxtFolderScanningListenerContributor"/>
    <moduleExportsProvider id="vue" implementation="org.jetbrains.vuejs.codeInsight.imports.VueModuleExportsProvider"/>
    <componentUsageProvider language="Vue" implementationClass="org.jetbrains.vuejs.codeInsight.hints.VueComponentUsageProvider"/>
    <typeScriptCompilerTypeFilter implementation="org.jetbrains.vuejs.libraries.nuxt.codeInsight.NuxtTypeScriptTypeFilter"/>
  </extensions>

  <extensions defaultExtensionNs="intellij.webpack">
    <webpackLocator implementation="org.jetbrains.vuejs.cli.VueCliWebpackConfigLocator"/>
    <webpackLocator implementation="org.jetbrains.vuejs.libraries.nuxt.codeInsight.NuxtWebpackConfigLocator"/>
  </extensions>
</idea-plugin>