@application-kit/ui

中文文档
0.10.0发布于 2026/11/06MITTypeScriptES Module近 30 天下载 3738

Vue-обёртки над UI-вендором, мост токенов оформления и тестовые помощники без продуктовых словарей

原始使用文档
文档目录7 节
  1. Тексты и локаль
  2. Тёмная тема
  3. Ошибка запроса
  4. Имена иконок
  5. Входы
  6. Порядок стилей
  7. Peer-зависимости

@application-kit/ui

Vue-обёртки над UI-вендором, мост токенов оформления (--p-* → --ui-*) и помощники спеков. Пакет не знает ни одного имени иконки и feature-flag'а продукта: их приложение передаёт при установке плагина. Тексты обёрток и локаль вендора для ru и en — в пакете, приложение может их переопределить.

import { UiVendorPlugin } from '@application-kit/ui'
import '@application-kit/ui/style.css'

app.use(new UiVendorPlugin({
  darkModeSelector: 'dark-theme',
  describeRequestError: (error, fallbackMessage, messages) => describe(error, fallbackMessage, i18n.global.t, messages),
  iconClass: (name) => `app-icon app-icon--${name}`,
  locale: { reference: (vue) => localeRef },
}))

Все три обязательные опции (darkModeSelector, describeRequestError, iconClass) проверяются типом и при создании плагина: без них конструктор бросает ошибку на старте приложения.

Тексты и локаль

Без опции messages обёртки берут DEFAULT_UI_MESSAGES по локали из locale.reference; неизвестная локаль и приложение без locale получают английские. Переданная messages заменяет их целиком, для другого языка или одной фразы её удобно собрать из пакетных:

messages: () => ({ ...defaultUiMessages(localeRef.value), table: { ...defaultUiMessages(localeRef.value).table, empty: '—' } })

Подписи самого вендора (календарь, кнопки подтверждения) для ru тоже в пакете; locale.overrides перекрывает их поштучно: { reference, overrides: { ru: { accept: 'Ок' } } }.

Тёмная тема

useDarkMode() отдаёт { isDark, toggle }. Источник правды — класс darkModeSelector на <html>, состояние одно на приложение. Класс читается при монтировании, поэтому первый рендер (сервер и гидрация) идёт со светлой темой.

LayoutTopbarThemeSwitcher — готовая кнопка темы для слота действий топбара. У иконочных кнопок топбара (LayoutTopbarIconButton, LayoutTopbarSubmenu) label обязателен: это доступное имя кнопки, а не видимая подпись.

Ошибка запроса

  • globalErrorToast.show(messageKey, supportId) — страховочный тост для кода вне setup-контекста (транспортный слой). messageKey — ключ словаря приложения, null — общий текст requestError.unexpected. До подключения ошибки копятся.
  • useGlobalErrorToastConnection(translate) — подключение в корневом компоненте, при монтировании.
  • withSupportId(message, supportId, supportIdLine) — формат «текст + код обращения», общий с describeRequestError приложения.
  • useErrorStore() — факт ошибки рендера и код обращения для страницы ошибки.

Имена иконок

Реестр пустой — приложение расширяет его своими именами, и без этого ни одна иконка не компилируется:

declare module '@application-kit/ui' {
  interface UiIconRegistryInterface { refresh: true }
}

Входы

  • . — компоненты, composables (действия с флагом ожидания — useAsyncAction, useOptimisticRowActions: текст отказа собирает describeRequestError приложения, ключи сообщений — параметром), UiVendorPlugin, листинговые сторы, типы;
  • /testing — installVendorPlugins, submitForm, заглушки браузерных API для jsdom, гейт токенов продукта assertTokensDeclared({ sourceRoot });
  • /lint — данные вендора для ESLint потребителя без Vue и стилей: шаблоны импорта и CSS-класса, подпути вендора, имена обёрток полей для label-has-for (их собирает @application-kit/lint-config);
  • /style.css — стили компонентов и их анимации (подключить один раз);
  • /styles/tokens.scss — мост токенов: приложение сверяет по нему свои var(--ui-*);
  • /styles/base.scss — база документа: reset, корневые стили html/body, типографика;
  • /styles/icons.scss — миксины box и mask для своих иконок приложения, без вывода CSS;
  • /styles/variables.scss — масштаб, брейкпойнт и шрифт для стилей приложения.

Порядок стилей

Глобальная таблица приложения подключает мост токенов первым и один раз, за ним — базу, затем своё: база читает --ui-* и должна стоять раньше правил приложения, которые её переопределяют.

@use "@application-kit/ui/styles/tokens";
@use "@application-kit/ui/styles/base";
// дальше — шрифты и иконки продукта

style.css от этой таблицы не зависит: правила компонентов сильнее элементных селекторов базы.

Peer-зависимости

vue, pinia, vue-router, openvue — по одному экземпляру на приложение; vitest нужен только для /testing.

版本与发布记录

@application-kit/ui 共发布 19 个版本,首次发布于 2026/10/09;过去 12 个月发布了 19 个版本。

版本发布日期距今
0.10.0latest2026/11/061 天前
0.9.02026/11/052 天前
0.8.02026/11/043 天前
0.7.02026/11/043 天前
0.6.02026/11/043 天前
0.5.12026/11/034 天前

关于 @application-kit/ui 的常见问题

@application-kit/ui 是什么?

Vue-обёртки над UI-вендором, мост токенов оформления и тестовые помощники без продуктовых словарей

如何安装 @application-kit/ui?

在项目目录运行 npm install @application-kit/ui,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:vue(^3.5.0)、pinia(^4.0.0)、openvue(1.0.0-rc.0)、vue-router(^5.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@application-kit/ui 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@application-kit/ui 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@application-kit/ui 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@application-kit/ui 可以商用吗?

@application-kit/ui 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@application-kit/ui 的下载量有多少?

根据 npm 官方下载统计,@application-kit/ui 在 2026/10/07 – 2026/11/05 这 30 天内被下载 3,738 次,日均约 125 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@application-kit/ui 还在维护吗?

最新版本 0.10.0 发布于 2026/11/06(1 天前);至今共发布 19 个版本,其中过去 12 个月发布了 19 个;首次发布于 2026/10/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。