komga/next-ui
Gauthier Roebroeck 44e6258919 i18n extract
2026-02-03 11:14:25 +08:00
..
.storybook style: lint 2026-02-03 11:14:25 +08:00
i18n i18n extract 2026-02-03 11:14:25 +08:00
public next-ui wip 2026-02-03 11:14:22 +08:00
public-msw bump deps 2026-02-03 11:14:25 +08:00
src i18n lint 2026-02-03 11:14:25 +08:00
.browserslistrc next-ui wip 2026-02-03 11:14:22 +08:00
.editorconfig next-ui wip 2026-02-03 11:14:22 +08:00
.env.development move API url to config 2026-02-03 11:14:24 +08:00
.env.test add some pinia colada tests 2026-02-03 11:14:24 +08:00
.eslintrc-auto-import.json bump deps 2026-02-03 11:14:23 +08:00
.gitignore vitest coverage 2026-02-03 11:14:25 +08:00
.prettierignore prettier ignore 2026-02-03 11:14:24 +08:00
.prettierrc.json vuetify stuff 2026-02-03 11:14:23 +08:00
CHANGELOG.md add wip changelog 2026-02-03 11:14:22 +08:00
chromatic.config.json ci: chromatic 2026-02-03 11:14:25 +08:00
dir2json.d.ts wrap settings in a card 2026-02-03 11:14:25 +08:00
env.d.ts tree shake icons 2026-02-03 11:14:23 +08:00
eslint.config.ts remove @mswjs/source 2026-02-03 11:14:24 +08:00
index.html index name 2026-02-03 11:14:23 +08:00
openapi-generator.mts rename openapi generator to avoid IDE errors 2026-02-03 11:14:22 +08:00
package-lock.json bump deps 2026-02-03 11:14:25 +08:00
package.json exclude stories from i18n extract 2026-02-03 11:14:25 +08:00
README.md add storybook tests for pages 2026-02-03 11:14:24 +08:00
tsconfig.app.json migrate from unplugin-icons to unocss icons preset 2026-02-03 11:14:24 +08:00
tsconfig.json next-ui wip 2026-02-03 11:14:22 +08:00
tsconfig.node.json load vuetify locale 2026-02-03 11:14:23 +08:00
uno.config.ts fix type check 2026-02-03 11:14:24 +08:00
vite.config.mts vite config for ts components 2026-02-03 11:14:25 +08:00
vitest.shims.d.ts add storybook 2026-02-03 11:14:24 +08:00

OpenAPI

OpenAPI-fetch is used to generate a fully typed client from the Komga OpenAPI documentation.

The openapi-generate tasks will generate bindings, and should be run when the OpenAPI definition has changed.

Pinia Colada

Pinia Colada is used for all the API queries and mutations.

Tests

Vitest projects are used to specify different kind of tests:

  • unit: unit tests
  • storybook: component tests, defined in Storybook stories. Those can be run from Storybook directly or through Vitest.

Mock Service Worker is used to mock the Komga API.

Code formatting

Both ESLint and b are used in combination.

Tasks:

  • ESLint: lint and lint:fix
  • Prettier: prettier and prettier:fix

Type checking

Vite does not perform type-checking and leaves the job to the IDE. The type-check task can be used to perform type checking.

Storybook

Storybook is used for component development and testing. Run storybook:dev to start the Storybook server.

i18n

FormatJS is used for i18n.

Message IDs are generated automatically using the ESLint plugin, and hard-coded message IDs should be avoided.

Tasks:

  • i18n:extract: extracts the messages from the source into the i18n folder. This folder is what Weblate uses.
  • i18n:compile: compiles the translated files in i18n into ./src/i18n. This folder is what the application uses at runtime.

The Vite plugin dir2json is used to load the available translation files, see ./src/utils/locale-helper.ts for more details.

Components

Vue template files are segregated in different categories depending on usage:

  • ./src/components: Pure UI components, driven by model/props. Those are reusable components.
  • ./src/fragments: Fragments interact with other layers of the application, like API or Pinia stores. They are split into separate files for easier organization, but are not necessarily reused.
  • ./src/pages: Pages make use of components/fragments as well as API / Pinia stores. Each Component in that folder is converted to a navigable route using unplugin-vue-router. Pages contain a special <route> to define the layout to use as well as other router meta attributes.
  • ./src/layouts: Wrapper component around Pages.

Components and Fragments are automatically imported using unplugin-vue-components.

Icons

UnoCSS Icons preset is used for icons, with the MDI set from Iconify.