@astral/ui

中文文档
4.120.1发布于 2026/11/06MITTypeScriptESM + CJS近 30 天下载 3393

@astral/ui - это UI-KIT, на основе которого строятся интерфейсы в Астрал-Софт.

原始使用文档
文档目录22 节
  1. Example
  2. Installation
  3. global.d.ts
  4. next.config
  5. _app.tsx
  6. 3.0.0 -> 4.0.0
  7. Fonts
  8. 2.0.0 -> 3.0.0
  9. ConfigProvider
  10. Typography
  11. Grid
  12. Form
  13. 1.0.0 -> 2.0.0
  14. Deps
  15. global.d.ts
  16. fonts
  17. illustrations
  18. @astral/form
  19. @astral/icons
  20. DatePickerProvider
  21. Медленно выполняются vitest тесты при импорте пакета
  22. redirectToLink

@astral/ui

@astral/ui - это UI-KIT, на основе которого строятся интерфейсы в Астрал-Софт.

Table of contents

Storybook

Storybook содержит документацию компонентов @astral/ui.

Introduction

@astral/ui - это единая точка входа для всех основных составных частей UI-KIT.

@astral/ui экспортирует:

  • основу для построения интерфейсов: react-компоненты, хуки, utils,
  • обертки компонентов для интеграции с react-hook-form,
  • иконки, доступные в дизайн-системе.

Playground

Доступен Codesandbox для проверки функционала.

Getting started with Next.js

Example

Пример использования и интеграции @astral/ui находится здесь.

Installation

npm --save @astral/ui

global.d.ts

/// <reference types="@astral/ui/declarations" />

next.config

const nextConfig = {
  ...
  transpilePackages: [
    '@astral/ui'
  ],
  webpack(config) {
    config.module.rules.push({
      test: /\.(woff|woff2)$/i,
      issuer: { and: [/\.(js|ts)x?$/] },
      type: 'asset/resource',
    });

    return config;
  },
  ...
};

module.exports = nextConfig;

_app.tsx

import { AppProps } from 'next/app';
import Head from 'next/head';
import * as monitoringErrorService from '@sentry/nextjs';
import {
  type BrandPalette,
  ConfigProvider,
  NotificationContainer,
  StylesCacheProvider,
  ThemeProvider,
  createTheme,
} from '@astral/ui';
import { createStylesCache as createStylesServerCache } from '@astral/ui/server';

import { MainLayout } from '@example/modules/LayoutModule';

const brandPalette: BrandPalette = {
  primary: {
    900: '#5D3FD4',
    800: '#6746EB',
    700: '#8566FF',
    600: '#9075FF',
    500: '#9D85FF',
    400: '#B29EFF',
    300: '#C2B2FF',
    200: '#E0D9FF',
    100: '#EFEBFF',
  },
  secondary: {
    800: '#5653FF',
  },
  brand: {
    800: '#6746EB',
    background: '#FAFBFC',
  },
};

export const theme = createTheme({ palette: brandPalette });

const stylesCache = createStylesServerCache({ key: 'next' });

export const App = ({ Component, pageProps }: AppProps) => {
  return (
    <>
      <Head>
        <meta
          name="viewport"
          content="width=device-width, initial-scale=1, shrink-to-fit=no"
        />
        <title>Astral.Example</title>
      </Head>
      <StylesCacheProvider value={stylesCache}>
        <ConfigProvider
          captureException={monitoringErrorService.captureException}
        >
          <ThemeProvider theme={theme}>
            <NotificationContainer />
            <MainLayout>
              <Component {...pageProps} />
            </MainLayout>
          </ThemeProvider>
        </ConfigProvider>
      </StylesCacheProvider>
    </>
  );
};

export default App;

Migration guide

3.0.0 -> 4.0.0

Fonts

Подключение шрифтов через объект theme больше не поддерживается.

Шрифты необходимо подключать через сервис для хранения статичных файлов

Инструкция для подключения шрифтов

⚠️ Для подключения шрифтов необходимо настроить Content Security Policy.

2.0.0 -> 3.0.0

ConfigProvider

В ConfigProvider добавлен prop imagesMap:

type ImagesMap = {
  /**
   * изображение при отсутствии данных (используется в DataGrid)
   */
  noDataImgSrc: string;
  /**
   * изображение при ошибке (используется в ContentState)
   */
  defaultErrorImgSrc: string;
  /**
   * изображение при ошибке при обновлении продукта (используется в ContentState/ErrorBoundary)
   */
  outdatedReleaseErrorImgSrc: string;
};

Данный prop содержит ссылки на img, которые используются в компонентах ui-kit.

Breaking changes:

  • Компонент DataGrid теперь не инкапсулирует инлайновую svg для отображения NoData статуса. Для того, чтобы изображение появилось необходимо в ConfigProvider указать prop imagesMap.noDataImgSrc
  • Компонент ContentState больше не требует required prop errorState.imgSrc. Ссылка на изображение берется из ConfigProvider
  • Компонент ErrorBoundary перехватывает ошибку устаревших билдов и корректно её обрабатывает, для того, чтобы отобразилось изображение, необходимо в ConfigProvider указать prop images.outdatedReleaseErrorImgSrc
import noDataImgSrc from '@astral/ui/illustrations/no-data.svg';
import outdatedReleaseErrorImgSrc from '@astral/ui/illustrations/outdated-release.svg';

/* cspell:disable-next-line */
import errorImgSrc from 'static/erorr-inmg.png';

const App = () => {
  return (
      <ConfigProvider
          imagesMap={{
              defaultErrorImgSrc: errorImgSrc,
              noDataImgSrc,
              outdatedReleaseErrorImgSrc,
          }}
      >
          <ThemeProvider>
              <Layout />
          </ThemeProvider>
      </ConfigProvider>
  );
};

Typography

Breaking changes:

  • Удалены пропсы, которые являлись css правилами (margin, border, mr...)
  • Prop color принимает только string. Удалена возможность использовать для color функцию

Актуальные props находятся здесь.

Grid

Grid из @astral/ui v2 был переименован в LegacyGrid, в четвертой версии @astral/ui данный компонент будет удален.

Сигнатуру нового Grid вы можете увидеть в storybook.

Form

Breaking changes:

  • Была удалена дефолтная валидация для компонентов: FormDatePicker, FormMobilePhoneField
  • Для филдов формы был удален props rules. Для валидации форм используйте валидацию по схеме с помощью библиотеки @astral/validations

1.0.0 -> 2.0.0

Deps

Теперь пакет @astral/ui аккумулирует и реэкспортит пакеты:

  • @astral/fonts
  • @astral/illustrations
  • @astral/icons
  • @astral/form
  • @astral/components

Необходимо заменить зависимости:

{
  ...
  "@astral/icons": "^1.19.4",
  "@astral/form": "^1.19.4",
  "@astral/fonts": "^1.19.4",
  "@astral/ui": "^1.19.4",
  ...
}

На:

{
  ...
  "@astral/ui": "^1.19.4",
  ...
}

global.d.ts

Заменить файл global.d.ts:
global.d.ts

/// <reference types="@astral/ui/declaration/emotion" />
/// <reference types="@astral/ui/declaration/mui-material" />
/// <reference types="@emotion/react/types/css-prop" />

На:
global.d.ts

/// <reference types="@astral/ui/declarations" />

fonts

Пакет @astral/fonts включен в пакет @astral/ui.

Необходимо заменить импорты:

import UbuntuBoldWoff from '@astral/fonts/UbuntuBold.woff';
import UbuntuBoldWoff2 from '@astral/fonts/UbuntuBold.woff2';

На:

import UbuntuBoldWoff from '@astral/ui/fonts/UbuntuBold.woff';
import UbuntuBoldWoff2 from '@astral/ui/fonts/UbuntuBold.woff2';

И внести соответствующие правки в конфиг сборщика для того, чтобы @astral/ui/fonts обрабатывались как шрифты.

illustrations

Пакет @astral/illustrations включен в пакет @astral/ui.

Необходимо заменить импорты:

import certImgSrc from '@astral/illustrations/cert.svg';

На:

import certImgSrc from '@astral/ui/illustrations/cert.svg';

И внести соответствующие правки в конфиг сборщика для того, чтобы @astral/ui/fonts обрабатывались как шрифты.

@astral/form

Все элементы пакета @astral/form получили префиксы form. Весь @astral/form теперь экспортируется из @astral/ui.

import { useForm, useFormWatch, useFormController } from '@astral/ui';

@astral/icons

Весь @astral/icons теперь экспортируется из @astral/ui.

import { QuitOutlineMd } from '@astral/ui';

DatePickerProvider

Компонент был удален, используйте ConfigProvider.

Troubleshooting

Медленно выполняются vitest тесты при импорте пакета

Для того чтобы ускорить выполнение vitest тестов, необходимо добавить следующий параметр conditions в vitest.config.ts:

/// <reference types="vitest" />

import react from '@vitejs/plugin-react-swc';
import { defineConfig } from 'vitest/config';
import tsconfigPaths from 'vite-tsconfig-paths';

export default defineConfig({
  plugins: [react(), tsconfigPaths()],
  resolve: {
    conditions: ['vitest'],
  },
  test: {
    environment: 'happy-dom',
  },
});

В пакете есть специальное свойство exports.vitest, оптимизирующее парсинг пакета для vitest. Исходна проблема: vitest плохо работает с barrel files.

utils

Table of contents

Утилита для перехода по ссылке

import { redirectToLink } from '@astral/ui';

// Открытие ссылки в текущей вкладке или фрейме
redirectToLink('/');

// Открытие ссылки в новой вкладке
redirectToLink('/', '_blank')

版本与发布记录

@astral/ui 共发布 1,362 个版本,首次发布于 2022/02/02;过去 12 个月发布了 276 个版本。

版本发布日期距今
4.120.1latest2026/11/061 天前
4.120.02026/11/034 天前
4.119.12026/10/308 天前
4.119.02026/10/2315 天前
4.118.02026/10/0929 天前
4.117.02026/10/061 个月前

其他发布通道:test → 1.0.0-test.1672210978,alpha → 4.0.0-alpha.50,rc → 4.62.1-rc.1。

关于 @astral/ui 的常见问题

@astral/ui 是什么?

@astral/ui - это UI-KIT, на основе которого строятся интерфейсы в Астрал-Софт.

如何安装 @astral/ui?

在项目目录运行 npm install @astral/ui,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^17.0.0 || ^18.0.0 || ^19.0.0)、react-dom(^17.0.0 || ^18.0.0 || ^19.0.0)、@types/react(^17.0.0 || ^18.0.0 || ^19.0.0)、@astral/validations(^4.24.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@astral/ui 支持 TypeScript 吗?

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

@astral/ui 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@astral/ui 可以商用吗?

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

@astral/ui 的下载量有多少?

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

@astral/ui 还在维护吗?

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