npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sberbusiness/triplex-next

v1.27.0

Published

Библиотека компонентов дизайн-системы Triplex.

Readme

Triplex-next

Версионирование

  • Разработка версии для React 18 ведется в ветке main. Релизы с версии 1.0.0 до 2.0.0(не включительно).
  • Разработка версии для React 17 ведется в ветке release-0. Релизы с версии 0.10.0 до 1.0.0(не включительно).

🚀 Установка

npm install @sberbusiness/triplex-next @sberbusiness/icons-next

Импортировать стили

import '@sberbusiness/triplex-next/styles/triplex-next.css';
import '@sberbusiness/icons-next/styles/icons.css';

🔤 Шрифты

Компоненты Typography используют шрифты SBSansDisplay, SBSansText и SBSansTextMono. Для корректного отображения необходимо подключить шрифты в вашем проекте:

@font-face {
    font-family: 'SBSansDisplay';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansDisplay-Regular.woff2') format('woff2');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansDisplayMedium';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansDisplay-Medium.woff2') format('woff2');
    font-weight: 500;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansDisplaySemibold';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansDisplay-SemiBold.woff2') format('woff2');
    font-weight: 600;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansDisplayBold';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansDisplay-Bold.woff2') format('woff2');
    font-weight: 700;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansText';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansText-Regular.woff2') format('woff2');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansTextSemibold';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansText-Semibold.woff2') format('woff2');
    font-weight: 600;
    font-style: normal;
}

@font-face {
    font-family: 'SBSansTextMono';
    src: url('node_modules/@sberbusiness/triplex-next/assets/fonts/SBSansTextMono-Regular.woff2') format('woff2');
    font-weight: normal;
    font-style: normal;
}

📁 Структура

src/
  components/
    ComponentName/
      index.ts
      ComponentName.tsx
      styles/ComponentName.module.less
      __tests__/ComponentName.test.tsx

Каждый компонент должен иметь собственный index.ts, чтобы поддерживать генерацию exports в package.json.


📜 Скрипты

| Скрипт | Назначение | |-------|------------| | npm run build | Сборка компонентов и style.css в dist/ | | npm run storybook | Локальный просмотр компонентов | | npm run storybook:build | Сборка Storybook в storybook-static/ | | npm run test-visual:docker | Визуальные тесты в Docker-контейнере (сборка + запуск) | | npm run test-visual:docker:update | Обновить baseline-скриншоты в Docker-контейнере | | npm run test-visual:debug | Отладка визуальных тестов локально (Storybook должен быть запущен) | | npm run test-visual:ci | Визуальные тесты — используется в CI и Docker | | npm run test-visual:ci:update | Обновление baseline — используется в CI и Docker |


🧱 Добавление нового компонента

  1. Создать каталог:
src/components/Alert/
  1. Добавить файлы:
Alert.tsx
styles/Alert.module.less
index.ts         ← обязательный!
  1. Указать экспорт в src/index.ts:
export * from './components/Alert';

🧪 Тестирование

Проект использует Vitest для unit-тестирования и Testing Library для тестирования компонентов.

Визуальное регрессионное тестирование

Для визуального тестирования используется @storybook/test-runner + jest-image-snapshot.

Скриншоты снимаются на двух viewport'ах: XS (575px) и XL (1200px). Baseline-скриншоты хранятся в папке __screenshots__/ и коммитятся в git. Diff-изображения при падении сохраняются в __screenshots__/__diff__/ и игнорируются git'ом.

Важно: baseline-скриншоты создаются и обновляются только через Docker или CI (Linux). Локальные скриншоты на macOS несовместимы из-за разного рендеринга шрифтов.

Как обновить baseline-скриншоты

Через Docker (рекомендуется):

npm run test-visual:docker:update

Через CI:

  1. Запушить ветку с изменениями
  2. В GitHub → Actions → Update Visual Snapshots → Run workflow → выбрать ветку
  3. Воркфлоу пересоздаст скриншоты и сделает коммит в ту же ветку

Как запустить визуальные тесты

npm run test-visual:docker           # Проверка через Docker
npm run test-visual:docker:update    # Обновление baseline через Docker

Как запустить тесты только для одного компонента

test-storybook не поддерживает фильтрацию по имени стори. Единственный способ — временно сузить glob в .storybook/main.ts:

// Временно, только для одного компонента:
stories: ["../stories/Link/**/*.stories.@(ts|tsx|mdx)"],

// Вернуть обратно после:
stories: ["../stories/**/*.stories.@(ts|tsx|mdx)", "../stories/**/*.mdx"],

Затем запустить тесты, как обычно:

npm run test-visual:docker           # через Docker
npm run test-visual:debug            # локально (Storybook должен быть запущен)

Не забудьте вернуть glob обратно перед коммитом.

CI воркфлоу

Визуальные тесты в CI работают на собранной (build) версии Storybook, а не на dev-сервере — это исключает race conditions при загрузке модулей.

| Воркфлоу | Триггер | Что делает | |---|---|---| | visual-test.yml | Каждый PR | Прогоняет тесты, загружает диффы как артефакты при падении | | visual-update.yml | Ручной запуск (workflow_dispatch) | Пересоздаёт baselines и коммитит их в ветку |

Как отлаживать локально

npm run storybook             # в одном терминале
npm run test-visual:debug     # в другом (с PWDEBUG=1)

Для отладки одного компонента — сузить glob как описано выше.

Как исключить story из тестирования

// Конкретную story
export const MyStory: Story = {
    parameters: {
        testRunner: { skip: true },
    },
};

// Все stories компонента (в default export / meta)
const meta: Meta<typeof Button> = {
    component: Button,
    parameters: {
        testRunner: { skip: true },
    },
};

Как запустить тесты локально

npm run test-e2e                     # Запуск e2e тестов
npm run test-unit                    # Запуск unit тестов
npm run test-unit:watch              # Запуск unit тестов в режиме наблюдения
npm run test-unit:coverage           # Запуск unit тестов с отчётом о покрытии
npm run test-visual:docker           # Визуальные регрессионные тесты (Docker)
npm run test-visual:docker:update    # Обновить baseline-скриншоты (Docker)