├── .devcontainer
└── devcontainer.json
├── .editorconfig
├── .github
├── FUNDING.yml
├── renovate.json
└── workflows
│ ├── ci-build.yaml
│ ├── ci.yaml
│ ├── preview-docs-deployment.yaml
│ ├── production-docs-deployment.yaml
│ └── release.yaml
├── .gitignore
├── .npmrc
├── .vscode
├── extensions.json
└── settings.json
├── LICENSE
├── README.md
├── README.zh-CN.md
├── bump.config.ts
├── changelogithub.config.ts
├── cspell.config.yaml
├── docs
├── .vitepress
│ ├── config.ts
│ ├── theme
│ │ ├── assets
│ │ │ ├── obsidian-logo.svg
│ │ │ └── vitepress-logo-large.webp
│ │ ├── components
│ │ │ ├── HomeContent.vue
│ │ │ ├── IntegrationCard.vue
│ │ │ ├── NavHeader.vue
│ │ │ ├── ThumbhashPreview.vue
│ │ │ ├── VPHeroImageLogo.vue
│ │ │ └── VPHeroImageLogoLayer.vue
│ │ ├── index.ts
│ │ └── styles
│ │ │ ├── main.css
│ │ │ └── vars.css
│ └── twoslashConfig.ts
├── data
│ ├── en
│ │ └── recentUpdates.data.ts
│ └── zh-CN
│ │ └── recentUpdates.data.ts
├── package.json
├── pages
│ ├── en
│ │ ├── guide
│ │ │ ├── _page.md
│ │ │ ├── getting-started.md
│ │ │ └── recent-updates.md
│ │ ├── index.md
│ │ ├── integrations
│ │ │ ├── index.md
│ │ │ ├── markdown-it-bi-directional-links
│ │ │ │ ├── Bi-directional Links Example Page.md
│ │ │ │ ├── Bi-directional Links Example Same Name Page.md
│ │ │ │ ├── audios
│ │ │ │ │ └── Applause.mp3
│ │ │ │ ├── getting-started.md
│ │ │ │ ├── images
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── foxtail field.jpg
│ │ │ │ │ ├── railway near by beach same name.jpg
│ │ │ │ │ └── same-name
│ │ │ │ │ │ └── railway near by beach same name.jpg
│ │ │ │ ├── index.md
│ │ │ │ ├── same-name
│ │ │ │ │ └── Bi-directional Links Example Same Name Page.md
│ │ │ │ ├── syntax.md
│ │ │ │ └── videos
│ │ │ │ │ └── Big rabbit came out of the hutch.mp4
│ │ │ ├── markdown-it-element-transform
│ │ │ │ ├── assets
│ │ │ │ │ ├── vite-plugin-inspect-screenshot-day-theme.png
│ │ │ │ │ └── vite-plugin-inspect-screenshot-night-theme.png
│ │ │ │ └── index.md
│ │ │ ├── markdown-it-unlazy-img
│ │ │ │ └── index.md
│ │ │ ├── obsidian-plugin-unocss
│ │ │ │ ├── assets
│ │ │ │ │ ├── demo-1.en.mp4
│ │ │ │ │ ├── demo-2.en.mp4
│ │ │ │ │ ├── demo-3.en.mp4
│ │ │ │ │ ├── how-to-install-screenshot-1.png
│ │ │ │ │ ├── how-to-install-screenshot-2.png
│ │ │ │ │ ├── how-to-install-screenshot-3.png
│ │ │ │ │ ├── how-to-install-screenshot-4.png
│ │ │ │ │ ├── screenshot-1.png
│ │ │ │ │ └── screenshot-2.png
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-breadcrumbs
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-enhanced-mark
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-enhanced-readabilities
│ │ │ │ ├── assets
│ │ │ │ │ └── demo-video-1.en.mov
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-git-changelog
│ │ │ │ ├── configure-ui.md
│ │ │ │ ├── configure-vite-plugins.md
│ │ │ │ ├── getting-started.md
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-highlight-targeted-heading
│ │ │ │ ├── assets
│ │ │ │ │ └── demo-video-1.en.mov
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-index
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-inline-link-preview
│ │ │ │ ├── configuration.md
│ │ │ │ ├── getting-started.md
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-meta
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-og-image
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-page-properties
│ │ │ │ └── index.md
│ │ │ ├── vitepress-plugin-sidebar
│ │ │ │ └── index.md
│ │ │ └── vitepress-plugin-thumbnail-hash
│ │ │ │ ├── getting-started.md
│ │ │ │ ├── index.md
│ │ │ │ └── thumbhash.md
│ │ ├── releases
│ │ │ ├── _page.md
│ │ │ └── migrations
│ │ │ │ ├── index.md
│ │ │ │ ├── v1-to-v2.md
│ │ │ │ └── v2-to-v3.md
│ │ ├── snippets
│ │ │ ├── _page.md
│ │ │ ├── configure-on-your-own-warning.md
│ │ │ ├── configure-tsconfig.md
│ │ │ ├── details-colored-diff.md
│ │ │ └── troubleshooting-cannot-find-module.md
│ │ └── ui
│ │ │ ├── _page.md
│ │ │ ├── asciinema-player
│ │ │ └── index.md
│ │ │ ├── button
│ │ │ └── index.md
│ │ │ ├── index.md
│ │ │ ├── input-horizontal-radio-group
│ │ │ └── index.md
│ │ │ ├── input-slider
│ │ │ └── index.md
│ │ │ ├── lazy-teleport-rive-canvas
│ │ │ └── index.md
│ │ │ └── tag
│ │ │ └── index.md
│ └── zh-CN
│ │ ├── guide
│ │ ├── _page.md
│ │ ├── getting-started.md
│ │ └── recent-updates.md
│ │ ├── index.md
│ │ ├── integrations
│ │ ├── index.md
│ │ ├── markdown-it-bi-directional-links
│ │ │ ├── audios
│ │ │ │ └── 鼓掌声.mp3
│ │ │ ├── getting-started.md
│ │ │ ├── images
│ │ │ │ ├── README.md
│ │ │ │ ├── same-name
│ │ │ │ │ └── 海滩铁轨 同名图片.jpg
│ │ │ │ ├── 一片 狗尾草.jpg
│ │ │ │ └── 海滩铁轨 同名图片.jpg
│ │ │ ├── index.md
│ │ │ ├── same-name
│ │ │ │ └── 双向链接示例同名页面.md
│ │ │ ├── syntax.md
│ │ │ ├── videos
│ │ │ │ └── 大兔子从兔窝中钻出.mp4
│ │ │ ├── 双向链接示例同名页面.md
│ │ │ └── 双向链接示例页面.md
│ │ ├── markdown-it-element-transform
│ │ │ ├── assets
│ │ │ │ ├── vite-plugin-inspect-screenshot-day-theme.png
│ │ │ │ └── vite-plugin-inspect-screenshot-night-theme.png
│ │ │ └── index.md
│ │ ├── markdown-it-unlazy-img
│ │ │ └── index.md
│ │ ├── obsidian-plugin-unocss
│ │ │ ├── assets
│ │ │ │ ├── demo-1.zh-CN.mp4
│ │ │ │ ├── demo-2.zh-CN.mp4
│ │ │ │ ├── demo-3.zh-CN.mp4
│ │ │ │ ├── how-to-install-screenshot-1.zh-CN.png
│ │ │ │ ├── how-to-install-screenshot-2.zh-CN.png
│ │ │ │ ├── how-to-install-screenshot-3.zh-CN.png
│ │ │ │ ├── how-to-install-screenshot-4.zh-CN.png
│ │ │ │ ├── screenshot-1.png
│ │ │ │ └── screenshot-2.png
│ │ │ └── index.md
│ │ ├── vitepress-plugin-breadcrumbs
│ │ │ └── index.md
│ │ ├── vitepress-plugin-enhanced-mark
│ │ │ └── index.md
│ │ ├── vitepress-plugin-enhanced-readabilities
│ │ │ ├── assets
│ │ │ │ └── demo-video-1.zh-CN.mov
│ │ │ └── index.md
│ │ ├── vitepress-plugin-git-changelog
│ │ │ ├── configure-ui.md
│ │ │ ├── configure-vite-plugins.md
│ │ │ ├── getting-started.md
│ │ │ └── index.md
│ │ ├── vitepress-plugin-highlight-targeted-heading
│ │ │ ├── assets
│ │ │ │ └── demo-video-1.zh-CN.mov
│ │ │ └── index.md
│ │ ├── vitepress-plugin-index
│ │ │ └── index.md
│ │ ├── vitepress-plugin-inline-link-preview
│ │ │ ├── configuration.md
│ │ │ ├── getting-started.md
│ │ │ └── index.md
│ │ ├── vitepress-plugin-meta
│ │ │ └── index.md
│ │ ├── vitepress-plugin-og-image
│ │ │ └── index.md
│ │ ├── vitepress-plugin-page-properties
│ │ │ └── index.md
│ │ ├── vitepress-plugin-sidebar
│ │ │ └── index.md
│ │ └── vitepress-plugin-thumbnail-hash
│ │ │ ├── getting-started.md
│ │ │ ├── index.md
│ │ │ └── thumbhash.md
│ │ ├── releases
│ │ ├── _page.md
│ │ └── migrations
│ │ │ ├── index.md
│ │ │ ├── v1-to-v2.md
│ │ │ └── v2-to-v3.md
│ │ ├── snippets
│ │ ├── _page.md
│ │ ├── configure-on-your-own-warning.md
│ │ ├── configure-tsconfig.md
│ │ ├── details-colored-diff.md
│ │ └── troubleshooting-cannot-find-module.md
│ │ └── ui
│ │ ├── _page.md
│ │ ├── asciinema-player
│ │ └── index.md
│ │ ├── button
│ │ └── index.md
│ │ ├── index.md
│ │ ├── input-horizontal-radio-group
│ │ └── index.md
│ │ ├── input-slider
│ │ └── index.md
│ │ ├── lazy-teleport-rive-canvas
│ │ └── index.md
│ │ └── tag
│ │ └── index.md
├── public
│ ├── _redirects
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── asciinema
│ │ └── test-nyancat.cast
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── icons
│ │ ├── crystall-ball-emoji-animated.riv
│ │ ├── easter-island-statue-emoji-animated.riv
│ │ ├── rocket-emoji-animated.riv
│ │ └── star-emoji-animated.riv
│ ├── logo-dark.png
│ ├── logo-light.png
│ ├── logo.svg
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── mstile-70x70.png
│ ├── obsidian-logo.svg
│ ├── safari-pinned-tab.svg
│ ├── site.webmanifest
│ └── thumbhash-test-image.jpg
├── tsconfig.json
├── uno.config.ts
├── vite-env.d.ts
├── vite.config.ts
└── yaml.d.ts
├── eslint.config.js
├── package.json
├── packages
├── integrations
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ └── vitepress
│ │ │ ├── client
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ └── utils
│ │ │ │ ├── index.ts
│ │ │ │ ├── slots.ts
│ │ │ │ └── types.ts
│ │ │ ├── index.ts
│ │ │ ├── markdown-it
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ │ └── vite
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ ├── tsconfig.json
│ └── yaml.d.ts
├── markdown-it-bi-directional-links
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.test.ts
│ │ ├── index.ts
│ │ ├── testdata
│ │ │ ├── foo bar.md
│ │ │ ├── foo.md
│ │ │ ├── foo.mp3
│ │ │ ├── foo.mp4
│ │ │ └── foo.png
│ │ └── utils.ts
│ └── tsconfig.json
├── markdown-it-element-transform
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── markdown-it-unlazy-img
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ └── index.ts
│ └── tsconfig.json
├── ui-asciinema
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── asciinema.d.ts
│ │ ├── components
│ │ │ ├── NuAsciinemaPlayer.vue
│ │ │ └── deps.ts
│ │ └── index.ts
│ └── tsconfig.json
├── ui-rive-canvas
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── components
│ │ │ ├── NuLazyTeleportRiveCanvas.vue
│ │ │ └── deps.ts
│ │ └── index.ts
│ └── tsconfig.json
├── ui
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── components
│ │ │ ├── NuButton.vue
│ │ │ ├── NuInputHighlight.vue
│ │ │ ├── NuInputHorizontalRadioGroup
│ │ │ │ ├── Option.vue
│ │ │ │ └── index.vue
│ │ │ ├── NuInputSlider.vue
│ │ │ ├── NuTag
│ │ │ │ ├── Item.vue
│ │ │ │ └── index.vue
│ │ │ └── NuVerticalTransition.vue
│ │ ├── composables
│ │ │ └── i18n.ts
│ │ └── index.ts
│ └── tsconfig.json
├── unconfig-vitepress
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── plugins
│ │ │ ├── index.ts
│ │ │ └── nolebase
│ │ │ │ └── index.ts
│ │ ├── theme.ts
│ │ └── types.ts
│ ├── tsconfig.json
│ └── yaml.d.ts
├── vitepress-plugin-breadcrumbs
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ └── NolebaseBreadcrumbs.vue
│ │ │ └── index.ts
│ │ ├── test
│ │ │ └── breadcrumbs-data-generator.test.ts
│ │ └── vitepress
│ │ │ ├── breadcrumbs-data-generator.ts
│ │ │ └── index.ts
│ └── tsconfig.json
├── vitepress-plugin-enhanced-mark
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ └── src
│ │ └── client
│ │ └── style.css
├── vitepress-plugin-enhanced-readabilities
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ ├── LayoutSwitch.vue
│ │ │ │ ├── LayoutSwitchContentLayoutMaxWidthSlider.vue
│ │ │ │ ├── LayoutSwitchPageLayoutMaxWidthSlider.vue
│ │ │ │ ├── Menu.vue
│ │ │ │ ├── MenuHelp.vue
│ │ │ │ ├── MenuTitle.vue
│ │ │ │ ├── ScreenLayoutSwitch.vue
│ │ │ │ ├── ScreenMenu.vue
│ │ │ │ ├── ScreenSpotlight.vue
│ │ │ │ ├── Spotlight.vue
│ │ │ │ ├── SpotlightHoverBlock.vue
│ │ │ │ ├── SpotlightStyles.vue
│ │ │ │ └── deps.ts
│ │ │ ├── composables
│ │ │ │ ├── animation.ts
│ │ │ │ └── i18n.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── style.css
│ │ │ └── types.ts
│ │ └── locales
│ │ │ ├── en.yaml
│ │ │ ├── index.ts
│ │ │ ├── ru-RU.yaml
│ │ │ └── zh-CN.yaml
│ ├── tsconfig.json
│ └── yaml.d.ts
├── vitepress-plugin-git-changelog
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ ├── Changelog.vue
│ │ │ │ ├── CommitRegularLine.vue
│ │ │ │ ├── CommitTagLine.vue
│ │ │ │ └── Contributors.vue
│ │ │ ├── composables
│ │ │ │ ├── changelog.ts
│ │ │ │ ├── i18n.ts
│ │ │ │ └── index.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── style.css
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ ├── locales
│ │ │ ├── en.yaml
│ │ │ ├── index.ts
│ │ │ ├── ru-RU.yaml
│ │ │ ├── yaml.d.ts
│ │ │ └── zh-CN.yaml
│ │ ├── types
│ │ │ ├── index.ts
│ │ │ └── virtual.d.ts
│ │ └── vite
│ │ │ ├── git.ts
│ │ │ ├── helpers.test.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ ├── markdownSection.ts
│ │ │ └── types.ts
│ ├── tsconfig.json
│ └── vitest.config.ts
├── vitepress-plugin-graph-view
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ └── GraphView.vue
│ │ │ ├── index.ts
│ │ │ └── style.css
│ │ ├── types
│ │ │ └── index.ts
│ │ └── vite
│ │ │ └── index.ts
│ └── tsconfig.json
├── vitepress-plugin-highlight-targeted-heading
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ └── client
│ │ │ ├── components
│ │ │ └── HighlightTargetedHeading.vue
│ │ │ ├── index.ts
│ │ │ └── style.css
│ └── tsconfig.json
├── vitepress-plugin-index
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ └── NolebaseRecentUpdates.vue
│ │ │ ├── composables
│ │ │ │ └── i18n.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── style.css
│ │ │ └── types.ts
│ │ ├── locales
│ │ │ ├── en.yaml
│ │ │ ├── index.ts
│ │ │ └── zh-CN.yaml
│ │ └── vitepress
│ │ │ ├── index.ts
│ │ │ └── recentUpdates.ts
│ ├── tsconfig.json
│ └── yaml.d.ts
├── vitepress-plugin-inline-link-preview
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ ├── InlineLinkPreview.vue
│ │ │ │ ├── LinkButton.vue
│ │ │ │ └── PopupIframe.vue
│ │ │ ├── composables
│ │ │ │ ├── i18n.ts
│ │ │ │ ├── iframe.ts
│ │ │ │ └── mouse.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── style.css
│ │ │ ├── types.ts
│ │ │ └── utils.ts
│ │ ├── locales
│ │ │ ├── en.yaml
│ │ │ ├── index.ts
│ │ │ └── zh-CN.yaml
│ │ └── markdown-it
│ │ │ ├── index.test.ts
│ │ │ └── index.ts
│ ├── tsconfig.json
│ └── yaml.d.ts
├── vitepress-plugin-meta
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ └── vitepress
│ │ │ ├── index.test.ts
│ │ │ ├── index.ts
│ │ │ └── testdata
│ │ │ ├── index.en.html
│ │ │ └── index.zh-CN.html
│ └── tsconfig.json
├── vitepress-plugin-og-image
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ └── vitepress
│ │ │ ├── assets
│ │ │ ├── SourceHanSansSC.otf
│ │ │ └── og-template.svg
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── options.test.ts
│ │ │ ├── options.ts
│ │ │ ├── types.ts
│ │ │ └── utils
│ │ │ ├── emoji.ts
│ │ │ ├── svg
│ │ │ ├── escape.ts
│ │ │ └── render.ts
│ │ │ ├── task.ts
│ │ │ └── vitepress
│ │ │ ├── locales.ts
│ │ │ └── sidebar.ts
│ └── tsconfig.json
├── vitepress-plugin-page-properties
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ │ ├── client
│ │ │ ├── components
│ │ │ │ ├── Datetime.vue
│ │ │ │ ├── PageProperties.vue
│ │ │ │ ├── PagePropertiesEditor.vue
│ │ │ │ └── ProgressBar.vue
│ │ │ ├── composables
│ │ │ │ ├── data.ts
│ │ │ │ ├── i18n.ts
│ │ │ │ └── propertyType.ts
│ │ │ ├── constants.ts
│ │ │ ├── index.ts
│ │ │ ├── locales.ts
│ │ │ ├── style.css
│ │ │ ├── types.ts
│ │ │ ├── utils.ts
│ │ │ └── virtual.d.ts
│ │ ├── locales
│ │ │ ├── en.yaml
│ │ │ ├── index.ts
│ │ │ └── zh-CN.yaml
│ │ └── vite
│ │ │ ├── index.ts
│ │ │ ├── markdownSection.ts
│ │ │ ├── pageProperties
│ │ │ ├── dynamic
│ │ │ │ └── readingTime.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ │ └── path.ts
│ ├── tsconfig.json
│ └── yaml.d.ts
├── vitepress-plugin-sidebar
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── index.ts
│ │ ├── sidebar.test.ts
│ │ └── sidebar.ts
│ └── tsconfig.json
└── vitepress-plugin-thumbnail-hash
│ ├── README.md
│ ├── build.config.ts
│ ├── package.json
│ ├── src
│ ├── client
│ │ ├── components
│ │ │ └── NolebaseUnlazyImg.vue
│ │ ├── index.ts
│ │ └── style.css
│ ├── types
│ │ └── index.ts
│ └── vite
│ │ ├── index.ts
│ │ └── utils.ts
│ └── tsconfig.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── tsconfig.json
├── uno.config.ts
└── vitest.workspace.ts
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2 | // README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
3 | {
4 | "name": "nolebase-integrations",
5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6 | "image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
7 |
8 | // Features to add to the dev container. More info: https://containers.dev/features.
9 | "features": {
10 | "ghcr.io/devcontainers-contrib/features/pnpm:2": {}
11 | },
12 |
13 | // Use 'forwardPorts' to make a list of ports inside the container available locally.
14 | "forwardPorts": [5173, 4173],
15 | "portsAttributes": {
16 | "5173": {
17 | "label": "dev port"
18 | },
19 | "4173": {
20 | "label": "build port"
21 | }
22 | },
23 |
24 | // Use 'postCreateCommand' to run commands after the container is created.
25 | "postCreateCommand": "pnpm i",
26 | // "postStartCommand": "pnpm docs:dev",
27 |
28 | // Configure tool-specific properties.
29 | "customizations": {
30 | "vscode": {
31 | // Set *default* container specific settings.json values on container create.
32 | "extensions": [
33 | "streetsidesoftware.code-spell-checker",
34 | "mikestead.dotenv",
35 | "EditorConfig.EditorConfig",
36 | "usernamehw.errorlens",
37 | "dbaeumer.vscode-eslint",
38 | "antfu.goto-alias",
39 | "lokalise.i18n-ally",
40 | "antfu.iconify",
41 | "yzhang.markdown-all-in-one",
42 | "antfu.unocss",
43 | "Vue.volar",
44 | "vitest.explorer",
45 | "redhat.vscode-yaml"
46 | ]
47 | },
48 | "codespaces": {
49 | "openFiles": [
50 | "./README.md"
51 | ]
52 | }
53 | }
54 |
55 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
56 | // "remoteUser": "root"
57 | }
58 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [LittleSound,nekomeowww] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
15 |
--------------------------------------------------------------------------------
/.github/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": ["local>nolebase/renovate-config", "schedule:weekly"]
4 | }
5 |
--------------------------------------------------------------------------------
/.github/workflows/production-docs-deployment.yaml:
--------------------------------------------------------------------------------
1 | name: Build Docs to Netlify
2 |
3 | on:
4 | push:
5 | branches:
6 | - 'main'
7 |
8 | jobs:
9 | build:
10 | name: Build
11 | runs-on: ubuntu-24.04
12 | environment:
13 | name: Production Docs
14 | url: https://nolebase-integrations.ayaka.io
15 | steps:
16 | - name: Checkout
17 | uses: actions/checkout@v4
18 | with:
19 | fetch-depth: 0
20 |
21 | - name: Setup pnpm
22 | uses: pnpm/action-setup@v4
23 |
24 | - name: Install Node.js 22.x
25 | uses: actions/setup-node@v4
26 | with:
27 | node-version: 22.16.0
28 | # registry-url required. Learn more at
29 | # https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
30 | registry-url: 'https://registry.npmjs.org'
31 | cache: pnpm
32 |
33 | - name: Install dependencies
34 | run: pnpm install --frozen-lockfile
35 |
36 | - name: Build docs
37 | run: |
38 | pnpm packages:build
39 | pnpm docs:build
40 | env:
41 | # As suggested in Verbose Build option to be able to track down errors https://github.com/vuejs/vitepress/issues/422
42 | # vitepress build command does not have --debug option, so we need to set it manually where the debug package is used.
43 | # DEBUG: 'vitepress:*'
44 | VUE_PROD_HYDRATION_MISMATCH_DETAILS_FLAG: '1'
45 |
46 | - name: Install Netlify CLI
47 | run: pnpm install -g netlify-cli@17.36.0
48 |
49 | - name: Push to Netlify
50 | timeout-minutes: 10
51 | working-directory: docs/
52 | run: |
53 | netlify deploy --dir 'docs/.vitepress/dist' --prod --debug
54 | env:
55 | NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
56 | NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
57 |
--------------------------------------------------------------------------------
/.github/workflows/release.yaml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 |
8 | permissions:
9 | contents: write
10 | issues: write
11 | pull-requests: write
12 | id-token: write
13 |
14 | jobs:
15 | release:
16 | name: Release
17 | runs-on: ubuntu-24.04
18 | steps:
19 | - name: Checkout
20 | uses: actions/checkout@v4
21 | with:
22 | fetch-depth: 0
23 |
24 | - name: Setup pnpm
25 | uses: pnpm/action-setup@v4
26 |
27 | - name: Install Node.js 22.x
28 | uses: actions/setup-node@v4
29 | with:
30 | node-version: 22.16.0
31 | # registry-url required. Learn more at
32 | # https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
33 | registry-url: 'https://registry.npmjs.org'
34 | cache: pnpm
35 |
36 | - name: Install dependencies
37 | run: pnpm install --frozen-lockfile
38 |
39 | - name: Packages build
40 | run: pnpm run packages:build
41 |
42 | - name: Packages publish
43 | run: pnpm publish -r --access public --no-git-checks
44 | env:
45 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
46 | NPM_CONFIG_PROVENANCE: true
47 |
48 | - name: Sync GitHub Release
49 | run: pnpm run changelogithub
50 | env:
51 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .Trash/
2 | .trash/
3 | .DS_Store
4 | **/.obsidian/
5 |
6 | .idea
7 | .nuxt
8 | .temp
9 | .vite-inspect
10 | *.local
11 | *.log
12 | components.d.ts
13 | dist
14 | node_modules
15 | .eslintcache
16 | **/.vitepress/docsMetadata.json
17 | **/.vitepress/cache/
18 |
19 | **/.netlify/*
20 | **/.netlify/functions-serve/*
21 |
22 | coverage/
23 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | link-workspace-packages=true
2 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "streetsidesoftware.code-spell-checker",
4 | "mikestead.dotenv",
5 | "EditorConfig.EditorConfig",
6 | "usernamehw.errorlens",
7 | "dbaeumer.vscode-eslint",
8 | "antfu.goto-alias",
9 | "lokalise.i18n-ally",
10 | "antfu.iconify",
11 | "yzhang.markdown-all-in-one",
12 | "antfu.unocss",
13 | "Vue.volar",
14 | "vitest.explorer",
15 | "redhat.vscode-yaml"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": false,
3 | "editor.codeActionsOnSave": {
4 | "source.fixAll.eslint": "explicit",
5 | "source.organizeImports": "never"
6 | },
7 | // The following is optional.
8 | // It's better to put under project setting `.vscode/settings.json`
9 | // to avoid conflicts with working with different eslint configs
10 | // that does not support all formats.
11 | "eslint.validate": [
12 | "javascript",
13 | "javascriptreact",
14 | "typescript",
15 | "typescriptreact",
16 | "vue",
17 | "html",
18 | "markdown",
19 | "json",
20 | "jsonc",
21 | "yaml"
22 | ],
23 | "typescript.tsdk": "node_modules/typescript/lib",
24 | "i18n-ally.localesPaths": [
25 | "packages/**/src/locales"
26 | ],
27 | "i18n-ally.keystyle": "nested"
28 | }
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023-PRESENT All the contributors of Nólëbase
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/bump.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'bumpp'
2 |
3 | export default defineConfig({
4 | recursive: true,
5 | commit: 'release: v%s',
6 | sign: true,
7 | })
8 |
--------------------------------------------------------------------------------
/changelogithub.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'changelogithub'
2 |
3 | export default defineConfig({ draft: true })
4 |
--------------------------------------------------------------------------------
/cspell.config.yaml:
--------------------------------------------------------------------------------
1 | version: "0.2"
2 | ignorePaths: []
3 | dictionaryDefinitions: []
4 | dictionaries: []
5 | words:
6 | - antfu
7 | - apng
8 | - asciicast
9 | - asciinema
10 | - Astro
11 | - Attributify
12 | - avatar
13 | - ayaka
14 | - Baloo
15 | - baloo-2
16 | - blurhash
17 | - bumpp
18 | - canvaskit
19 | - Chakra
20 | - chakra-petch
21 | - changelogithub
22 | - cijiugechu
23 | - colorette
24 | - composables
25 | - contributor
26 | - datetime
27 | - defu
28 | - easytag
29 | - ElMassimo
30 | - emittypes
31 | - evanw
32 | - execa
33 | - frontmatter
34 | - Gitea
35 | - graymatter
36 | - iconify
37 | - jfif
38 | - Logseq
39 | - mkdist
40 | - napi
41 | - neko
42 | - Nisekoi5
43 | - nodir
44 | - Northword
45 | - Noto
46 | - octicon
47 | - Petch
48 | - pjpeg
49 | - quotepath
50 | - Rehype
51 | - resvg
52 | - retext
53 | - rizumu
54 | - Roboto
55 | - shikijs
56 | - taze
57 | - testdata
58 | - Twoslash
59 | - unconfig
60 | - uncrypto
61 | - unlazy
62 | - unocss
63 | - unplugin
64 | - Vite
65 | - vitepress
66 | - vueuse
67 | ignoreWords: []
68 | import:
69 | - "@cspell/dict-ru_ru/cspell-ext.json"
70 | - "@nolebase/cspell-dict/cspell-ext.json"
71 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/assets/vitepress-logo-large.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nolebase/integrations/bd8f0743410b4bb665c7c04a26e390fec64a3b82/docs/.vitepress/theme/assets/vitepress-logo-large.webp
--------------------------------------------------------------------------------
/docs/.vitepress/theme/components/HomeContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
(): Plugin
36 |