# Основные возможности

- Human documentation: [https://docs.univer.ai/ru-RU/guides/sheets/features/core](https://docs.univer.ai/ru-RU/guides/sheets/features/core)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/sheets/features/core.md](https://docs.univer.ai/ru-RU/guides/sheets/features/core.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [sheets/features/core/index.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/features/core/index.ru-RU.mdx)

---

#### Package metadata

```json
{
  "mobile": true,
  "preset": [
    {
      "client": "@univerjs/preset-sheets-core",
      "locale": "@univerjs/preset-sheets-core/locales/ru-RU",
      "style": "@univerjs/preset-sheets-core/lib/index.css"
    }
  ],
  "plugins": [
    {
      "client": "@univerjs/core"
    },
    {
      "client": "@univerjs/engine-formula"
    },
    {
      "client": "@univerjs/engine-render"
    },
    {
      "client": "@univerjs/design",
      "locale": "@univerjs/design/locale/ru-RU",
      "style": "@univerjs/design/lib/index.css"
    },
    {
      "client": "@univerjs/ui",
      "locale": "@univerjs/ui/locale/ru-RU",
      "style": "@univerjs/ui/lib/index.css"
    },
    {
      "client": "@univerjs/docs"
    },
    {
      "client": "@univerjs/docs-ui",
      "locale": "@univerjs/docs-ui/locale/ru-RU",
      "style": "@univerjs/docs-ui/lib/index.css",
      "facade": "@univerjs/docs-ui/facade"
    },
    {
      "client": "@univerjs/sheets",
      "locale": "@univerjs/sheets/locale/ru-RU",
      "facade": "@univerjs/sheets/facade"
    },
    {
      "client": "@univerjs/sheets-ui",
      "locale": "@univerjs/sheets-ui/locale/ru-RU",
      "style": "@univerjs/sheets-ui/lib/index.css",
      "facade": "@univerjs/sheets-ui/facade"
    },
    {
      "client": "@univerjs/sheets-formula",
      "facade": "@univerjs/sheets-formula/facade"
    },
    {
      "client": "@univerjs/sheets-formula-ui",
      "locale": "@univerjs/sheets-formula-ui/locale/ru-RU",
      "style": "@univerjs/sheets-formula-ui/lib/index.css"
    },
    {
      "client": "@univerjs/sheets-numfmt",
      "facade": "@univerjs/sheets-numfmt/facade"
    },
    {
      "client": "@univerjs/sheets-numfmt-ui",
      "locale": "@univerjs/sheets-numfmt-ui/locale/ru-RU",
      "style": "@univerjs/sheets-numfmt-ui/lib/index.css"
    }
  ],
  "server": false
}
```

Основные возможности Univer Sheets включают редактор электронных таблиц, движок формул, движок рендеринга, движок форматирования чисел, дизайн-систему и библиотеку UI-компонентов. Вместе они образуют мощную платформу для работы с электронными таблицами, которая поддерживает различные форматы и сложные операции.

## Возможности

Основные возможности Univer Sheets:

* **Рендеринг электронных таблиц**: поддерживает рендеринг Univer Sheets, включая отрисовку курсора и выделения.
* **Стилизация ячеек**: позволяет настраивать шрифт, цвет, границы, выравнивание и другие параметры ячеек.
* **Вычисление формул**: позволяет добавлять и вычислять формулы и поддерживает почти все функции Excel, включая математические, статистические, текстовые функции и функции для работы с датами.
* **Форматирование чисел**: позволяет применять к числам денежный, процентный формат, формат даты и другие форматы.
* **Линии сетки и закреплённые области**: поддерживает отображение линий сетки и закрепление областей, упрощая просмотр и редактирование больших наборов данных.
* **Стили по умолчанию**: позволяет задать для электронной таблицы шрифт, размер, цвет и другие параметры по умолчанию.
* **Система плагинов**: позволяет создавать собственные плагины, например для формул, изображений и диаграмм. Это одна из ключевых архитектурных возможностей Univer.

## Режим плагинов

### Установка

#### npm

```bash
npm install @univerjs/core @univerjs/design @univerjs/engine-render @univerjs/engine-formula @univerjs/ui @univerjs/docs @univerjs/docs-ui @univerjs/sheets @univerjs/sheets-ui @univerjs/sheets-formula @univerjs/sheets-formula-ui @univerjs/sheets-numfmt @univerjs/sheets-numfmt-ui
```

#### pnpm

```bash
pnpm add @univerjs/core @univerjs/design @univerjs/engine-render @univerjs/engine-formula @univerjs/ui @univerjs/docs @univerjs/docs-ui @univerjs/sheets @univerjs/sheets-ui @univerjs/sheets-formula @univerjs/sheets-formula-ui @univerjs/sheets-numfmt @univerjs/sheets-numfmt-ui
```

#### yarn

```bash
yarn add @univerjs/core @univerjs/design @univerjs/engine-render @univerjs/engine-formula @univerjs/ui @univerjs/docs @univerjs/docs-ui @univerjs/sheets @univerjs/sheets-ui @univerjs/sheets-formula @univerjs/sheets-formula-ui @univerjs/sheets-numfmt @univerjs/sheets-numfmt-ui
```

#### bun

```bash
bun add @univerjs/core @univerjs/design @univerjs/engine-render @univerjs/engine-formula @univerjs/ui @univerjs/docs @univerjs/docs-ui @univerjs/sheets @univerjs/sheets-ui @univerjs/sheets-formula @univerjs/sheets-formula-ui @univerjs/sheets-numfmt @univerjs/sheets-numfmt-ui
```

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

```typescript
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import DesignEnUS from '@univerjs/design/locale/en-US'
import { UniverDocsPlugin } from '@univerjs/docs'
import { UniverDocsUIPlugin } from '@univerjs/docs-ui'
import DocsUIEnUS from '@univerjs/docs-ui/locale/en-US'
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'
import { UniverRenderEnginePlugin } from '@univerjs/engine-render'
import { UniverSheetsPlugin } from '@univerjs/sheets'
import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula'
import { UniverSheetsFormulaUIPlugin } from '@univerjs/sheets-formula-ui'
import SheetsFormulaUIEnUS from '@univerjs/sheets-formula-ui/locale/en-US'
import { UniverSheetsNumfmtPlugin } from '@univerjs/sheets-numfmt'
import { UniverSheetsNumfmtUIPlugin } from '@univerjs/sheets-numfmt-ui'
import SheetsNumfmtUIEnUS from '@univerjs/sheets-numfmt-ui/locale/en-US'
import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui'
import SheetsUIEnUS from '@univerjs/sheets-ui/locale/en-US'
import SheetsEnUS from '@univerjs/sheets/locale/en-US'
import { UniverUIPlugin } from '@univerjs/ui'
import UIEnUS from '@univerjs/ui/locale/en-US'
import '@univerjs/design/lib/index.css'
import '@univerjs/ui/lib/index.css'
import '@univerjs/docs-ui/lib/index.css'
import '@univerjs/sheets-ui/lib/index.css'
import '@univerjs/sheets-formula-ui/lib/index.css'
import '@univerjs/sheets-numfmt-ui/lib/index.css'
import '@univerjs/engine-formula/facade'
import '@univerjs/ui/facade'
import '@univerjs/docs-ui/facade'
import '@univerjs/sheets/facade'
import '@univerjs/sheets-ui/facade'
import '@univerjs/sheets-formula/facade'
import '@univerjs/sheets-numfmt/facade'

const univer = new Univer({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(
      DesignEnUS,
      UIEnUS,
      DocsUIEnUS,
      SheetsEnUS,
      SheetsUIEnUS,
      SheetsFormulaUIEnUS,
      SheetsNumfmtUIEnUS,
    ),
  },
})

univer.registerPlugin(UniverRenderEnginePlugin)
univer.registerPlugin(UniverFormulaEnginePlugin)
univer.registerPlugin(UniverUIPlugin, {
  container: 'app',
})
univer.registerPlugin(UniverDocsPlugin)
univer.registerPlugin(UniverDocsUIPlugin)
univer.registerPlugin(UniverSheetsPlugin)
univer.registerPlugin(UniverSheetsUIPlugin)
univer.registerPlugin(UniverSheetsFormulaPlugin)
univer.registerPlugin(UniverSheetsFormulaUIPlugin)
univer.registerPlugin(UniverSheetsNumfmtPlugin)
univer.registerPlugin(UniverSheetsNumfmtUIPlugin)
```

### Плагины и настройка

#### @univerjs/core

Этот плагин представляет собой основную библиотеку Univer и предоставляет базовые возможности, включая создание экземпляров Univer и настройку тем и языков.

```typescript
interface UniverParameter {
  // Univer instance theme, default is `defaultTheme`
  theme: IStyleSheet
  // Whether to use dark mode, default is false
  darkMode?: boolean
  // The locale of the Univer instance
  locale: LocaleType
  // The locale objects to use, with keys as locale types and values as corresponding locale objects
  locales: ILocales
  // The log level of the Univer instance
  logLevel?: LogLevel
}
```

Справка: [`Univer`](https://docs.univer.ai/ru-RU/reference/classes/univer.md)

#### @univerjs/engine-render

Этот плагин — движок рендеринга Univer. Он отвечает за рендеринг, полосы прокрутки, курсор и выделение и предоставляет `UniverRenderEnginePlugin`.

Справка: [@univerjs/engine-render](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/engine-render.md)

#### @univerjs/engine-formula

Этот плагин — движок формул Univer. Он отвечает за вычисление и обработку формул и предоставляет `UniverFormulaEnginePlugin`.

Справка: [@univerjs/engine-formula](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/engine-formula.md)

#### @univerjs/design

Этот плагин представляет собой дизайн-систему Univer и предоставляет все базовые компоненты и стили.

См. раздел [Пользовательский интерфейс](https://docs.univer.ai/ru-RU/guides/docs/ui/overview.md)

#### @univerjs/ui

Этот плагин — основа пользовательского интерфейса Univer. Он предоставляет `UniverUIPlugin`.

`UniverUIPlugin` предоставляет параметры для базовой настройки макета.

```typescript
interface IUniverUIConfig {
  // Container element, can be a string or a DOM element
  container?: string | HTMLElement
  // Whether to show the header
  header?: boolean
  // Whether to show the header toolbar
  toolbar?: boolean
  // The type of the header toolbar. 'classic': default classic mode; 'grid': two-row grid mode; 'collapsed': compact mode; 'simple': ungrouped mode
  ribbonType?: RibbonType
  // Whether to show the context menu
  contextMenu?: boolean
  // Whether to disable auto focus
  disableAutoFocus?: true
  // Dependency injection override configuration
  override?: DependencyOverride
  // Menu configuration
  menu?: MenuConfig
}
```

Параметр конфигурации `menu` позволяет задать видимость отдельных пунктов меню:

```typescript
univer.registerPlugin(UniverSheetsUIPlugin, {
  menu: {
    'sheet.command.set-range-bold': {
      hidden: true,
    },
    'sheet.command.set-range-italic': {
      hidden: true,
      disabled: true,
    },
  },
})
```

Здесь `'sheet.command.set-range-bold'` и `'sheet.command.set-range-italic'` — имена команд, соответствующих определённым пунктам меню. Их можно найти ниже в [списке идентификаторов пунктов меню](#menu-item-id-list).

Справка: [@univerjs/ui](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/ui.md)

#### @univerjs/docs

Это основной плагин Univer Docs. Он предоставляет `UniverDocsPlugin`.

Справка: [@univerjs/docs](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/docs.md)

#### @univerjs/docs-ui

Это UI-плагин Univer Docs, в который входят компоненты интерфейса и механизмы взаимодействия для редактора документов. Он предоставляет `UniverDocsUIPlugin`.

Справка: [@univerjs/docs-ui](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/docs-ui.md)

#### @univerjs/sheets

Это основной плагин Univer Sheets, предоставляющий базовые возможности редактора электронных таблиц. Он предоставляет `UniverSheetsPlugin`.

`UniverSheetsPlugin` предоставляет параметры для настройки редактора электронных таблиц.

```typescript
interface IUniverSheetsConfig {
  // If both row style and column style are set, whether row style precedes column style
  isRowStylePrecedeColumnStyle?: boolean
  // Whether auto height applies to merged cells
  autoHeightForMergedCells?: boolean
  /**
   * Whether synchronize the frozen state to other users in real-time collaboration.
   * @default true
   */
  freezeSync?: boolean
}
```

Справка: [@univerjs/sheets](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/sheets.md)

#### @univerjs/sheets-ui

Это UI-плагин Univer Sheets, в который входят компоненты интерфейса и механизмы взаимодействия для редактора электронных таблиц. Он предоставляет `UniverSheetsUIPlugin`.

`UniverSheetsUIPlugin` предоставляет параметры для настройки интерфейса редактора электронных таблиц.

```typescript
interface IUniverSheetsUIConfig {
  // Whether to show the footer.
  footer?:
    | false
    | {
        // The sheet bar is the sub-sheet manager, including adding/switching/deleting sub-sheets.
        sheetBar?: boolean
        // The statistic bar includes statistics of the current selection, such as count, sum, average, etc.
        statisticBar?: boolean
        // The bottom menu includes options like highlight, gridlines, etc.
        menus?: boolean
        // The zoom slider at the bottom.
        zoomSlider?: boolean
        /**
         * The config of the add sheet button in the sheet bar.
         */
        addSheetButtonConfig?: {
          /**
           * Whether to show the add sheet button in the sheet bar.
           * When `footer` or `footer.sheetBar` is false, this config will not work because the sheet bar will not be rendered.
           * @default true
           */
          show?: boolean
          /**
           * The default row count of the new sheet created by the add sheet button.
           * @default 1000
           */
          defaultRowCount?: number
          /**
           * The default column count of the new sheet created by the add sheet button.
           * @default 20
           */
          defaultColumnCount?: number
        }
      }
  // Whether to show the formula bar
  formulaBar?: boolean
  clipboardConfig?: {
    // Whether to show the paste options button after paste operation
    hidePasteOptions?: boolean
  }
  // The configuration for the scroll bar
  scrollConfig?: IScrollBarProps
  /**
   * Strategy for showing the protected range shadow.
   * - true or 'always': Show shadow for all protected ranges (default behavior)
   * - 'non-editable': Only show shadow for ranges that cannot be edited (Edit permission is false)
   * - 'non-viewable': Only show shadow for ranges that cannot be viewed (View permission is false)
   * - false or 'none': Never show shadow for protected ranges
   * @default true
   */
  protectedRangeShadow?: boolean | 'always' | 'non-editable' | 'non-viewable' | 'none'
  // Whether to disable the force string alert.
  disableForceStringAlert?: boolean
  // Whether to disable the force string mark.
  disableForceStringMark?: boolean
}
```

Справка: [@univerjs/sheets-ui](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/sheets-ui.md)

## Поддержка мобильных устройств

Сначала настройте [мобильный редактор](https://docs.univer.ai/ru-RU/guides/sheets/getting-started/installation.md#mobile-support). В коде инициализации режима плагинов на этой странице замените указанные настольные регистрации мобильными экспортами тех же пакетов **до открытия документа**. Сохраните модели, стили, локализации и импорты Facade; не регистрируйте оба варианта.

| Пакет                         | Настольная регистрация        | Мобильная регистрация               |
| ----------------------------- | ----------------------------- | ----------------------------------- |
| `@univerjs/sheets-formula-ui` | `UniverSheetsFormulaUIPlugin` | `UniverSheetsFormulaMobileUIPlugin` |
| `@univerjs/sheets-numfmt-ui`  | `UniverSheetsNumfmtUIPlugin`  | `UniverSheetsNumfmtMobileUIPlugin`  |

## Режим предустановок

### Установка

#### npm

```bash
npm install @univerjs/presets @univerjs/preset-sheets-core
```

#### pnpm

```bash
pnpm add @univerjs/presets @univerjs/preset-sheets-core
```

#### yarn

```bash
yarn add @univerjs/presets @univerjs/preset-sheets-core
```

#### bun

```bash
bun add @univerjs/presets @univerjs/preset-sheets-core
```

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

```typescript
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'
import '@univerjs/preset-sheets-core/lib/index.css'

const { univerAPI } = createUniver({
  locale: LocaleType.EN_US,
  locales: {
    [LocaleType.EN_US]: mergeLocales(UniverPresetSheetsCoreEnUS),
  },
  presets: [UniverSheetsCorePreset()],
})

univerAPI.createWorkbook({})
```

### Предустановки и настройка

#### @univerjs/presets

Эта предустановка предоставляет метод `createUniver` для создания приложения Univer, а также экспортирует все методы и объекты из **@univerjs/core** и **@univerjs/design**.

Метод `createUniver` принимает объект конфигурации с параметрами темы, языка, предустановок и другими настройками. Он возвращает экземпляр `Univer` в переменной `univer` и экземпляр `FUniver` в переменной `univerAPI`, через который можно вызывать Facade API.

```typescript
interface CreateUniverParameter {
  // Univer instance theme, default is `defaultTheme`
  theme: IStyleSheet
  // Whether to use dark mode, default is false
  darkMode?: boolean
  // The locale of the Univer instance
  locale: LocaleType
  region?: LocaleType
  // The locale objects to use, with keys as locale types and values as corresponding locale objects
  locales: ILocales
  // The log level of the Univer instance
  logLevel?: LogLevel
  // The list of presets to use.
  presets: IPresets[]
  // The list of plugins to use.
  plugins: IPlugins[]
}
```

Справка: [`createUniver`](https://docs.univer.ai/ru-RU/reference/methods/create-univer.md)

#### @univerjs/preset-sheets-core

Это основная предустановка Univer Sheets. В неё входят необходимые базовые возможности для редактирования документов, движок формул, движок рендеринга и другие компоненты.

```typescript
interface IUniverSheetsCorePresetConfig {
  // Container element, can be a string or a DOM element
  container?: string | HTMLElement
  // Whether to show the header
  header?: boolean
  // Whether to show the header toolbar
  toolbar?: boolean
  // The type of the header toolbar. 'classic': default classic mode; 'grid': two-row grid mode; 'collapsed': compact mode; 'simple': ungrouped mode
  ribbonType?: RibbonType
  // Whether to show the footer
  footer?:
    | false
    | {
        // Sheet bar is the sub-sheet manager, including adding/switching/deleting sub-sheets.
        sheetBar?: boolean
        // Statistic bar includes statistics of the current selection, such as count, sum, average, etc.
        statisticBar?: boolean
        // The bottom menu includes options like highlight, gridlines, etc.
        menus?: boolean
        // The zoom slider at the bottom.
        zoomSlider?: boolean
        /**
         * The config of the add sheet button in the sheet bar.
         */
        addSheetButtonConfig?: {
          /**
           * Whether to show the add sheet button in the sheet bar.
           * When `footer` or `footer.sheetBar` is false, this config will not work because the sheet bar will not be rendered.
           * @default true
           */
          show?: boolean
          /**
           * The default row count of the new sheet created by the add sheet button.
           * @default 1000
           */
          defaultRowCount?: number
          /**
           * The default column count of the new sheet created by the add sheet button.
           * @default 20
           */
          defaultColumnCount?: number
        }
      }
  // Whether to show the context menu
  contextMenu?: boolean
  // Whether to disable auto focus
  disableAutoFocus?: true
  // Menu configuration
  menu?: MenuConfig

  sheets?: {
    // If both row style and column style are set, whether row style precedes column style
    isRowStylePrecedeColumnStyle?: boolean
    // Whether auto height applies to merged cells
    autoHeightForMergedCells?: boolean
    /**
     * Whether synchronize the frozen state to other users in real-time collaboration.
     * @default true
     */
    freezeSync?: boolean

    clipboardConfig?: {
      // Whether to show the paste options button after paste operation
      hidePasteOptions?: boolean
    }
    // The configuration for the scroll bar
    scrollConfig?: IScrollBarProps
    /**
     * Strategy for showing the protected range shadow.
     * - true or 'always': Show shadow for all protected ranges (default behavior)
     * - 'non-editable': Only show shadow for ranges that cannot be edited (Edit permission is false)
     * - 'non-viewable': Only show shadow for ranges that cannot be viewed (View permission is false)
     * - false or 'none': Never show shadow for protected ranges
     * @default true
     */
    protectedRangeShadow?: boolean | 'always' | 'non-editable' | 'non-viewable' | 'none'
    // Whether to disable the force string alert.
    disableForceStringAlert?: boolean
    // Whether to disable the force string mark.
    disableForceStringMark?: boolean
  }

  // ... More configuration options
}
```

Параметр конфигурации `menu` позволяет задать видимость отдельных пунктов меню:

```typescript
UniverSheetsCorePreset({
  menu: {
    'sheet.command.set-range-bold': {
      hidden: true,
    },
    'sheet.command.set-range-italic': {
      hidden: true,
      disabled: true,
    },
  },
})
```

Здесь `'sheet.command.set-range-bold'` и `'sheet.command.set-range-italic'` — имена команд, соответствующих определённым пунктам меню. Их можно найти ниже в [списке идентификаторов пунктов меню](#menu-item-id-list).

Справка: [@univerjs/preset-sheets-core](https://docs.univer.ai/ru-RU/reference/packages/presets/univerjs/preset-sheets-core.md)

## Макет панели инструментов и `RibbonType`

Свойство `ribbonType` в `IUniverSheetsCorePresetConfig` или `IUniverUIConfig` определяет макет панели инструментов.

`ribbonType` поддерживает четыре режима:

* `classic`: классический режим по умолчанию. Группы расположены сверху, а панель инструментов — под ними. Подходит пользователям, привыкшим к традиционному макету.
* `grid`: режим сетки, сохраняющий вкладки сверху и располагающий инструменты каждой группы под ними в сетке из двух строк. Подходит для настольных макетов, где нужно одновременно видеть больше инструментов.
* `collapsed`: компактный режим, в котором группы и панель инструментов расположены в одной строке. Подходит для экранов с ограниченным пространством по вертикали.
* `simple`: режим без группировки, в котором все инструменты представлены одним плоским списком. Подходит пользователям, знакомым с функциями панели инструментов.



## Порядок меню и размещение в сетке

При инициализации и при вызове [`univerAPI.updateMenuConfig()`](https://docs.univer.ai/ru-RU/reference/facade/univer.md#updatemenuconfig) используется одна структура `menu`. Ключом может быть вкладка Ribbon (например, `ribbon.insert`), группа (например, `ribbon.start.format`) или ID пункта меню.

`order` сортирует элементы одного уровня по возрастанию: вкладки, группы внутри вкладки и пункты внутри группы или подменю. Он не переносит пункт в другую группу. Для ключей вкладок и групп можно использовать `RibbonPosition` и перечисления групп из `@univerjs/ui`.

### Начальная конфигурация

Выберите свой режим и добавьте эти параметры в существующую инициализацию. Сохраните остальные плагины, язык, тему и контейнер; не регистрируйте один плагин дважды.

```ts
import type { MenuConfig } from '@univerjs/ui'

const menu: MenuConfig = {
  'ribbon.insert': { order: -1 },
  'ribbon.start.format': { order: -1 },
  'sheet.command.set-range-font-family': {
    order: 0,
    gridLayout: { row: 1, column: 1, width: 160 },
  },
}
```

#### Режим плагинов

```typescript
import { UniverUIPlugin } from '@univerjs/ui'

univer.registerPlugin(UniverUIPlugin, {
  ribbonType: 'grid',
  menu,
})
```

#### Режим предустановок

```typescript
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import { createUniver } from '@univerjs/presets'

const { univerAPI } = createUniver({
  presets: [
    UniverSheetsCorePreset({
      ribbonType: 'grid',
      menu,
    }),
  ],
})
```

### Обновление во время работы

Публичный Facade объединяет изменения и сразу обновляет интерфейс. Неуказанные свойства сохраняют прежние значения или значения схемы по умолчанию. Настройки также применяются к меню, зарегистрированным позже. В режиме плагинов сначала импортируйте `@univerjs/ui/facade`.

```ts
import '@univerjs/ui/facade'

univerAPI.updateMenuConfig({
  'sheet.command.set-range-bold': {
    order: 0,
    gridLayout: { row: 2, column: 2 },
  },
  'sheet.command.set-range-italic': {
    gridLayout: { row: 2, column: 1 },
  },
})
```

`gridLayout` действует только при `ribbonType: 'grid'`. В каждой группе две строки; `row` и `column` начинаются с 1. Явные координаты определяют положение, поэтому изменение только `order` не перемещает кнопку с заданными координатами. При перестановке обновляйте обе кнопки, чтобы избежать перекрытия. Необязательные поля: `rowSpan`, `columnSpan`, `showLabel`, `width` и `iconSize`; размеры задаются в пикселях. Ограничения и значения по умолчанию описаны в [`IRibbonGridLayout`](https://docs.univer.ai/ru-RU/reference/packages/plugins/univerjs/ui.md#iribbongridlayout).

### Размещение пользовательского меню

`createMenu()` и `createSubmenu()` также принимают `order` и `gridLayout`. Для подменю они задают положение кнопки в Ribbon, а не расположение элементов всплывающего меню. Пример добавляет кнопку в третий столбец группы истории:

```ts
univerAPI
  .createMenu({
    id: 'custom-action',
    title: 'Custom action',
    action: () => console.log('Custom action clicked'),
    order: 4,
    gridLayout: { row: 1, column: 3, showLabel: true, width: 96 },
  })
  .appendTo('ribbon.start.history')
```

## Список идентификаторов пунктов меню

> [!NOTE]
> Идентификатор пункта меню можно узнать по атрибуту 
> 
> `data-u-command`
> 
>  соответствующего DOM-элемента.

### Пункты панели инструментов

| Menu Item ID                                          | Название пункта меню                           |
| ----------------------------------------------------- | ---------------------------------------------- |
| univer.command.undo                                   | Отменить                                       |
| univer.command.redo                                   | Повторить                                      |
| sheet.command.set-once-format-painter                 | Формат по образцу                              |
| sheet.command.set-range-bold                          | Полужирный                                     |
| sheet.command.set-range-italic                        | Курсив                                         |
| sheet.command.set-range-underline                     | Подчёркивание                                  |
| sheet.command.set-range-stroke                        | Зачёркивание                                   |
| sheet.command.set-range-font-family                   | Шрифт                                          |
| sheet.command.set-range-fontsize                      | Размер шрифта                                  |
| sheet.command.set-range-text-color                    | Цвет текста                                    |
| sheet.command.set-background-color                    | Цвет заливки                                   |
| sheet.command.set-border-basic                        | Границы                                        |
| sheet.command.set-horizontal-text-align               | Горизонтальное выравнивание                    |
| sheet.command.set-vertical-text-align                 | Вертикальное выравнивание                      |
| sheet.command.set-text-wrap                           | Перенос текста                                 |
| sheet.command.set-text-rotation                       | Поворот текста                                 |
| sheet.command.add-worksheet-merge                     | Объединить ячейки                              |
| sheet.command.add-worksheet-merge-all                 | Объединить ячейки — объединить все             |
| sheet.command.add-worksheet-merge-vertical            | Объединить ячейки — по вертикали               |
| sheet.command.add-worksheet-merge-horizontal          | Объединить ячейки — по горизонтали             |
| sheet.command.remove-worksheet-merge                  | Объединить ячейки — отменить объединение       |
| sheet.operation.open.conditional.formatting.panel     | Условное форматирование                        |
| formula-ui.operation.insert-function                  | Функции                                        |
| formula-ui.operation.more-functions                   | Функции — другие функции                       |
| sheet.menu.sheets-sort                                | Сортировка                                     |
| sheet.command.sort-range-asc                          | Сортировка — по возрастанию                    |
| sheet.command.sort-range-asc-ext                      | Сортировка — расширить диапазон по возрастанию |
| sheet.command.sort-range-desc                         | Сортировка — по убыванию                       |
| sheet.command.sort-range-desc-ext                     | Сортировка — расширить диапазон по убыванию    |
| sheet.command.sort-range-custom                       | Сортировка — настраиваемая                     |
| sheet.menu.image                                      | Изображение                                    |
| sheet.command.insert-float-image                      | Изображение — плавающее                        |
| sheet.command.insert-cell-image                       | Изображение — в ячейке                         |
| sheet.command.numfmt.set.currency                     | Денежный формат                                |
| sheet.command.numfmt.add.decimal.command              | Увеличить число знаков после запятой           |
| sheet.command.numfmt.subtract.decimal.command         | Уменьшить число знаков после запятой           |
| sheet.command.numfmt.set.percent                      | Процентный формат                              |
| sheet.operation.open.numfmt.panel                     | Числовой формат                                |
| sheet.menu.data-validation                            | Проверка данных                                |
| data-validation.operation.open-validation-panel       | Проверка данных — управление                   |
| data-validation.command.addRuleAndOpen                | Проверка данных — добавить правило             |
| sheet.command.smart-toggle-filter                     | Переключить фильтр                             |
| sheet.command.clear-filter-criteria                   | Переключить фильтр — сбросить условия          |
| sheet.command.re-calc-filter                          | Переключить фильтр — пересчитать условия       |
| sheet.operation.open-pivot-table-range-selector-panel | Сводная таблица                                |
| sheet.menu.print                                      | Печать                                         |
| sheet.operation.print-open                            | Печать — печать                                |
| sheet.operation.open-print-grid-sidebar               | Печать — макет печати                          |
| data-connector.operation.sidebar                      | Коннектор данных                               |
| sheet.command.menu-insert-chart                       | Вставить диаграмму                             |
| sheet.command.add-range-protection-from-toolbar       | Защита                                         |
| univer.operation.toggle-edit-history                  | История изменений                              |
| sheet.operation.open-sparkline-selector               | Спарклайн                                      |
| sheet.operation.toggle-comment-panel                  | Управление комментариями                       |
| sheet.operation.insert-hyper-link-toolbar             | Вставить ссылку                                |
| ui.operation.open-find-dialog                         | Найти и заменить                               |
| base-ui.operation.toggle-shortcut-panel               | Переключить панель сочетаний клавиш            |
| sheet.toolbar.text-to-number                          | Преобразовать текст в число                    |

### Пункты контекстного меню

| Menu Item ID                                            | Название пункта меню                                             |
| ------------------------------------------------------- | ---------------------------------------------------------------- |
| sheet.command.copy                                      | Копировать                                                       |
| sheet.command.cut                                       | Вырезать                                                         |
| sheet.command.paste                                     | Вставить                                                         |
| sheet.menu.copy-special                                 | Специальное копирование                                          |
| sheet.command.copy-formula-only                         | Специальное копирование — только формулу                         |
| sheet.menu.paste-special                                | Специальная вставка                                              |
| sheet.command.paste-values                              | Специальная вставка — значения                                   |
| sheet.command.paste-format                              | Специальная вставка — формат                                     |
| sheet.command.paste-col-width                           | Специальная вставка — ширина столбца                             |
| sheet.command.paste-besides-border                      | Специальная вставка — без стилей границ                          |
| sheet.command.paste-formula                             | Специальная вставка — формула                                    |
| sheet.menu.clear-selection                              | Очистить                                                         |
| sheet.command.clear-selection-content                   | Очистить — содержимое                                            |
| sheet.command.clear-selection-format                    | Очистить — форматы                                               |
| sheet.command.clear-selection-all                       | Очистить — всё                                                   |
| sheet.contextMenu.text-to-number                        | Преобразовать текст в число                                      |
| sheet.menu.cell-insert                                  | Вставить                                                         |
| sheet.command.insert-row-before                         | Вставить — строку выше                                           |
| sheet.command.insert-col-before                         | Вставить — столбец слева                                         |
| sheet.command.insert-range-move-right-confirm           | Вставить — сдвинуть вправо                                       |
| sheet.command.insert-range-move-down-confirm            | Вставить — сдвинуть вниз                                         |
| sheet.menu.delete                                       | Удалить                                                          |
| sheet.command.remove-row-confirm                        | Удалить выбранную строку                                         |
| sheet.command.remove-col-confirm                        | Удалить выбранный столбец                                        |
| sheet.command.delete-range-move-left-confirm            | Удалить — сдвинуть влево                                         |
| sheet.command.delete-range-move-up-confirm              | Удалить — сдвинуть вверх                                         |
| sheet.menu.sheet-frozen                                 | Закрепить                                                        |
| sheet.header-menu.sheet-frozen                          | Закрепить (пункт контекстного меню заголовка строки или столбца) |
| sheet.command.set-selection-frozen                      | Закрепить — выделение                                            |
| sheet.command.set-row-frozen                            | Закрепить — до этой строки                                       |
| sheet.command.set-col-frozen                            | Закрепить — до этого столбца                                     |
| sheet.command.cancel-frozen                             | Закрепить — снять закрепление                                    |
| sheet.contextMenu.permission                            | Защитить строки и столбцы                                        |
| sheet.command.add-range-protection-from-context-menu    | Защитить строки и столбцы — добавить защищённый диапазон         |
| sheet.command.set-range-protection-from-context-menu    | Защитить строки и столбцы — настроить защищённый диапазон        |
| sheet.command.delete-range-protection-from-context-menu | Защитить строки и столбцы — удалить защищённый диапазон          |
| sheet.command.view-sheet-permission-from-context-menu   | Защитить строки и столбцы — показать все защищённые диапазоны    |
| sheet.menu.sheets-sort-ctx                              | Сортировка                                                       |
| sheet.command.sort-range-asc-ctx                        | Сортировка — по возрастанию                                      |
| sheet.command.sort-range-asc-ext-ctx                    | Сортировка — расширить диапазон по возрастанию                   |
| sheet.command.sort-range-desc-ctx                       | Сортировка — по убыванию                                         |
| sheet.command.sort-range-desc-ext-ctx                   | Сортировка — расширить диапазон по убыванию                      |
| sheet.command.sort-range-custom-ctx                     | Сортировка — настраиваемая                                       |
| sheet.operation.show-comment-modal                      | Добавить комментарий                                             |
| sheet.operation.insert-hyper-link                       | Вставить ссылку                                                  |
| sheet.operation.screenshot                              | Копировать как изображение                                       |

### Пункты контекстного меню — заголовок строки

| Menu Item ID                            | Название пункта меню    |
| --------------------------------------- | ----------------------- |
| sheet.command.insert-multi-rows-above   | Вставить строку выше    |
| sheet.command.insert-multi-rows-after   | Вставить строку ниже    |
| sheet.command.hide-row-confirm          | Скрыть выбранную строку |
| sheet.command.set-selected-rows-visible | Показать скрытую строку |
| sheet.command.set-row-height            | Высота строки           |
| sheet.command.set-row-is-auto-height    | Подогнать по данным     |

### Пункты контекстного меню — заголовок столбца

| Menu Item ID                            | Название пункта меню     |
| --------------------------------------- | ------------------------ |
| sheet.command.insert-multi-cols-before  | Вставить столбец слева   |
| sheet.command.insert-multi-cols-right   | Вставить столбец справа  |
| sheet.command.hide-col-confirm          | Скрыть выбранный столбец |
| sheet.command.set-selected-cols-visible | Показать скрытый столбец |
| sheet.command.set-worksheet-col-width   | Ширина столбца           |
| sheet.command.set-col-auto-width        | Подогнать по данным      |
