Developing UI components with Bitrix24 UI Kit (React)

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Building UI Components with Bitrix24 UI Kit (React)

Applications embedded in a Bitrix24 portal that look "foreign" are a persistent problem. Custom fonts, non-standard buttons, hand-rolled modals — users perceive such applications as an external service rather than part of their work environment. Bitrix24 UI Kit addresses this: a set of React components that accurately reproduce the Bitrix24 visual language, including dark theme and RTL locale support.

Bitrix24 UI Kit Structure

The official @bitrix24/b24jssdk package contains a TypeScript SDK for the REST API. UI components in the Bitrix24 ecosystem are delivered in two ways: via BX.UI.* in Bitrix templates (vanilla JS) and via React components in @bitrix24/b24ui for applications.

Core component set:

import {
  Button, ButtonSize, ButtonColor,
  Input, InputSize,
  Select, SelectSize,
  Table, TableColumn,
  Badge, BadgeColor,
  Modal, ModalSize,
  Notification, NotificationType,
  Avatar, AvatarSize,
  Chip, ChipColor,
} from '@bitrix24/b24ui';

Components use CSS variables from the portal theme. When the theme changes (light/dark), all components update automatically without additional logic.

Theme Setup and Initialization

import { B24ThemeProvider, useB24Theme } from '@bitrix24/b24ui';

function App() {
  return (
    <B24ThemeProvider>
      <AppContent />
    </B24ThemeProvider>
  );
}

// Hook for theme-aware rendering
function ThemeAwareComponent() {
  const { theme, isDark } = useB24Theme();
  // theme: 'light' | 'dark' | 'auto'
  return <div className={isDark ? 'dark-specific' : ''}> ... </div>;
}

The theme synchronizes with the portal via BX24.getTheme() and the theme-change event — when the user switches the theme in Bitrix24, the application reflects the change instantly.

Case Study: KPI Dashboard for a Sales Team

The application displays manager KPIs in real time: call counts, meetings, active deals, funnel conversion. Data comes from the Bitrix24 CRM via REST API plus a custom aggregation backend.

Requirement: the interface must look like part of Bitrix24, support both themes, and be immediately understandable without training.

UI Kit components used: Table for the manager list, Badge for statuses (met/not met), Avatar for employee photos, Select for period selection, Button for export.

Custom components built on top of the UI Kit: KPI progress bar (using UI Kit CSS variables for colors), sparkline charts (Recharts styled to match the Bitrix24 palette), a ranking table with drag-and-drop column sorting.

Result: users do not perceive the dashboard as a "third-party app" — the interface integrates naturally into the portal workspace.

Customizing and Extending Components

The UI Kit does not cover every scenario. For custom components, design tokens from the system are used via CSS variables:

.custom-card {
  background:    var(--b24-color-base-3);
  border:        1px solid var(--b24-color-base-50);
  border-radius: var(--b24-radius-md);
  color:         var(--b24-color-base-90);
  font-family:   var(--b24-font-family);
}

The token list is available in the UI Kit documentation. Using tokens instead of hardcoded values is mandatory for correct behavior across all themes.

Table Component with Sorting

const columns: TableColumn<Manager>[] = [
  {
    key:    'name',
    title:  'Manager',
    render: (row) => (
      <div className="flex items-center gap-2">
        <Avatar src={row.photo} name={row.name} size={AvatarSize.XS} />
        <span>{row.name}</span>
      </div>
    ),
    sortable: true,
  },
  {
    key:    'deals',
    title:  'Deals',
    render: (row) => (
      <Badge
        color={row.deals >= row.target ? BadgeColor.Success : BadgeColor.Warning}
        label={`${row.deals} / ${row.target}`}
      />
    ),
    sortable: true,
  },
];

<Table
  columns={columns}
  rows={managersData}
  onSort={(key, direction) => setSortConfig({ key, direction })}
  loading={isLoading}
/>

Scope of Work

  • Requirements audit, component plan
  • Project setup: @bitrix24/b24jssdk, @bitrix24/b24ui, TypeScript
  • Component development: standard (from UI Kit) + custom (on top of design tokens)
  • Dark theme support, testing in both variants
  • Documentation of custom components for the support team

Timeline: a basic screen set using the UI Kit — 1–2 weeks. A custom design system built on top of UI Kit tokens — from 3 weeks.