# @cloud-ru/ds-drawer 中文文档

规范地址：https://npmcn.com/package/%40cloud-ru/ds-drawer/

版本：2\.3\.0
npm 元数据更新时间：2026-11-11T15:05:46.096Z
中文译文更新时间：2026-11-11T16:12:27.852Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cloud-ru/ds-drawer
原文对照：https://npmcn.com/package/%40cloud-ru/ds-drawer/?lang=original
项目主页：https://github.com/cloud-ru-tech/snack-v2/tree/master/packages/drawer
源码仓库：https://github.com/cloud-ru-tech/snack-v2

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：565 kB，146 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2026-08-18T12:41:38.826Z
- 最新版本发布：2026-11-11T15:05:45.748Z
- 近 30 天下载量：6737（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：140（近 12 个月 140 个）

## 中文简介

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}=======================================================================================================================================================================================================================================.

## 安装

```sh
npm install @cloud-ru/ds-drawer
```

也可以使用：`pnpm add @cloud-ru/ds-drawer`、`yarn add @cloud-ru/ds-drawer`、`bun add @cloud-ru/ds-drawer`

## README

# 绘图器

`@cloud-ru/ds-drawer` -=YTET -伊甸园字幕组=- 翻译:.

Пакет `@cloud-ru/ds-drawer` предоставляет:готовую也 `Drawer` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `DrawerCustom` для.

-   ****绘图器**** {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080} - \\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080} - \\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080} - \\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080} - 百分之九十,请回答.
-   ****抽屉**** . . . . . `DrawerCustom.Header`, (中文(简体) ), `.Body`, (中文(简体) ), `.Footer` или.

## Установка

```bash
pnpm add @cloud-ru/ds-drawer
```

```ts
import { Drawer, DrawerCustom, POSITION, WIDTH } from '@cloud-ru/ds-drawer'
```

## Смотри

-   **模式** . . . . .
-   **过量** {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得怎么样.

## 绘图器

Панель,выезжающая也. шапка也.

Панель,выезжающая也. дополнительного也. `Drawer` собирает(медиа,заголовок,后出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 [`DrawerCustom`](https://npmcn.com/package/%40cloud-ru/ds-drawer/drawer-custom)。 。 。 .

### Когда

-   {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎么样.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪######################### ###########################################################################################################################################################################################################.
-   {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢.
-   {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `nestedDrawer`。 。 。 .

Когда **не** нужен:критическое也 `Modal`), всплывающий с (`Popover`(原始内容存档于2018-09-31) (中文(简体) ). ).

### Примеры

#### Базовое

打开/关闭,页脚 `ButtonGroup`。 。 。 .

```tsx
import { Button, ButtonGroup } from '@cloud-ru/ds-button';
import { Drawer } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function Basic() {
  const [open, setOpen] = useState(false);
  const close = () => setOpen(false);

  return (
    <>
      <Button label='Открыть' appearance='primary' view='filled' onClick={() => setOpen(true)} />
      <Drawer
        open={open}
        position='right'
        onClose={close}
        title='Заголовок'
        subtitle='Короткое пояснение сценария'
        content='Основной контент тела. Сюда помещается форма, предупреждение или подробный текст.'
        footer={
          <ButtonGroup
            primaryAction={{ label: 'Продолжить', view: 'filled', onClick: close }}
            secondaryAction={{ label: 'Отмена', appearance: 'neutral', view: 'outline', onClick: close }}
          />
        }
      />
    </>
  );
}
```

#### Критическое

关键初级,中性轮廓二级.

```tsx
import { Button, ButtonGroup } from '@cloud-ru/ds-button';
import { Drawer } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function WithFooter() {
  const [open, setOpen] = useState(false);
  const close = () => setOpen(false);

  return (
    <>
      <Button label='Удалить…' appearance='critical' view='outline' onClick={() => setOpen(true)} />
      <Drawer
        open={open}
        position='right'
        onClose={close}
        title='Удалить запись'
        subtitle='Действие необратимо.'
        content='После подтверждения запись и все её ссылки исчезнут из списка.'
        footer={
          <ButtonGroup
            primaryAction={{
              label: 'Удалить',
              appearance: 'critical',
              view: 'filled',
              onClick: close,
            }}
            secondaryAction={{
              label: 'Отмена',
              appearance: 'neutral',
              view: 'outline',
              onClick: close,
            }}
          />
        }
      />
    </>
  );
}
```

#### С -слотом -слотом

`media` {\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你觉得呢.

```tsx
import { Button } from '@cloud-ru/ds-button';
import { Drawer } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function WithMedia() {
  const [open, setOpen] = useState(false);
  const close = () => setOpen(false);

  return (
    <>
      <Button label='Открыть онбординг' appearance='primary' view='filled' onClick={() => setOpen(true)} />
      <Drawer
        open={open}
        position='right'
        width='m'
        onClose={close}
        media={
          <div
            style={{
              height: 200,
              background: 'linear-gradient(135deg, rgb(102 126 234), rgb(118 75 162))',
            }}
          />
        }
        title='Добро пожаловать'
        subtitle='Кратко о том, что изменилось в этой версии.'
        content='Список ключевых улучшений и ссылки на подробности могут размещаться в теле.'
      />
    </>
  );
}
```

#### 底页

`position="bottom"` + 键 `heightAuto` - 。 。 。 。 .

```tsx
import { Button } from '@cloud-ru/ds-button';
import { Drawer } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function HeightAuto() {
  const [open, setOpen] = useState(false);
  const close = () => setOpen(false);

  return (
    <>
      <Button label='Открыть bottom sheet' appearance='primary' view='filled' onClick={() => setOpen(true)} />
      <Drawer
        open={open}
        position='bottom'
        heightAuto
        onClose={close}
        title='Bottom sheet'
        subtitle='Высота рассчитывается по контенту'
        content='Подходит для компактных подтверждений на мобильных устройствах.'
      />
    </>
  );
}
```

#### QQ 绘图器

Родитель.

```tsx
import { Button } from '@cloud-ru/ds-button';
import { Drawer } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function NestedDrawer() {
  const [outerOpen, setOuterOpen] = useState(false);
  const [innerOpen, setInnerOpen] = useState(false);

  const closeAll = () => {
    setInnerOpen(false);
    setOuterOpen(false);
  };

  return (
    <>
      <Button label='Открыть родительский' appearance='primary' view='filled' onClick={() => setOuterOpen(true)} />
      <Drawer
        open={outerOpen}
        position='right'
        width='m'
        onClose={closeAll}
        title='Родительский Drawer'
        subtitle='При открытии вложенного — родитель сдвигается влево.'
        content={
          <Button label='Открыть вложенный' appearance='primary' view='outline' onClick={() => setInnerOpen(true)} />
        }
        nestedDrawer={
          <Drawer
            open={innerOpen}
            position='right'
            width='s'
            onClose={() => setInnerOpen(false)}
            title='Вложенный Drawer'
            subtitle='Кнопка «назад» возвращает к родителю'
            onBackButtonClick={() => setInnerOpen(false)}
            content='Вложенный Drawer рендерится через проп nestedDrawer родителя.'
          />
        }
      />
    </>
  );
}
```

### 道具

**绘图程序**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `additionalButton` | `BottomSheetActionButton` | —— 说 | (третья) `Button` 页:1 `view='simple'`, (中文(简体) ), `appearance='neutral'`) (中文(简体) ). |
| `approveButton` | `BottomSheetActionButton` | —— 说 | . . . . `Button` 页:1 `view='filled'`, (中文(简体) ), `appearance='primary'`) (中文(简体) ). |
| `cancelButton` | `BottomSheetActionButton` | —— 说 | . . . `Button` (по `view='outline'`, (中文(简体) ), `appearance='neutral'`) (中文(简体) ). |
| `children` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 |  |
| `className` | `string` | —— 说 | CSS - класс элемента с с  
支助科 |
| `closeOnPopstate` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `container` | `string | HTMLElement` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你说什么? - 身体状况 |
| `content` | `ReactNode` | —— 说 | 体 (альтернатива) `children`) (中文(简体) ). |
| `contentRef` | `Ref<HTMLElement>` | —— 说 | Ссылка(一作например. |
| `data-test-id` | `string` | —— 说 |  |
| `disableMotions` | `boolean` | `false` | Отключить |
| `footer` | `(ReactElement<any, string | JSXElementConstructor<any>> & (string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<...> | ReactPortal | null))` | —— 说 | Футер  
Произвольный. Приоритетнее `approveButton` 编号 : `cancelButton` 编号 : `additionalButton`。 。 。 . |
| `footerActionsOrientation` | `"horizontal"` | `"vertical"` | `'horizontal'` | Ориентация. {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得怎样 `footer`。 。 。 . |
| `heightAuto` | `boolean` | `false` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `position: "top" | "bottom"`) (中文(简体) ). |
| `media` | `ReactNode` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `nestedDrawer` | `DrawerProps` | —— 说 | QQ 绘图器 |
| `onBackButtonClick` | `(() => void)` | —— 说 | 回叫QQ回叫 (слева:"слева").  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请回电 `Button view='function' icon={<ArrowLeftSVG />}`。 。 。 . |
| `onClose` | `() => void` | —— 说 | Колбэк |
| `onSnapIndexChange` | `((snapIndex: number) => void)` | —— 说 | 回叫 QQ snap' QQ (XQ swipe-QQQ 点击 QQ UI).  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我被控制着 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我被控制着 `snapIndex`。 。 。 . |
| `open` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢. |
| `position` | `"bottom"` | `"left"` | `"right"` | `"top"` | —— 说 | Расположение |
| `rootClassName` | `string` | —— 说 | SS класс |
| `safeAreaBottom` | `boolean` | `true` | IOS家用指示器 \\ Android导航栏。 Размер-токен  
`safeArea.bottom.minHeight`, на с с `env(safe-area-inset-bottom)` - 内置. |
| `safeAreaTop` | `boolean` | `true` | 安全区域 iOS Notch / status-bar. Размер-токен `safeArea.top.minHeight`, (中文(简体) ),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `env(safe-area-inset-top)` - 内置。 Применяется,только也  
工作表 工作表 工作表 工作表. |
| `showBlackout` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `showButtonClosed` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `slotAfterTitle` | `ReactNode` | —— 说 | QQ 标题, `QuestionTooltip` из `@cloud-ru/ds-tooltip`) (中文(简体) ). |
| `slotSecondTitle` | `ReactNode` | —— 说 | 时间轴: `SearchBar`, (中文(简体) ), `SegmentControl` или `Filter`。 。 。 .  
说吧 `secondWrapper` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你应该知道 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你是谁 `bottomSheet`, (中文(简体) ),  
`subHeadlineWrapper` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你应该知道 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你是谁 `window` (模式/抽屉). |
| `snapIndex` | `number` | —— 说 | 被控制着的... Если sheet sheet sheet;  
刷上/下 `onSnapIndexChange`——消费者  
передать. |
| `snapPoints` | `SnapPoint` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? По `undefined` —— 说  
工作表 `height: auto` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}别这样.  
Пример: `[0.5, 1]` - 工作表 \\ \\ \\ \\ \\ \\ ,拖动 \\ \\ \\ \\  
qq全视图端口;拖动qqq `0.5` {\\fn华文仿宋\\fs16\\1chd1d1d1}我...  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你还好吧  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
\- строго по возрастанию: `0` - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;  
\- ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..`['50%', 0.5]` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
одну → дубль;  
\- 说吧 `'fit-content'` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说 `snapPoints`) (中文(简体) )  
{\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你觉得呢. |
| `subtitle` | `ReactNode` | —— 说 | 标题. |
| `swipeEnabled` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你帮忙 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你的帮助.  
При `swipeEnabled=false` -=ytet -伊甸园字幕组=- 翻译: `snapIndex` 说吧. |
| `title` | `ReactNode` | —— 说 | Заголовок. 说吧 `title-l` 床单, `headline-s` qq窗口(模式/绘图). |
| `truncate` | `{ title?: number; subtitle?: number; } | undefined` | —— 说 | Усечение `title`编号 :`subtitle` через `TruncateString` (число. Применяется  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎么样? \* 窗口(模式/绘图),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢. |
| `width` | `Width` | `'s'` | Ширина (только:"左"作"右" |
| `withDividers` | `boolean` | `false` | QQ手机:QQQ/QQ/页". |

##### 相关类型

**绘图程序**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `additionalButton` | `BottomSheetActionButton` | —— 说 | (третья) `Button` 页:1 `view='simple'`, (中文(简体) ), `appearance='neutral'`) (中文(简体) ). |
| `approveButton` | `BottomSheetActionButton` | —— 说 | . . . . `Button` 页:1 `view='filled'`, (中文(简体) ), `appearance='primary'`) (中文(简体) ). |
| `cancelButton` | `BottomSheetActionButton` | —— 说 | . . . `Button` (по `view='outline'`, (中文(简体) ), `appearance='neutral'`) (中文(简体) ). |
| `children` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 |  |
| `className` | `string | undefined` | —— 说 | CSS - класс элемента с с  
支助科 |
| `closeOnPopstate` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `container` | `string | HTMLElement | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你说什么? - 身体状况 |
| `content` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | 体 (альтернатива) `children`) (中文(简体) ). |
| `contentRef` | `Ref<HTMLElement> | undefined` | —— 说 | Ссылка(一作например. |
| `data-test-id` | `string | undefined` | —— 说 |  |
| `disableMotions` | `boolean | undefined` | —— 说 | Отключить |
| `footer` | `(ReactElement<any, string | JSXElementConstructor<any>> & (string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null)) | undefined` | —— 说 | Футер  
Произвольный. Приоритетнее `approveButton` 编号 : `cancelButton` 编号 : `additionalButton`。 。 。 . |
| `footerActionsOrientation` | `"horizontal"` | `"vertical"` | —— 说 | Ориентация. {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得怎样 `footer`。 。 。 . |
| `heightAuto` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `position: "top" | "bottom"`) (中文(简体) ). |
| `media` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `nestedDrawer` | `DrawerProps` | —— 说 | QQ 绘图器 |
| `onBackButtonClick` | `(() => void) | undefined` | —— 说 | 回叫QQ回叫 (слева:"слева").  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请回电 `Button view='function' icon={<ArrowLeftSVG />}`。 。 。 . |
| `onClose` | `() => void` | —— 说 | Колбэк |
| `onSnapIndexChange` | `((snapIndex: number) => void) | undefined` | —— 说 | 回叫 QQ snap' QQ (XQ swipe-QQQ 点击 QQ UI).  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我被控制着 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我被控制着 `snapIndex`。 。 。 . |
| `open` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢. |
| `position` | `"bottom"` | `"left"` | `"right"` | `"top"` | —— 说 | Расположение |
| `rootClassName` | `string | undefined` | —— 说 | SS класс |
| `safeAreaBottom` | `boolean | undefined` | —— 说 | IOS家用指示器 \\ Android导航栏。 Размер-токен  
`safeArea.bottom.minHeight`, на с с `env(safe-area-inset-bottom)` - 内置. |
| `safeAreaTop` | `boolean | undefined` | —— 说 | 安全区域 iOS Notch / status-bar. Размер-токен `safeArea.top.minHeight`, (中文(简体) ),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `env(safe-area-inset-top)` - 内置。 Применяется,только也  
工作表 工作表 工作表 工作表. |
| `showBlackout` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `showButtonClosed` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `slotAfterTitle` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | QQ 标题, `QuestionTooltip` из `@cloud-ru/ds-tooltip`) (中文(简体) ). |
| `slotSecondTitle` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | 时间轴: `SearchBar`, (中文(简体) ), `SegmentControl` или `Filter`。 。 。 .  
说吧 `secondWrapper` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你应该知道 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你是谁 `bottomSheet`, (中文(简体) ),  
`subHeadlineWrapper` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你应该知道 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你是谁 `window` (模式/抽屉). |
| `snapIndex` | `number | undefined` | —— 说 | 被控制着的... Если sheet sheet sheet;  
刷上/下 `onSnapIndexChange`——消费者  
передать. |
| `snapPoints` | `SnapPoint` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? По `undefined` —— 说  
工作表 `height: auto` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}别这样.  
Пример: `[0.5, 1]` - 工作表 \\ \\ \\ \\ \\ \\ ,拖动 \\ \\ \\ \\  
qq全视图端口;拖动qqq `0.5` {\\fn华文仿宋\\fs16\\1chd1d1d1}我...  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你还好吧  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
\- строго по возрастанию: `0` - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;  
\- ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..`['50%', 0.5]` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
одну → дубль;  
\- 说吧 `'fit-content'` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说 `snapPoints`) (中文(简体) )  
{\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你觉得呢. |
| `subtitle` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | 标题. |
| `swipeEnabled` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你帮忙 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你的帮助.  
При `swipeEnabled=false` -=ytet -伊甸园字幕组=- 翻译: `snapIndex` 说吧. |
| `title` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 | Заголовок. 说吧 `title-l` 床单, `headline-s` qq窗口(模式/绘图). |
| `truncate` | `{ title?: number; subtitle?: number; } | undefined` | —— 说 | Усечение `title`编号 :`subtitle` через `TruncateString` (число. Применяется  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎么样? \* 窗口(模式/绘图),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢. |
| `width` | `Width` | —— 说 | Ширина (только:"左"作"右" |
| `withDividers` | `boolean | undefined` | —— 说 | QQ手机:QQQ/QQ/页". |

-   `Position` =: `"bottom"` | `"left"` | `"right"` | `"top"`
    
-   `Width` =: `"l"` | `"m"` | `"s"`
    

### Адаптивность

`Drawer` ——"с"("地上"-"花"). {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `AdaptiveProvider` 页:1 `@cloud-ru/ds-adaptive`API :

-   **桌面** ————————————————————————————————————————————`left`编号 :`right`编号 :`top`编号 :`bottom`) (中文(简体) ).
-   **移动** - контент рендерится рендерится `BottomSheet` из `@cloud-ru/ds-bottom-sheet` (панель也.

\* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \* \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* `<AdaptiveProvider>` \[永久失效連結\] (中文(简体) ). Пропа `layoutType` у:источник也.

#### {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢

\- Форс,не:

-   Поддерево:
    
    ```tsx
    import { AdaptiveProvider } from '@cloud-ru/ds-adaptive'
    
    <AdaptiveProvider layoutType='mobile'>
      <Drawer open={open} onClose={close} content={…} />
    </AdaptiveProvider>
    ```
    
-   – Отдельный – `withLayoutType` (模块-镜, сахар:
    
    ```tsx
    import { withLayoutType } from '@cloud-ru/ds-adaptive'
    import { Drawer } from '@cloud-ru/ds-drawer'
    
    const MobileDrawer = withLayoutType(Drawer, 'mobile')
    ```
    

#### Платформенные

{\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪ {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪ {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪ {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}♪ `BottomSheet` (原始内容存档于2018-09-28). QQ. ========================================================================================================================================================= `DrawerProps`。 。 。 .

| Пропы | 桌面 | 移动 |
| --- | --- | --- |
| `position`, (中文(简体) ), `width`, (中文(简体) ), `heightAuto`, (中文(简体) ), `nestedDrawer` | используется | игнорируется |
| `title`, (中文(简体) ), `subtitle`, (中文(简体) ), `slotAfterTitle`, (中文(简体) ), `onBackButtonClick`, (中文(简体) ), `media`, (中文(简体) ), `content`, (中文(简体) ), `footer` | используется | используется |
| `open`, (中文(简体) ), `onClose`, (中文(简体) ), `showBlackout`, (中文(简体) ), `container`, (中文(简体) ), `closeOnPopstate`, (中文(简体) ), `className`, (中文(简体) ), `rootClassName` | используется | используется |

Подробнее модели- **适应性**。 。 。 .

## 抽屉

\-=YTET -伊甸园字幕组=- 翻译:.

`DrawerCustom` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `Drawer`{\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得怎么样 {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得呢 `DrawerCustom.Header`, (中文(简体) ), `.Body`, (中文(简体) ), `.Footer` или.

Используйте `DrawerCustom`, 翻译 : `Drawer` - недостаточно, нужна, действиями, футер.

### Когда

-   Стандартная/футер `Drawer` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得怎么样.
-   {\\fn黑体\\fs20\\shad2\\2aH82\\3aH20\\4aH33\\fscx95\\3cH592001\\be1}你觉得呢.
-   Кастомные(一作например.

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `Drawer` -=ytet -伊甸园字幕组=- 翻译:.

### Анатомия

#### 职位

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `right` - 座边 -- -- 座边 -- -- 座边, `left` {\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你应该知道 {\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}, `top`编号 :`bottom` -=ytet -伊甸园字幕组=- 翻译:.

#### 宽度

{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `position: left | right`数字 : `s` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}我.., `m` - дефолт, `l` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得怎么样.

### Примеры

#### Ручная

页: 1.

```tsx
import { Button } from '@cloud-ru/ds-button';
import { DrawerCustom } from '@cloud-ru/ds-drawer';
import { useState } from 'react';

export function CustomComposition() {
  const [open, setOpen] = useState(false);
  const close = () => setOpen(false);

  return (
    <>
      <Button label='Открыть custom drawer' appearance='primary' view='filled' onClick={() => setOpen(true)} />
      <DrawerCustom open={open} position='right' width='s' onClose={close}>
        <DrawerCustom.Header title='Ручная композиция' subtitle='Header + Body + Footer собираются вручную.' />
        <DrawerCustom.Body
          content={
            <div style={{ padding: 24 }}>
              <p>Тело Drawer собирается из произвольной разметки.</p>
              <p>Скролл включается автоматически при большом содержимом.</p>
            </div>
          }
        />
        <DrawerCustom.Footer>
          <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>
            <Button label='Закрыть' appearance='neutral' view='outline' onClick={close} />
            <Button label='Подтвердить' appearance='primary' view='filled' onClick={close} />
          </div>
        </DrawerCustom.Footer>
      </DrawerCustom>
    </>
  );
}
```

### 道具

**抽取程序**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `children` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 |  |
| `className` | `string` | —— 说 | CSS - класс элемента с с |
| `closeOnPopstate` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `container` | `string | HTMLElement` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你说什么? - 身体状况 |
| `data-test-id` | `string` | —— 说 |  |
| `disableMotions` | `boolean` | `false` | Отключить |
| `footer` | `ReactElement<any, string | JSXElementConstructor<any>>` | —— 说 | Футер |
| `heightAuto` | `boolean` | `false` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `position: "top" | "bottom"`) (中文(简体) ). |
| `nestedDrawer` | `DrawerCustomProps` | —— 说 | QQ 绘图器 |
| `onClose` | `() => void` | —— 说 | Колбэк |
| `open` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢. |
| `position` | `"bottom"` | `"left"` | `"right"` | `"top"` | —— 说 | Расположение |
| `push` | `boolean | PushConfig` | —— 说 | \# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |
| `resizable` | `ResizableMax` | `'s'` | Ширина (только:"左"作"右" |
| `rootClassName` | `string` | —— 说 | SS класс |
| `safeAreaBottom` | `boolean` | `true` | IOS家用指示器 \\ Android导航栏。 Размер-токен  
`safeArea.bottom.minHeight`, на с с `env(safe-area-inset-bottom)` - 内置. |
| `safeAreaTop` | `boolean` | `true` | 安全区域 iOS Notch / status-bar. Размер-токен `safeArea.top.minHeight`, (中文(简体) ),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `env(safe-area-inset-top)` - 内置。 Применяется,только也  
工作表 工作表 工作表 工作表. |
| `showBlackout` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `showButtonClosed` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `snapPoints` | `SnapPoint` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? По `undefined` —— 说  
工作表 `height: auto` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}别这样.  
Пример: `[0.5, 1]` - 工作表 \\ \\ \\ \\ \\ \\ ,拖动 \\ \\ \\ \\  
qq全视图端口;拖动qqq `0.5` {\\fn华文仿宋\\fs16\\1chd1d1d1}我...  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你还好吧  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
\- строго по возрастанию: `0` - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;  
\- ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..`['50%', 0.5]` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
одну → дубль;  
\- 说吧 `'fit-content'` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说 `snapPoints`) (中文(简体) )  
{\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你觉得呢. |
| `swipeEnabled` | `boolean` | `true` | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你帮忙 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你的帮助.  
При `swipeEnabled=false` -=ytet -伊甸园字幕组=- 翻译: `snapIndex` 说吧. |
| `width` | `Width` | `'s'` | Ширина (только:"左"作"右" |

##### 相关类型

**抽取程序**

| Prop | 类型 | 默认 | 说明 |
| --- | --- | --- | --- |
| `children` | `string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined` | —— 说 |  |
| `className` | `string | undefined` | —— 说 | CSS - класс элемента с с |
| `closeOnPopstate` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `container` | `string | HTMLElement | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你说什么? - 身体状况 |
| `data-test-id` | `string | undefined` | —— 说 |  |
| `disableMotions` | `boolean | undefined` | —— 说 | Отключить |
| `footer` | `ReactElement<any, string | JSXElementConstructor<any>> | undefined` | —— 说 | Футер |
| `heightAuto` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 `position: "top" | "bottom"`) (中文(简体) ). |
| `nestedDrawer` | `DrawerCustomProps` | —— 说 | QQ 绘图器 |
| `onClose` | `() => void` | —— 说 | Колбэк |
| `open` | `boolean` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢. |
| `position` | `"bottom"` | `"left"` | `"right"` | `"top"` | —— 说 | Расположение |
| `push` | `boolean | PushConfig | undefined` | —— 说 | \# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |
| `resizable` | `ResizableMax` | —— 说 | Ширина (только:"左"作"右" |
| `rootClassName` | `string | undefined` | —— 说 | SS класс |
| `safeAreaBottom` | `boolean | undefined` | —— 说 | IOS家用指示器 \\ Android导航栏。 Размер-токен  
`safeArea.bottom.minHeight`, на с с `env(safe-area-inset-bottom)` - 内置. |
| `safeAreaTop` | `boolean | undefined` | —— 说 | 安全区域 iOS Notch / status-bar. Размер-токен `safeArea.top.minHeight`, (中文(简体) ),  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢 `env(safe-area-inset-top)` - 内置。 Применяется,только也  
工作表 工作表 工作表 工作表. |
| `showBlackout` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `showButtonClosed` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢 |
| `snapPoints` | `SnapPoint` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你觉得呢? По `undefined` —— 说  
工作表 `height: auto` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}别这样.  
Пример: `[0.5, 1]` - 工作表 \\ \\ \\ \\ \\ \\ ,拖动 \\ \\ \\ \\  
qq全视图端口;拖动qqq `0.5` {\\fn华文仿宋\\fs16\\1chd1d1d1}我...  
{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}你还好吧  
{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
\- строго по возрастанию: `0` - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;  
\- ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..`['50%', 0.5]` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢  
одну → дубль;  
\- 说吧 `'fit-content'` {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}请说 `snapPoints`) (中文(简体) )  
{\\fn黑体\\fs20\\shad2\\2ah82\\3ah20\\4ah33\\fscx95\\3ch592001\\be1}你觉得呢. |
| `swipeEnabled` | `boolean | undefined` | —— 说 | {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你帮忙 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}我需要你的帮助.  
При `swipeEnabled=false` -=ytet -伊甸园字幕组=- 翻译: `snapIndex` 说吧. |
| `width` | `Width` | —— 说 | Ширина (только:"左"作"右" |

-   `Position` =: `"bottom"` | `"left"` | `"right"` | `"top"`
    
-   `ResizableMax` =: `number | "full"`
    
-   `Width` =: `"l"` | `"m"` | `"s"`

## 常见问题

### @cloud-ru/ds-drawer 是什么？

\{\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080\}=======================================================================================================================================================================================================================================\.

### 如何安装 @cloud-ru/ds-drawer？

在项目目录运行 npm install @cloud-ru/ds-drawer，或使用 pnpm add / yarn add / bun add。

### @cloud-ru/ds-drawer 支持 TypeScript 吗？

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

### @cloud-ru/ds-drawer 支持 ESM 还是 CommonJS？

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

### @cloud-ru/ds-drawer 可以商用吗？

@cloud-ru/ds-drawer 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @cloud-ru/ds-drawer 的下载量有多少？

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

### @cloud-ru/ds-drawer 还在维护吗？

最新版本 2\.3\.0 发布于 2026/11/11（今天）；至今共发布 140 个版本，其中过去 12 个月发布了 140 个；首次发布于 2026/08/18。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

