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

tot-ui-kit

v2.23.0

Published

UI Kit with Layout, MainMenu, and theme support for React applications

Readme

tot-ui-kit

UI-библиотека с Layout, ScMainMenu и поддержкой светлой/тёмной темы для React-приложений.

Важно: Библиотека использует обычный CSS (без CSS Modules). В проектах на webpack убедитесь, что подключены css-loader и style-loader. В Vite всё работает из коробки.

Установка

npm install tot-ui-kit @sberbusiness/triplex-next @sberbusiness/icons-next

⚠️ Критически важно: Подключение CSS

Порядок CSS импортов критичен для корректной работы тем!

В входном файле приложения (src/main.tsx):

// src/main.tsx

// 1. CSS импорты — ПЕРВЫМИ и в этом порядке!
import '@sberbusiness/icons-next/styles/icons.css'   // Стили иконок
import '@sberbusiness/triplex-next/styles/triplex-next.css'  // Triplex базовые стили
import 'tot-ui-kit/dist/index.css'  // Стили Layout + меню + темы (включает global.css)
import './styles/index.css'          // Ваши локальные стили — последними

// 2. Только потом React и компоненты
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App'

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

Частые ошибки

| Проблема | Симптом | Решение | |----------|---------|---------| | Отсутствует tot-ui-kit/dist/index.css | Меню без стилей, тема не работает | Добавить импорт | | Неправильный порядок CSS | Стили перебиваются | icons → triplex → tot-ui-kit → локальные | | CSS после React импортов | Стили могут не применяться | CSS импорты в самом начале файла |

Быстрый старт

import { Layout } from 'tot-ui-kit'

export const App = () => (
  <Layout
    menuProps={{
      baseUrl: 'http://localhost:4000',
      menuId: '<your-menu-id>',
      activeAppId: 'my-app',
      systemTitle: 'Моё приложение',
    }}
  >
    {/* контент страниц */}
  </Layout>
)

Темы: светлая и тёмная

Как это работает

Layout автоматически управляет темой:

  1. Triplex ThemeProvider — инжектит CSS-переменные для всех Triplex-компонентов (Button, TextField, Select, Tabs и т.д.)
  2. CSS-переменные — дополнительные переопределения в global.css
  3. CSS-хак для иконок — принудительное переопределение цветов SVG из @sberbusiness/icons-next

При смене темы Layout:

  • Устанавливает data-theme="light" / data-theme="dark" на <html>
  • Добавляет классы triplex-theme-light / triplex-theme-dark
  • Переключает ThemeProvider из triplex-next
  • Сохраняет выбор в localStorage

Кнопка переключения встроена в боковое меню (иконка солнца/луны).

Использование в коде

import { Layout, useTheme, getCurrentTheme } from 'tot-ui-kit'

// Хук — реактивно обновляется при смене темы
const theme = useTheme() // 'light' | 'dark'

// Функция — получить текущую тему синхронно
const currentTheme = getCurrentTheme()

⭐ Рекомендуемый способ: Body из triplex-next

Лучший способ создать контейнер с автоматической поддержкой тем:

import { Body, EBodyPageType, EBodyPageVerticalMargin } from '@sberbusiness/triplex-next'

const MyPage = () => (
  <div className={styles.container}>
    {/* Island с автоматическим переключением тем */}
    <Body
      type={EBodyPageType.FIRST}
      verticalMargin={EBodyPageVerticalMargin.SMALL}
      className={styles.section}
    >
      <h2>Заголовок секции</h2>
      {/* Ваш контент */}
    </Body>
  </div>
)

Преимущества:

  • ✅ Не нужно писать CSS для тёмной темы — Body автоматически переключает цвета
  • ✅ Консистентный дизайн с остальными Triplex компонентами
  • type="FIRST" создаёт Island (карточку с фоном), type="SECOND" — без фона

Подробнее: triplex-design.ru/next/ru/Web/Components/platform/body%20page

Ручной способ: CSS-переменные

/* Используйте CSS-переменные из Triplex */
.my-card {
  background: var(--triplex-next-Card-Static_General_Background-1-14-0);
  color: var(--triplex-next-Typography-Primary_Color-1-14-0);
}

/* Или через data-theme */
html[data-theme='dark'] .my-card {
  background: #2d2d30;
}

Поддерживаемые компоненты

Тёмная тема работает из коробки для:

  • Typography, Button, Tabs
  • TextField, SelectField, Checkbox, Radio
  • Card, Modal, Dropdown
  • Link, Tag, Divider, Island
  • Иконки из @sberbusiness/icons-next (крестики, шевроны и т.д.)

Подробная документация: см. DARK-THEME.md

Основные пропсы

Layout

| Проп | Описание | |------|----------| | menuProps | Пропсы для ScMainMenu (кроме theme/layout) | | initialMenuLayout | Начальное состояние меню: 'full' или 'compact' | | initialTheme | Начальная тема: 'light' или 'dark' |

ScMainMenu

| Проп | Описание | |------|----------| | baseUrl | Базовый URL API | | menuId | ID меню для загрузки данных | | activeAppId | ID активного приложения | | useMockData | Использовать встроенные mock-данные | | onLayoutChange | Callback при переключении layout | | onThemeChange | Callback при переключении темы |

Peer Dependencies

{
  "@sberbusiness/triplex-next": "^1.14.0",
  "@sberbusiness/icons-next": "^1.11.0",
  "react": "^18.0.0",
  "react-dom": "^18.0.0"
}

Структура файлов (темы)

tot-ui-kit/
├── src/
│   ├── global.css           # CSS-переменные для тёмной темы + хаки для иконок
│   ├── components/
│   │   └── Layout/
│   │       └── Layout.tsx   # ThemeProvider + логика переключения
│   └── theme/
│       └── index.ts         # useTheme, getCurrentTheme
├── DARK-THEME.md            # Подробная документация по темам
└── README.md                # Этот файл

Лицензия

MIT