+}
+
+export const definitions: Definitions = {
+ files: {
+ 'pnpm-debug.log': 'pnpm',
+ 'pnpm-lock.yaml': 'pnpm',
+ 'pnpm-workspace.yaml': 'pnpm',
+ 'biome.json': 'biome',
+ 'bun.lockb': 'bun',
+ 'COMMIT_EDITMSG': 'seti:git',
+ 'MERGE_MSG': 'seti:git',
+ 'karma.conf.js': 'seti:karma',
+ 'karma.conf.cjs': 'seti:karma',
+ 'karma.conf.mjs': 'seti:karma',
+ 'karma.conf.coffee': 'seti:karma',
+ 'README.md': 'seti:info',
+ 'README.txt': 'seti:info',
+ 'README': 'seti:info',
+ 'CHANGELOG.md': 'seti:clock',
+ 'CHANGELOG.txt': 'seti:clock',
+ 'CHANGELOG': 'seti:clock',
+ 'CHANGES.md': 'seti:clock',
+ 'CHANGES.txt': 'seti:clock',
+ 'CHANGES': 'seti:clock',
+ 'VERSION.md': 'seti:clock',
+ 'VERSION.txt': 'seti:clock',
+ 'VERSION': 'seti:clock',
+ 'mvnw': 'seti:maven',
+ 'pom.xml': 'seti:maven',
+ 'tsconfig.json': 'seti:tsconfig',
+ 'swagger.json': 'seti:json',
+ 'swagger.yml': 'seti:json',
+ 'swagger.yaml': 'seti:json',
+ 'mime.types': 'seti:config',
+ 'Jenkinsfile': 'seti:jenkins',
+ 'babel.config.js': 'seti:babel',
+ 'babel.config.json': 'seti:babel',
+ 'babel.config.cjs': 'seti:babel',
+ 'BUILD': 'seti:bazel',
+ 'BUILD.bazel': 'seti:bazel',
+ 'WORKSPACE': 'seti:bazel',
+ 'WORKSPACE.bazel': 'seti:bazel',
+ 'bower.json': 'seti:bower',
+ 'Bower.json': 'seti:bower',
+ 'eslint.config.js': 'seti:eslint',
+ 'firebase.json': 'seti:firebase',
+ 'geckodriver': 'seti:firefox',
+ 'Gruntfile.js': 'seti:grunt',
+ 'gruntfile.babel.js': 'seti:grunt',
+ 'Gruntfile.babel.js': 'seti:grunt',
+ 'gruntfile.js': 'seti:grunt',
+ 'Gruntfile.coffee': 'seti:grunt',
+ 'gruntfile.coffee': 'seti:grunt',
+ 'ionic.config.json': 'seti:ionic',
+ 'Ionic.config.json': 'seti:ionic',
+ 'ionic.project': 'seti:ionic',
+ 'Ionic.project': 'seti:ionic',
+ 'platformio.ini': 'seti:platformio',
+ 'rollup.config.js': 'seti:rollup',
+ 'sass-lint.yml': 'seti:sass',
+ 'stylelint.config.js': 'seti:stylelint',
+ 'stylelint.config.cjs': 'seti:stylelint',
+ 'stylelint.config.mjs': 'seti:stylelint',
+ 'yarn.clean': 'seti:yarn',
+ 'yarn.lock': 'seti:yarn',
+ 'webpack.config.js': 'seti:webpack',
+ 'webpack.config.cjs': 'seti:webpack',
+ 'webpack.config.mjs': 'seti:webpack',
+ 'webpack.config.ts': 'seti:webpack',
+ 'webpack.config.build.js': 'seti:webpack',
+ 'webpack.config.build.cjs': 'seti:webpack',
+ 'webpack.config.build.mjs': 'seti:webpack',
+ 'webpack.config.build.ts': 'seti:webpack',
+ 'webpack.common.js': 'seti:webpack',
+ 'webpack.common.cjs': 'seti:webpack',
+ 'webpack.common.mjs': 'seti:webpack',
+ 'webpack.common.ts': 'seti:webpack',
+ 'webpack.dev.js': 'seti:webpack',
+ 'webpack.dev.cjs': 'seti:webpack',
+ 'webpack.dev.mjs': 'seti:webpack',
+ 'webpack.dev.ts': 'seti:webpack',
+ 'webpack.prod.js': 'seti:webpack',
+ 'webpack.prod.cjs': 'seti:webpack',
+ 'webpack.prod.mjs': 'seti:webpack',
+ 'webpack.prod.ts': 'seti:webpack',
+ 'npm-debug.log': 'seti:npm_ignored',
+ },
+ extensions: {
+ '.astro': 'astro',
+ '.mdx': 'mdx',
+ '.pkl': 'pkl',
+ '.bsl': 'seti:bsl',
+ '.mdo': 'seti:mdo',
+ '.cls': 'seti:salesforce',
+ '.apex': 'seti:salesforce',
+ '.asm': 'seti:asm',
+ '.s': 'seti:asm',
+ '.bicep': 'seti:bicep',
+ '.bzl': 'seti:bazel',
+ '.bazel': 'seti:bazel',
+ '.BUILD': 'seti:bazel',
+ '.WORKSPACE': 'seti:bazel',
+ '.bazelignore': 'seti:bazel',
+ '.bazelversion': 'seti:bazel',
+ '.c': 'seti:c',
+ '.h': 'seti:c',
+ '.m': 'seti:c',
+ '.cs': 'seti:c-sharp',
+ '.cshtml': 'seti:html',
+ '.aspx': 'seti:html',
+ '.ascx': 'seti:html',
+ '.asax': 'seti:html',
+ '.master': 'seti:html',
+ '.cc': 'seti:cpp',
+ '.cpp': 'seti:cpp',
+ '.cxx': 'seti:cpp',
+ '.c++': 'seti:cpp',
+ '.hh': 'seti:cpp',
+ '.hpp': 'seti:cpp',
+ '.hxx': 'seti:cpp',
+ '.h++': 'seti:cpp',
+ '.mm': 'seti:cpp',
+ '.clj': 'seti:clojure',
+ '.cljs': 'seti:clojure',
+ '.cljc': 'seti:clojure',
+ '.edn': 'seti:clojure',
+ '.cfc': 'seti:coldfusion',
+ '.cfm': 'seti:coldfusion',
+ '.coffee': 'seti:cjsx',
+ '.litcoffee': 'seti:cjsx',
+ '.config': 'seti:config',
+ '.cfg': 'seti:config',
+ '.conf': 'seti:config',
+ '.cr': 'seti:crystal',
+ '.ecr': 'seti:crystal_embedded',
+ '.slang': 'seti:crystal_embedded',
+ '.cson': 'seti:json',
+ '.css': 'seti:css',
+ '.css.map': 'seti:css',
+ '.sss': 'seti:css',
+ '.csv': 'seti:csv',
+ '.xls': 'seti:xls',
+ '.xlsx': 'seti:xls',
+ '.cu': 'seti:cu',
+ '.cuh': 'seti:cu',
+ '.hu': 'seti:cu',
+ '.cake': 'seti:cake',
+ '.ctp': 'seti:cake_php',
+ '.d': 'seti:d',
+ '.doc': 'seti:word',
+ '.docx': 'seti:word',
+ '.ejs': 'seti:ejs',
+ '.ex': 'seti:elixir',
+ '.exs': 'seti:elixir_script',
+ '.elm': 'seti:elm',
+ '.ico': 'seti:favicon',
+ '.fs': 'seti:f-sharp',
+ '.fsx': 'seti:f-sharp',
+ '.gitignore': 'seti:git',
+ '.gitconfig': 'seti:git',
+ '.gitkeep': 'seti:git',
+ '.gitattributes': 'seti:git',
+ '.gitmodules': 'seti:git',
+ '.go': 'seti:go',
+ '.slide': 'seti:go',
+ '.article': 'seti:go',
+ '.gd': 'seti:godot',
+ '.godot': 'seti:godot',
+ '.tres': 'seti:godot',
+ '.tscn': 'seti:godot',
+ '.gradle': 'seti:gradle',
+ '.groovy': 'seti:grails',
+ '.gsp': 'seti:grails',
+ '.gql': 'seti:graphql',
+ '.graphql': 'seti:graphql',
+ '.graphqls': 'seti:graphql',
+ '.hack': 'seti:hacklang',
+ '.haml': 'seti:haml',
+ '.handlebars': 'seti:mustache',
+ '.hbs': 'seti:mustache',
+ '.hjs': 'seti:mustache',
+ '.hs': 'seti:haskell',
+ '.lhs': 'seti:haskell',
+ '.hx': 'seti:haxe',
+ '.hxs': 'seti:haxe',
+ '.hxp': 'seti:haxe',
+ '.hxml': 'seti:haxe',
+ '.html': 'seti:html',
+ '.jade': 'seti:jade',
+ '.java': 'seti:java',
+ '.class': 'seti:java',
+ '.classpath': 'seti:java',
+ '.properties': 'seti:java',
+ '.js': 'seti:javascript',
+ '.js.map': 'seti:javascript',
+ '.cjs': 'seti:javascript',
+ '.cjs.map': 'seti:javascript',
+ '.mjs': 'seti:javascript',
+ '.mjs.map': 'seti:javascript',
+ '.spec.js': 'seti:javascript',
+ '.spec.cjs': 'seti:javascript',
+ '.spec.mjs': 'seti:javascript',
+ '.test.js': 'seti:javascript',
+ '.test.cjs': 'seti:javascript',
+ '.test.mjs': 'seti:javascript',
+ '.es': 'seti:javascript',
+ '.es5': 'seti:javascript',
+ '.es6': 'seti:javascript',
+ '.es7': 'seti:javascript',
+ '.jinja': 'seti:jinja',
+ '.jinja2': 'seti:jinja',
+ '.json': 'seti:json',
+ '.jl': 'seti:julia',
+ '.kt': 'seti:kotlin',
+ '.kts': 'seti:kotlin',
+ '.dart': 'seti:dart',
+ '.less': 'seti:json',
+ '.liquid': 'seti:liquid',
+ '.ls': 'seti:livescript',
+ '.lua': 'seti:lua',
+ '.markdown': 'seti:markdown',
+ '.md': 'seti:markdown',
+ '.argdown': 'seti:argdown',
+ '.ad': 'seti:argdown',
+ '.mustache': 'seti:mustache',
+ '.stache': 'seti:mustache',
+ '.nim': 'seti:nim',
+ '.nims': 'seti:nim',
+ '.github-issues': 'seti:github',
+ '.ipynb': 'seti:notebook',
+ '.njk': 'seti:nunjucks',
+ '.nunjucks': 'seti:nunjucks',
+ '.nunjs': 'seti:nunjucks',
+ '.nunj': 'seti:nunjucks',
+ '.njs': 'seti:nunjucks',
+ '.nj': 'seti:nunjucks',
+ '.npm-debug.log': 'seti:npm',
+ '.npmignore': 'seti:npm',
+ '.npmrc': 'seti:npm',
+ '.ml': 'seti:ocaml',
+ '.mli': 'seti:ocaml',
+ '.cmx': 'seti:ocaml',
+ '.cmxa': 'seti:ocaml',
+ '.odata': 'seti:odata',
+ '.pl': 'seti:perl',
+ '.php': 'seti:php',
+ '.php.inc': 'seti:php',
+ '.pipeline': 'seti:pipeline',
+ '.pddl': 'seti:pddl',
+ '.plan': 'seti:plan',
+ '.happenings': 'seti:happenings',
+ '.ps1': 'seti:powershell',
+ '.psd1': 'seti:powershell',
+ '.psm1': 'seti:powershell',
+ '.prisma': 'seti:prisma',
+ '.pug': 'seti:pug',
+ '.pp': 'seti:puppet',
+ '.epp': 'seti:puppet',
+ '.purs': 'seti:purescript',
+ '.py': 'seti:python',
+ '.jsx': 'seti:react',
+ '.spec.jsx': 'seti:react',
+ '.test.jsx': 'seti:react',
+ '.cjsx': 'seti:react',
+ '.tsx': 'seti:react',
+ '.spec.tsx': 'seti:react',
+ '.test.tsx': 'seti:react',
+ '.res': 'seti:rescript',
+ '.resi': 'seti:rescript',
+ '.R': 'seti:R',
+ '.rmd': 'seti:R',
+ '.rb': 'seti:ruby',
+ '.erb': 'seti:html',
+ '.erb.html': 'seti:html',
+ '.html.erb': 'seti:html',
+ '.rs': 'seti:rust',
+ '.sass': 'seti:sass',
+ '.scss': 'seti:sass',
+ '.springBeans': 'seti:spring',
+ '.slim': 'seti:slim',
+ '.smarty.tpl': 'seti:smarty',
+ '.tpl': 'seti:smarty',
+ '.sbt': 'seti:sbt',
+ '.scala': 'seti:scala',
+ '.sol': 'seti:ethereum',
+ '.styl': 'seti:stylus',
+ '.svelte': 'seti:svelte',
+ '.swift': 'seti:swift',
+ '.sql': 'seti:db',
+ '.soql': 'seti:db',
+ '.tf': 'seti:terraform',
+ '.tf.json': 'seti:terraform',
+ '.tfvars': 'seti:terraform',
+ '.tfvars.json': 'seti:terraform',
+ '.tex': 'seti:tex',
+ '.sty': 'seti:tex',
+ '.dtx': 'seti:tex',
+ '.ins': 'seti:tex',
+ '.txt': 'seti:default',
+ '.toml': 'seti:config',
+ '.twig': 'seti:twig',
+ '.ts': 'seti:typescript',
+ '.spec.ts': 'seti:typescript',
+ '.test.ts': 'seti:typescript',
+ '.vala': 'seti:vala',
+ '.vapi': 'seti:vala',
+ '.component': 'seti:html',
+ '.vue': 'seti:vue',
+ '.wasm': 'seti:wasm',
+ '.wat': 'seti:wat',
+ '.xml': 'seti:xml',
+ '.yml': 'seti:yml',
+ '.yaml': 'seti:yml',
+ '.pro': 'seti:prolog',
+ '.zig': 'seti:zig',
+ '.jar': 'seti:zip',
+ '.zip': 'seti:zip',
+ '.wgt': 'seti:wgt',
+ '.ai': 'seti:illustrator',
+ '.psd': 'seti:photoshop',
+ '.pdf': 'seti:pdf',
+ '.eot': 'seti:font',
+ '.ttf': 'seti:font',
+ '.woff': 'seti:font',
+ '.woff2': 'seti:font',
+ '.otf': 'seti:font',
+ '.avif': 'seti:image',
+ '.gif': 'seti:image',
+ '.jpg': 'seti:image',
+ '.jpeg': 'seti:image',
+ '.png': 'seti:image',
+ '.pxm': 'seti:image',
+ '.svg': 'seti:svg',
+ '.svgx': 'seti:image',
+ '.tiff': 'seti:image',
+ '.webp': 'seti:image',
+ '.sublime-project': 'seti:sublime',
+ '.sublime-workspace': 'seti:sublime',
+ '.code-search': 'seti:code-search',
+ '.sh': 'seti:shell',
+ '.zsh': 'seti:shell',
+ '.fish': 'seti:shell',
+ '.zshrc': 'seti:shell',
+ '.bashrc': 'seti:shell',
+ '.mov': 'seti:video',
+ '.ogv': 'seti:video',
+ '.webm': 'seti:video',
+ '.avi': 'seti:video',
+ '.mpg': 'seti:video',
+ '.mp4': 'seti:video',
+ '.mp3': 'seti:audio',
+ '.ogg': 'seti:audio',
+ '.wav': 'seti:audio',
+ '.flac': 'seti:audio',
+ '.3ds': 'seti:svg',
+ '.3dm': 'seti:svg',
+ '.stl': 'seti:svg',
+ '.obj': 'seti:svg',
+ '.dae': 'seti:svg',
+ '.bat': 'seti:windows',
+ '.cmd': 'seti:windows',
+ '.babelrc': 'seti:babel',
+ '.babelrc.js': 'seti:babel',
+ '.babelrc.cjs': 'seti:babel',
+ '.bazelrc': 'seti:bazel',
+ '.bowerrc': 'seti:bower',
+ '.codeclimate.yml': 'seti:code-climate',
+ '.eslintrc': 'seti:eslint',
+ '.eslintrc.js': 'seti:eslint',
+ '.eslintrc.cjs': 'seti:eslint',
+ '.eslintrc.yaml': 'seti:eslint',
+ '.eslintrc.yml': 'seti:eslint',
+ '.eslintrc.json': 'seti:eslint',
+ '.eslintignore': 'seti:eslint',
+ '.firebaserc': 'seti:firebase',
+ '.gitlab-ci.yml': 'seti:gitlab',
+ '.jshintrc': 'seti:javascript',
+ '.jscsrc': 'seti:javascript',
+ '.stylelintrc': 'seti:stylelint',
+ '.stylelintrc.json': 'seti:stylelint',
+ '.stylelintrc.yaml': 'seti:stylelint',
+ '.stylelintrc.yml': 'seti:stylelint',
+ '.stylelintrc.js': 'seti:stylelint',
+ '.stylelintignore': 'seti:stylelint',
+ '.direnv': 'seti:config',
+ '.env': 'seti:config',
+ '.static': 'seti:config',
+ '.editorconfig': 'seti:config',
+ '.slugignore': 'seti:config',
+ '.tmp': 'seti:clock',
+ '.htaccess': 'seti:config',
+ '.key': 'seti:lock',
+ '.cert': 'seti:lock',
+ '.cer': 'seti:lock',
+ '.crt': 'seti:lock',
+ '.pem': 'seti:lock',
+ '.DS_Store': 'seti:ignored',
+ },
+ partials: {
+ 'mix': 'seti:hex',
+ 'Gemfile': 'seti:ruby',
+ 'gemfile': 'seti:ruby',
+ 'dockerfile': 'seti:docker',
+ 'Dockerfile': 'seti:docker',
+ 'DOCKERFILE': 'seti:docker',
+ '.dockerignore': 'seti:docker',
+ 'docker-healthcheck': 'seti:docker',
+ 'docker-compose.yml': 'seti:docker',
+ 'docker-compose.yaml': 'seti:docker',
+ 'docker-compose.override.yml': 'seti:docker',
+ 'docker-compose.override.yaml': 'seti:docker',
+ 'GULPFILE': 'seti:gulp',
+ 'Gulpfile': 'seti:gulp',
+ 'gulpfile': 'seti:gulp',
+ 'gulpfile.js': 'seti:gulp',
+ 'LICENSE': 'seti:license',
+ 'LICENCE': 'seti:license',
+ 'LICENSE.txt': 'seti:license',
+ 'LICENCE.txt': 'seti:license',
+ 'LICENSE.md': 'seti:license',
+ 'LICENCE.md': 'seti:license',
+ 'COPYING': 'seti:license',
+ 'COPYING.txt': 'seti:license',
+ 'COPYING.md': 'seti:license',
+ 'COMPILING': 'seti:license',
+ 'COMPILING.txt': 'seti:license',
+ 'COMPILING.md': 'seti:license',
+ 'CONTRIBUTING': 'seti:license',
+ 'CONTRIBUTING.txt': 'seti:license',
+ 'CONTRIBUTING.md': 'seti:license',
+ 'MAKEFILE': 'seti:makefile',
+ 'Makefile': 'seti:makefile',
+ 'makefile': 'seti:makefile',
+ 'QMAKEFILE': 'seti:makefile',
+ 'QMakefile': 'seti:makefile',
+ 'qmakefile': 'seti:makefile',
+ 'OMAKEFILE': 'seti:makefile',
+ 'OMakefile': 'seti:makefile',
+ 'omakefile': 'seti:makefile',
+ 'CMAKELISTS.TXT': 'seti:makefile',
+ 'CMAKELISTS.txt': 'seti:makefile',
+ 'CMakeLists.txt': 'seti:makefile',
+ 'cmakelists.txt': 'seti:makefile',
+ 'Procfile': 'seti:heroku',
+ 'TODO': 'seti:todo',
+ 'TODO.txt': 'seti:todo',
+ 'TODO.md': 'seti:todo',
+ },
+}
+
+export const FileIcons = {
+ 'pnpm': '',
+ 'biome':
+ '',
+ 'bun': '',
+
+ 'seti:folder':
+ '',
+ 'seti:bsl':
+ '',
+ 'seti:mdo':
+ '',
+ 'seti:salesforce':
+ '',
+ 'seti:asm':
+ '',
+ 'seti:bicep':
+ '',
+ 'seti:bazel':
+ '',
+ 'seti:c':
+ '',
+ 'seti:c-sharp':
+ '',
+ 'seti:html':
+ '',
+ 'seti:cpp':
+ '',
+ 'seti:clojure':
+ '',
+ 'seti:coldfusion':
+ '',
+ 'seti:config':
+ '',
+ 'seti:crystal':
+ '',
+ 'seti:crystal_embedded':
+ '',
+ 'seti:json':
+ '',
+ 'seti:css':
+ '',
+ 'seti:csv':
+ '',
+ 'seti:xls':
+ '',
+ 'seti:cu':
+ '',
+ 'seti:cake':
+ '',
+ 'seti:cake_php':
+ '',
+ 'seti:d':
+ '',
+ 'seti:word':
+ '',
+ 'seti:elixir':
+ '',
+ 'seti:elixir_script':
+ '',
+ 'seti:hex':
+ '',
+ 'seti:elm':
+ '',
+ 'seti:favicon':
+ '',
+ 'seti:f-sharp':
+ '',
+ 'seti:git':
+ '',
+ 'seti:go':
+ '',
+ 'seti:godot':
+ '',
+ 'seti:gradle':
+ '',
+ 'seti:grails':
+ '',
+ 'seti:graphql':
+ '',
+ 'seti:hacklang':
+ '',
+ 'seti:haml':
+ '',
+ 'seti:mustache':
+ '',
+ 'seti:haskell':
+ '',
+ 'seti:haxe':
+ '',
+ 'seti:jade':
+ '',
+ 'seti:java':
+ '',
+ 'seti:javascript':
+ '',
+ 'seti:jinja':
+ '',
+ 'seti:julia':
+ '',
+ 'seti:karma':
+ '',
+ 'seti:kotlin':
+ '',
+ 'seti:dart':
+ '',
+ 'seti:liquid':
+ '',
+ 'seti:livescript':
+ '',
+ 'seti:lua':
+ '',
+ 'seti:markdown':
+ '',
+ 'seti:argdown':
+ '',
+ 'seti:info':
+ '',
+ 'seti:clock':
+ '',
+ 'seti:maven':
+ '',
+ 'seti:nim':
+ '',
+ 'seti:github':
+ '',
+ 'seti:notebook':
+ '',
+ 'seti:nunjucks':
+ '',
+ 'seti:npm':
+ '',
+ 'seti:ocaml':
+ '',
+ 'seti:odata':
+ '',
+ 'seti:perl':
+ '',
+ 'seti:php':
+ '',
+ 'seti:pipeline':
+ '',
+ 'seti:pddl':
+ '',
+ 'seti:plan':
+ '',
+ 'seti:happenings':
+ '',
+ 'seti:powershell':
+ '',
+ 'seti:prisma':
+ '',
+ 'seti:pug':
+ '',
+ 'seti:puppet':
+ '',
+ 'seti:purescript':
+ '',
+ 'seti:python':
+ '',
+ 'seti:react':
+ '',
+ 'seti:rescript':
+ '',
+ 'seti:R':
+ '',
+ 'seti:ruby':
+ '',
+ 'seti:rust':
+ '',
+ 'seti:sass':
+ '',
+ 'seti:spring':
+ '',
+ 'seti:slim':
+ '',
+ 'seti:smarty':
+ '',
+ 'seti:sbt':
+ '',
+ 'seti:scala':
+ '',
+ 'seti:ethereum':
+ '',
+ 'seti:stylus':
+ '',
+ 'seti:svelte':
+ '',
+ 'seti:swift':
+ '',
+ 'seti:db':
+ '',
+ 'seti:terraform':
+ '',
+ 'seti:tex':
+ '',
+ 'seti:default':
+ '',
+ 'seti:twig':
+ '',
+ 'seti:typescript':
+ '',
+ 'seti:tsconfig':
+ '',
+ 'seti:vala':
+ '',
+ 'seti:vue':
+ '',
+ 'seti:wasm':
+ '',
+ 'seti:wat':
+ '',
+ 'seti:xml':
+ '',
+ 'seti:yml':
+ '',
+ 'seti:prolog':
+ '',
+ 'seti:zig':
+ '',
+ 'seti:zip':
+ '',
+ 'seti:wgt':
+ '',
+ 'seti:illustrator':
+ '',
+ 'seti:photoshop':
+ '',
+ 'seti:pdf':
+ '',
+ 'seti:font':
+ '',
+ 'seti:image':
+ '',
+ 'seti:svg':
+ '',
+ 'seti:sublime':
+ '',
+ 'seti:code-search':
+ '',
+ 'seti:shell':
+ '',
+ 'seti:video':
+ '',
+ 'seti:audio':
+ '',
+ 'seti:windows':
+ '',
+ 'seti:jenkins':
+ '',
+ 'seti:babel':
+ '',
+ 'seti:bower':
+ '',
+ 'seti:docker':
+ '',
+ 'seti:code-climate':
+ '',
+ 'seti:eslint':
+ '',
+ 'seti:firebase':
+ '',
+ 'seti:firefox':
+ '',
+ 'seti:gitlab':
+ '',
+ 'seti:grunt':
+ '',
+ 'seti:gulp':
+ '',
+ 'seti:ionic':
+ '',
+ 'seti:platformio':
+ '',
+ 'seti:rollup':
+ '',
+ 'seti:stylelint':
+ '',
+ 'seti:yarn':
+ '',
+ 'seti:webpack':
+ '',
+ 'seti:lock':
+ '',
+ 'seti:license':
+ '',
+ 'seti:makefile':
+ '',
+ 'seti:heroku':
+ '',
+ 'seti:todo':
+ '',
+ 'seti:ignored':
+ '',
+}
diff --git a/plugins/plugin-md-power/src/node/features/fileTree/index.ts b/plugins/plugin-md-power/src/node/features/fileTree/index.ts
new file mode 100644
index 00000000..b56001c5
--- /dev/null
+++ b/plugins/plugin-md-power/src/node/features/fileTree/index.ts
@@ -0,0 +1,77 @@
+import fs from 'node:fs'
+import container from 'markdown-it-container'
+import type { Markdown } from 'vuepress/markdown'
+import type Token from 'markdown-it/lib/token.mjs'
+import type { App } from 'vuepress/core'
+import { resolveTreeNodeInfo, updateInlineToken } from './resolveTreeNodeInfo.js'
+import { type FileIcon, folderIcon, getFileIcon } from './findIcon.js'
+
+const type = 'file-tree'
+const closeType = `container_${type}_close`
+const componentName = 'FileTreeItem'
+const itemOpen = 'file_tree_item_open'
+const itemClose = 'file_tree_item_close'
+const classPrefix = 'vp-fti-'
+const styleFilepath = 'internal/md-power/file-tree.css'
+
+export async function fileTreePlugin(app: App, md: Markdown) {
+ const validate = (info: string): boolean => info.trim().startsWith(type)
+ const render = (tokens: Token[], idx: number): string => {
+ if (tokens[idx].nesting === 1) {
+ for (
+ let i = idx + 1;
+ !(tokens[i].nesting === -1
+ && tokens[i].type === closeType);
+ ++i
+ ) {
+ const token = tokens[i]
+ if (token.type === 'list_item_open') {
+ const result = resolveTreeNodeInfo(tokens, token, i)
+ if (result) {
+ const [info, inline] = result
+ const { filename, type, expanded, empty } = info
+ const icon = type === 'file' ? getFileIcon(filename) : folderIcon
+
+ token.type = itemOpen
+ token.tag = componentName
+ token.attrSet('type', type)
+ token.attrSet(':expanded', expanded ? 'true' : 'false')
+ token.attrSet(':empty', empty ? 'true' : 'false')
+ updateInlineToken(inline, info, `${classPrefix}${icon.name}`)
+ addIcon(icon)
+ }
+ }
+ else if (token.type === 'list_item_close') {
+ token.type = itemClose
+ token.tag = componentName
+ }
+ }
+ return ''
+ }
+ else {
+ return '
'
+ }
+ }
+
+ let timer: NodeJS.Timeout | null = null
+ const icons: Record = {}
+
+ function addIcon(icon: FileIcon) {
+ icons[icon.name] = icon
+
+ if (timer)
+ clearTimeout(timer)
+ timer = setTimeout(async () => {
+ let content = ''
+ for (const icon of Object.values(icons)) {
+ content += `.${classPrefix}${icon.name} { --icon: ${icon.svg}; }\n`
+ }
+ await app.writeTemp(styleFilepath, content)
+ }, 150)
+ }
+
+ md.use(container, type, { validate, render })
+
+ if (!fs.existsSync(app.dir.temp(styleFilepath)))
+ await app.writeTemp(styleFilepath, '')
+}
diff --git a/plugins/plugin-md-power/src/node/features/fileTree/resolveTreeNodeInfo.ts b/plugins/plugin-md-power/src/node/features/fileTree/resolveTreeNodeInfo.ts
new file mode 100644
index 00000000..af61185b
--- /dev/null
+++ b/plugins/plugin-md-power/src/node/features/fileTree/resolveTreeNodeInfo.ts
@@ -0,0 +1,125 @@
+import { removeLeadingSlash } from 'vuepress/shared'
+import Token from 'markdown-it/lib/token.mjs'
+
+interface FileTreeNode {
+ filename: string
+ type: 'folder' | 'file'
+ expanded: boolean
+ focus: boolean
+ empty: boolean
+}
+
+export function resolveTreeNodeInfo(
+ tokens: Token[],
+ current: Token,
+ idx: number,
+): [FileTreeNode, Token] | undefined {
+ let hasInline = false
+ let hasChildren = false
+ let inline!: Token
+ for (
+ let i = idx + 1;
+ !(tokens[i].level === current.level && tokens[i].type === 'list_item_close');
+ ++i
+ ) {
+ if (tokens[i].type === 'inline' && !hasInline) {
+ inline = tokens[i]
+ hasInline = true
+ }
+ else if (tokens[i].tag === 'ul') {
+ hasChildren = true
+ }
+
+ if (hasInline && hasChildren)
+ break
+ }
+
+ if (!hasInline)
+ return undefined
+
+ const children = inline.children?.filter(token => (token.type === 'text' && token.content) || token.tag === 'strong') || []
+ const filename = children.filter(token => token.type === 'text').map(token => token.content).join(' ').split(/\s+/)[0] ?? ''
+ const focus = children[0]?.tag === 'strong'
+ const type = hasChildren || filename.endsWith('/') ? 'folder' : 'file'
+ const info: FileTreeNode = {
+ filename: removeLeadingSlash(filename),
+ type,
+ focus,
+ empty: !hasChildren,
+ expanded: type === 'folder' && !filename.endsWith('/'),
+ }
+
+ return [info, inline] as const
+}
+
+export function updateInlineToken(inline: Token, info: FileTreeNode, icon: string) {
+ const children = inline.children
+ if (!children)
+ return
+
+ const tokens: Token[] = []
+ const wrapperOpen = new Token('span_open', 'span', 1)
+ const wrapperClose = new Token('span_close', 'span', -1)
+
+ wrapperOpen.attrSet('class', `tree-node ${info.type}`)
+ tokens.push(wrapperOpen)
+
+ if (info.filename !== '...' && info.filename !== '…') {
+ const iconOpen = new Token('span_open', 'span', 1)
+ iconOpen.attrSet('class', icon)
+ const iconClose = new Token('span_close', 'span', -1)
+
+ tokens.push(iconOpen, iconClose)
+ }
+
+ const fileOpen = new Token('span_open', 'span', 1)
+ fileOpen.attrSet('class', `name${info.focus ? ' focus' : ''}`)
+ tokens.push(fileOpen)
+
+ let isStrongTag = false
+ while (children.length) {
+ const token = children.shift()!
+ if (token.type === 'text' && token.content) {
+ if (token.content.includes(' ')) {
+ const [first, ...other] = token.content.split(' ')
+ const text = new Token('text', '', 0)
+ text.content = first
+ tokens.push(text)
+ const comment = new Token('text', '', 0)
+ comment.content = other.join(' ')
+ children.unshift(comment)
+ }
+ else {
+ tokens.push(token)
+ }
+ if (!isStrongTag)
+ break
+ }
+ else if (token.tag === 'strong') {
+ tokens.push(token)
+ if (token.nesting === 1) {
+ isStrongTag = true
+ }
+ else {
+ break
+ }
+ }
+ else {
+ tokens.push(token)
+ }
+ }
+
+ const fileClose = new Token('span_close', 'span', -1)
+ tokens.push(fileClose)
+
+ if (children.filter(token => token.type === 'text' && token.content.trim()).length) {
+ const commentOpen = new Token('span_open', 'span', 1)
+ commentOpen.attrSet('class', 'comment')
+ const commentClose = new Token('span_close', 'span', -1)
+
+ tokens.push(commentOpen, ...children, commentClose)
+ }
+
+ tokens.push(wrapperClose)
+ inline.children = tokens
+}
diff --git a/plugins/plugin-md-power/src/node/plugin.ts b/plugins/plugin-md-power/src/node/plugin.ts
index 2f3f5714..92a63bd7 100644
--- a/plugins/plugin-md-power/src/node/plugin.ts
+++ b/plugins/plugin-md-power/src/node/plugin.ts
@@ -14,6 +14,7 @@ import { jsfiddlePlugin } from './features/jsfiddle.js'
import { plotPlugin } from './features/plot.js'
import { langReplPlugin } from './features/langRepl.js'
import { prepareConfigFile } from './prepareConfigFile.js'
+import { fileTreePlugin } from './features/fileTree/index.js'
export function markdownPowerPlugin(options: MarkdownPowerPluginOptions = {}): Plugin {
return (app) => {
@@ -89,12 +90,17 @@ export function markdownPowerPlugin(options: MarkdownPowerPluginOptions = {}): P
options.plot === true
|| (typeof options.plot === 'object' && options.plot.tag !== false)
) {
- // =|plot|=
+ // !!plot!!
md.use(plotPlugin)
}
if (options.repl)
await langReplPlugin(app, md, options.repl)
+
+ if (options.fileTree) {
+ // ::: file-tree
+ await fileTreePlugin(app, md)
+ }
},
}
}
diff --git a/plugins/plugin-md-power/src/node/prepareConfigFile.ts b/plugins/plugin-md-power/src/node/prepareConfigFile.ts
index 7c39314b..72287c04 100644
--- a/plugins/plugin-md-power/src/node/prepareConfigFile.ts
+++ b/plugins/plugin-md-power/src/node/prepareConfigFile.ts
@@ -54,6 +54,12 @@ export async function prepareConfigFile(app: App, options: MarkdownPowerPluginOp
enhances.add(`app.component('CanIUseViewer', CanIUse)`)
}
+ if (options.fileTree) {
+ imports.add(`import FileTreeItem from '${CLIENT_FOLDER}components/FileTreeItem.vue'`)
+ imports.add(`import '@internal/md-power/file-tree.css'`)
+ enhances.add(`app.component('FileTreeItem', FileTreeItem)`)
+ }
+
return app.writeTemp(
'md-power/config.js',
`\
diff --git a/plugins/plugin-md-power/src/shared/plugin.ts b/plugins/plugin-md-power/src/shared/plugin.ts
index 6c51f38b..a9c5367d 100644
--- a/plugins/plugin-md-power/src/shared/plugin.ts
+++ b/plugins/plugin-md-power/src/shared/plugin.ts
@@ -26,6 +26,7 @@ export interface MarkdownPowerPluginOptions {
// container
repl?: false | ReplOptions
+ fileTree?: boolean
caniuse?: boolean | CanIUseOptions
}
diff --git a/plugins/plugin-md-power/tsup.config.ts b/plugins/plugin-md-power/tsup.config.ts
index 3647ccf9..921bbaaf 100644
--- a/plugins/plugin-md-power/tsup.config.ts
+++ b/plugins/plugin-md-power/tsup.config.ts
@@ -33,6 +33,7 @@ export default defineConfig(() => {
entry: ['./src/node/index.ts'],
outDir: './lib/node',
target: 'node18',
+ external: ['markdown-it'],
},
// client
...config.map(({ dir, files }) => ({
diff --git a/plugins/plugin-shikiji/package.json b/plugins/plugin-shikiji/package.json
index 2df2a06e..9a4d8724 100644
--- a/plugins/plugin-shikiji/package.json
+++ b/plugins/plugin-shikiji/package.json
@@ -36,8 +36,8 @@
"vuepress": "2.0.0-rc.15"
},
"dependencies": {
- "@shikijs/transformers": "^1.14.1",
- "@shikijs/twoslash": "^1.14.1",
+ "@shikijs/transformers": "^1.15.2",
+ "@shikijs/twoslash": "^1.15.2",
"@types/hast": "^3.0.4",
"@vuepress/helper": "2.0.0-rc.42",
"@vueuse/core": "^11.0.3",
@@ -46,7 +46,7 @@
"mdast-util-gfm": "^3.0.0",
"mdast-util-to-hast": "^13.2.0",
"nanoid": "^5.0.7",
- "shiki": "^1.14.1",
+ "shiki": "^1.15.2",
"twoslash": "^0.2.9",
"twoslash-vue": "^0.2.9"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5fb72cf9..93c81c9c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,8 +51,8 @@ importers:
specifier: ^9.1.5
version: 9.1.5
lint-staged:
- specifier: ^15.2.9
- version: 15.2.9
+ specifier: ^15.2.10
+ version: 15.2.10
rimraf:
specifier: ^6.0.1
version: 6.0.1
@@ -96,8 +96,8 @@ importers:
docs:
dependencies:
'@iconify/json':
- specifier: ^2.2.242
- version: 2.2.242
+ specifier: ^2.2.243
+ version: 2.2.243
'@simonwep/pickr':
specifier: ^1.9.1
version: 1.9.1
@@ -163,11 +163,11 @@ importers:
specifier: ^5.0.7
version: 5.0.7
shiki:
- specifier: ^1.14.1
- version: 1.14.1
+ specifier: ^1.15.2
+ version: 1.15.2
tm-grammars:
- specifier: ^1.17.8
- version: 1.17.8
+ specifier: ^1.17.11
+ version: 1.17.11
tm-themes:
specifier: ^1.8.1
version: 1.8.1
@@ -218,11 +218,11 @@ importers:
plugins/plugin-shikiji:
dependencies:
'@shikijs/transformers':
- specifier: ^1.14.1
- version: 1.14.1
+ specifier: ^1.15.2
+ version: 1.15.2
'@shikijs/twoslash':
- specifier: ^1.14.1
- version: 1.14.1(typescript@5.5.4)
+ specifier: ^1.15.2
+ version: 1.15.2(typescript@5.5.4)
'@types/hast':
specifier: ^3.0.4
version: 3.0.4
@@ -248,8 +248,8 @@ importers:
specifier: ^5.0.7
version: 5.0.7
shiki:
- specifier: ^1.14.1
- version: 1.14.1
+ specifier: ^1.15.2
+ version: 1.15.2
twoslash:
specifier: ^0.2.9
version: 0.2.9(typescript@5.5.4)
@@ -375,8 +375,8 @@ importers:
version: link:../plugins/plugin-md-power
devDependencies:
'@iconify/json':
- specifier: ^2.2.242
- version: 2.2.242
+ specifier: ^2.2.243
+ version: 2.2.243
packages:
@@ -1010,8 +1010,8 @@ packages:
resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==}
engines: {node: '>=10.13.0'}
- '@iconify/json@2.2.242':
- resolution: {integrity: sha512-cS6eYdx1C1GhqaZm25ztH5yoghCaTXGJBeseUkS259GxxX9obtGLLk0yy+twxpNCD5/F9gjbgxh46BjNWsHtwg==}
+ '@iconify/json@2.2.243':
+ resolution: {integrity: sha512-92pXEKdjDmH8sV3fZwJTxifKpJtp3ie8KD7oCqHRJh/Z+CoGm3bzDcK5UnWs5G5EDbu00kYVcSGM4jRnY9HgGQ==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -1551,14 +1551,14 @@ packages:
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
- '@shikijs/core@1.14.1':
- resolution: {integrity: sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==}
+ '@shikijs/core@1.15.2':
+ resolution: {integrity: sha512-hi6XZuwHYn6bU4wtXZxST8ynM55aiU2+rVU9aPIrSxqKmEKl4d65puwGsggwcZWTET+7zGXKe7AUj46iQ8Aq8w==}
- '@shikijs/transformers@1.14.1':
- resolution: {integrity: sha512-JJqL8QBVCJh3L61jqqEXgFq1cTycwjcGj7aSmqOEsbxnETM9hRlaB74QuXvY/fVJNjbNt8nvWo0VwAXKvMSLRg==}
+ '@shikijs/transformers@1.15.2':
+ resolution: {integrity: sha512-J+3kFFXb4hN3esMzdDBGb2GhBsMPX8UC3o/U9G4Jognb8k0ADQAzZkShTARwS76O0g2VFoMu4vnIchiVE6x/uw==}
- '@shikijs/twoslash@1.14.1':
- resolution: {integrity: sha512-b0krVIqVCpdh9Gji+gTSJp0n2KyepPmnjKEDs+dUb765MUcyfN9qK/vRr7fA/YdAJxab8IDpz1GbLl0GuzAyFQ==}
+ '@shikijs/twoslash@1.15.2':
+ resolution: {integrity: sha512-xGMsTd5QYL1cP7bjAbEl2YckyC7D8EOhsRy/ie13izjszjPPTSWl0fJs6cb5bEOLxa8ivFwUtwepr8RwWlE6yw==}
'@sideway/address@4.1.5':
resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
@@ -4005,8 +4005,8 @@ packages:
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
- lint-staged@15.2.9:
- resolution: {integrity: sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==}
+ lint-staged@15.2.10:
+ resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -4363,10 +4363,6 @@ packages:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
- micromatch@4.0.7:
- resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
- engines: {node: '>=8.6'}
-
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -5080,8 +5076,8 @@ packages:
shell-quote@1.8.1:
resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
- shiki@1.14.1:
- resolution: {integrity: sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==}
+ shiki@1.15.2:
+ resolution: {integrity: sha512-M+7QZQZiZw/cZeizrC/yryG3eeG8pTUhu7ZaHxVyzPNFIRIlN46YBciquoNPCiXiwLnx6JB62f3lSuSYQrus1w==}
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
@@ -5366,8 +5362,8 @@ packages:
tinyexec@0.2.0:
resolution: {integrity: sha512-au8dwv4xKSDR+Fw52csDo3wcDztPdne2oM1o/7LFro4h6bdFmvyUAeAfX40pwDtzHgRFqz1XWaUqgKS2G83/ig==}
- tm-grammars@1.17.8:
- resolution: {integrity: sha512-Qw67JNutL9LCt8FFw5RfsogeQ40iSeqrTHDSp0ecnY/b+ZweK8izlw6y/ZMje2+I6DMtTiBOCgmXEf+2oH11jQ==}
+ tm-grammars@1.17.11:
+ resolution: {integrity: sha512-qxTMAxbmY9NqBxTSaeFkI7ZCofhp+SVtrCLdf5OkcX6iiazUTL5LTLpzw0ZSFUW0RRr0Z2kMepIup/WDBha4sQ==}
tm-themes@1.8.1:
resolution: {integrity: sha512-jTUfDRn5TysYhkxxEWBQDo1C1n4yoHcnfNNqXkVxIMGQCgal/9poGuMBsfbnZCPEmFVcN2rtrUwaOJ8s2hVQXg==}
@@ -6440,7 +6436,7 @@ snapshots:
'@hutson/parse-repository-url@5.0.0': {}
- '@iconify/json@2.2.242':
+ '@iconify/json@2.2.243':
dependencies:
'@iconify/types': 2.0.0
pathe: 1.1.2
@@ -6903,17 +6899,17 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
- '@shikijs/core@1.14.1':
+ '@shikijs/core@1.15.2':
dependencies:
'@types/hast': 3.0.4
- '@shikijs/transformers@1.14.1':
+ '@shikijs/transformers@1.15.2':
dependencies:
- shiki: 1.14.1
+ shiki: 1.15.2
- '@shikijs/twoslash@1.14.1(typescript@5.5.4)':
+ '@shikijs/twoslash@1.15.2(typescript@5.5.4)':
dependencies:
- '@shikijs/core': 1.14.1
+ '@shikijs/core': 1.15.2
twoslash: 0.2.9(typescript@5.5.4)
transitivePeerDependencies:
- supports-color
@@ -9774,7 +9770,7 @@ snapshots:
dependencies:
uc.micro: 2.1.0
- lint-staged@15.2.9:
+ lint-staged@15.2.10:
dependencies:
chalk: 5.3.0
commander: 12.1.0
@@ -9782,7 +9778,7 @@ snapshots:
execa: 8.0.1
lilconfig: 3.1.2
listr2: 8.2.4
- micromatch: 4.0.7
+ micromatch: 4.0.8
pidtree: 0.6.0
string-argv: 0.3.2
yaml: 2.5.0
@@ -10432,11 +10428,6 @@ snapshots:
braces: 3.0.2
picomatch: 2.3.1
- micromatch@4.0.7:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -11145,9 +11136,9 @@ snapshots:
shell-quote@1.8.1: {}
- shiki@1.14.1:
+ shiki@1.15.2:
dependencies:
- '@shikijs/core': 1.14.1
+ '@shikijs/core': 1.15.2
'@types/hast': 3.0.4
side-channel@1.0.6:
@@ -11458,7 +11449,7 @@ snapshots:
tinyexec@0.2.0: {}
- tm-grammars@1.17.8: {}
+ tm-grammars@1.17.11: {}
tm-themes@1.8.1: {}
diff --git a/theme/package.json b/theme/package.json
index b004eb55..b1ee53af 100644
--- a/theme/package.json
+++ b/theme/package.json
@@ -109,6 +109,6 @@
"vuepress-plugin-md-power": "workspace:*"
},
"devDependencies": {
- "@iconify/json": "^2.2.242"
+ "@iconify/json": "^2.2.243"
}
}
diff --git a/theme/src/node/plugins/getPlugins.ts b/theme/src/node/plugins/getPlugins.ts
index 0721f7e5..3a1153c0 100644
--- a/theme/src/node/plugins/getPlugins.ts
+++ b/theme/src/node/plugins/getPlugins.ts
@@ -131,6 +131,9 @@ export function getPlugins({
if (pluginOptions.markdownPower !== false) {
plugins.push(markdownPowerPlugin({
caniuse: pluginOptions.caniuse,
+ fileTree: true,
+ plot: true,
+ icons: true,
...pluginOptions.markdownPower || {},
repl: pluginOptions.markdownPower?.repl
? { theme: shikiTheme, ...pluginOptions.markdownPower?.repl }
diff --git a/theme/src/node/plugins/markdown-title.ts b/theme/src/node/plugins/markdown-title.ts
index e3eb2350..8c2a8ce0 100644
--- a/theme/src/node/plugins/markdown-title.ts
+++ b/theme/src/node/plugins/markdown-title.ts
@@ -1,7 +1,7 @@
import type { Plugin } from 'vuepress/core'
import type { MarkdownEnv } from 'vuepress/markdown'
-const REG_HEADING = /^#\s*?(\S.*)?\n/
+const REG_HEADING = /^#\s*?([^#\s].*)?\n/
export function markdownTitlePlugin(): Plugin {
return {