@cloud-ru/ds-drawer

中文文档
2.3.0发布于 2026/11/11Apache-2.0TypeScriptESM + CJS近 30 天下载 6737

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

中文使用文档
文档目录12 节
  1. Установка
  2. Смотри
  3. 绘图器
  4. Когда
  5. Примеры
  6. 道具
  7. Адаптивность
  8. 抽屉
  9. Когда
  10. Анатомия
  11. Примеры
  12. 道具

绘图器

@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 или.

Установка

pnpm add @cloud-ru/ds-drawer
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。 。 。 .

Когда

  • {\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。 。 。 .

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 }}
          />
        }
      />
    </>
  );
}

Критическое

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

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}你觉得呢.

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 - 。 。 。 。 .

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 绘图器

Родитель.

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类型默认说明
additionalButtonBottomSheetActionButton—— 说(третья) Button 页:1 view='simple', (中文(简体) ), appearance='neutral') (中文(简体) ).
approveButtonBottomSheetActionButton—— 说. . . . Button 页:1 view='filled', (中文(简体) ), appearance='primary') (中文(简体) ).
cancelButtonBottomSheetActionButton—— 说. . . Button (по view='outline', (中文(简体) ), appearance='neutral') (中文(简体) ).
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说
classNamestring—— 说CSS - класс элемента с с
支助科
closeOnPopstateboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
containerstring | HTMLElement—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你说什么? - 身体状况
contentReactNode—— 说体 (альтернатива) children) (中文(简体) ).
contentRefRef<HTMLElement>—— 说Ссылка(一作например.
data-test-idstring—— 说
disableMotionsbooleanfalseОтключить
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。 。 。 .
heightAutobooleanfalse{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 position: "top" | "bottom") (中文(简体) ).
mediaReactNode—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
nestedDrawerDrawerProps—— 说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。 。 。 .
openboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢.
position"bottom" | "left" | "right" | "top"—— 说Расположение
rootClassNamestring—— 说SS класс
safeAreaBottombooleantrueIOS家用指示器 \ Android导航栏。 Размер-токен
safeArea.bottom.minHeight, на с с env(safe-area-inset-bottom) - 内置.
safeAreaTopbooleantrue安全区域 iOS Notch / status-bar. Размер-токен safeArea.top.minHeight, (中文(简体) ),
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 env(safe-area-inset-top) - 内置。 Применяется,только也
工作表 工作表 工作表 工作表.
showBlackoutbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
showButtonClosedbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
slotAfterTitleReactNode—— 说QQ 标题, QuestionTooltip из @cloud-ru/ds-tooltip) (中文(简体) ).
slotSecondTitleReactNode—— 说时间轴: 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 (模式/抽屉).
snapIndexnumber—— 说被控制着的... Если sheet sheet sheet;
刷上/下 onSnapIndexChange——消费者
передать.
snapPointsSnapPoint—— 说{\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}你觉得呢.
subtitleReactNode—— 说标题.
swipeEnabledbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我需要你帮忙 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我需要你的帮助.
При swipeEnabled=false -=ytet -伊甸园字幕组=- 翻译: snapIndex 说吧.
titleReactNode—— 说Заголовок. 说吧 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}你觉得呢.
widthWidth's'Ширина (только:"左"作"右"
withDividersbooleanfalseQQ手机:QQQ/QQ/页".

绘图程序

Prop类型默认说明
additionalButtonBottomSheetActionButton—— 说(третья) Button 页:1 view='simple', (中文(简体) ), appearance='neutral') (中文(简体) ).
approveButtonBottomSheetActionButton—— 说. . . . Button 页:1 view='filled', (中文(简体) ), appearance='primary') (中文(简体) ).
cancelButtonBottomSheetActionButton—— 说. . . Button (по view='outline', (中文(简体) ), appearance='neutral') (中文(简体) ).
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说
classNamestring | undefined—— 说CSS - класс элемента с с
支助科
closeOnPopstateboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
containerstring | HTMLElement | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你说什么? - 身体状况
contentstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说体 (альтернатива) children) (中文(简体) ).
contentRefRef<HTMLElement> | undefined—— 说Ссылка(一作например.
data-test-idstring | undefined—— 说
disableMotionsboolean | 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。 。 。 .
heightAutoboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 position: "top" | "bottom") (中文(简体) ).
mediastring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
nestedDrawerDrawerProps—— 说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。 。 。 .
openboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢.
position"bottom" | "left" | "right" | "top"—— 说Расположение
rootClassNamestring | undefined—— 说SS класс
safeAreaBottomboolean | undefined—— 说IOS家用指示器 \ Android导航栏。 Размер-токен
safeArea.bottom.minHeight, на с с env(safe-area-inset-bottom) - 内置.
safeAreaTopboolean | undefined—— 说安全区域 iOS Notch / status-bar. Размер-токен safeArea.top.minHeight, (中文(简体) ),
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 env(safe-area-inset-top) - 内置。 Применяется,только也
工作表 工作表 工作表 工作表.
showBlackoutboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
showButtonClosedboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
slotAfterTitlestring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说QQ 标题, QuestionTooltip из @cloud-ru/ds-tooltip) (中文(简体) ).
slotSecondTitlestring | 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 (模式/抽屉).
snapIndexnumber | undefined—— 说被控制着的... Если sheet sheet sheet;
刷上/下 onSnapIndexChange——消费者
передать.
snapPointsSnapPoint—— 说{\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}你觉得呢.
subtitlestring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说标题.
swipeEnabledboolean | 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 说吧.
titlestring | 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}你觉得呢.
widthWidth—— 说Ширина (только:"左"作"右"
withDividersboolean | 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-adaptiveAPI :

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

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

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

- Форс,не:

  • Поддерево:
    import { AdaptiveProvider } from '@cloud-ru/ds-adaptive'
    
    <AdaptiveProvider layoutType='mobile'>
      <Drawer open={open} onClose={close} content={…} />
    </AdaptiveProvider>
    
  • – Отдельный – withLayoutType (模块-镜, сахар:
    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.

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类型默认说明
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说
classNamestring—— 说CSS - класс элемента с с
closeOnPopstateboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
containerstring | HTMLElement—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你说什么? - 身体状况
data-test-idstring—— 说
disableMotionsbooleanfalseОтключить
footerReactElement<any, string | JSXElementConstructor<any>>—— 说Футер
heightAutobooleanfalse{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 position: "top" | "bottom") (中文(简体) ).
nestedDrawerDrawerCustomProps—— 说QQ 绘图器
onClose() => void—— 说Колбэк
openboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢.
position"bottom" | "left" | "right" | "top"—— 说Расположение
pushboolean | PushConfig—— 说# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
resizableResizableMax's'Ширина (только:"左"作"右"
rootClassNamestring—— 说SS класс
safeAreaBottombooleantrueIOS家用指示器 \ Android导航栏。 Размер-токен
safeArea.bottom.minHeight, на с с env(safe-area-inset-bottom) - 内置.
safeAreaTopbooleantrue安全区域 iOS Notch / status-bar. Размер-токен safeArea.top.minHeight, (中文(简体) ),
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 env(safe-area-inset-top) - 内置。 Применяется,только也
工作表 工作表 工作表 工作表.
showBlackoutbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
showButtonClosedbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
snapPointsSnapPoint—— 说{\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}你觉得呢.
swipeEnabledbooleantrue{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我需要你帮忙 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我需要你的帮助.
При swipeEnabled=false -=ytet -伊甸园字幕组=- 翻译: snapIndex 说吧.
widthWidth's'Ширина (только:"左"作"右"

抽取程序

Prop类型默认说明
childrenstring | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined—— 说
classNamestring | undefined—— 说CSS - класс элемента с с
closeOnPopstateboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
containerstring | HTMLElement | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你说什么? - 身体状况
data-test-idstring | undefined—— 说
disableMotionsboolean | undefined—— 说Отключить
footerReactElement<any, string | JSXElementConstructor<any>> | undefined—— 说Футер
heightAutoboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 position: "top" | "bottom") (中文(简体) ).
nestedDrawerDrawerCustomProps—— 说QQ 绘图器
onClose() => void—— 说Колбэк
openboolean—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢.
position"bottom" | "left" | "right" | "top"—— 说Расположение
pushboolean | PushConfig | undefined—— 说# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
resizableResizableMax—— 说Ширина (только:"左"作"右"
rootClassNamestring | undefined—— 说SS класс
safeAreaBottomboolean | undefined—— 说IOS家用指示器 \ Android导航栏。 Размер-токен
safeArea.bottom.minHeight, на с с env(safe-area-inset-bottom) - 内置.
safeAreaTopboolean | undefined—— 说安全区域 iOS Notch / status-bar. Размер-токен safeArea.top.minHeight, (中文(简体) ),
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 env(safe-area-inset-top) - 内置。 Применяется,только也
工作表 工作表 工作表 工作表.
showBlackoutboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
showButtonClosedboolean | undefined—— 说{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
snapPointsSnapPoint—— 说{\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}你觉得呢.
swipeEnabledboolean | 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 说吧.
widthWidth—— 说Ширина (только:"左"作"右"
  • Position =: "bottom" | "left" | "right" | "top"

  • ResizableMax =: number | "full"

  • Width =: "l" | "m" | "s"

版本与发布记录

@cloud-ru/ds-drawer 共发布 140 个版本,首次发布于 2026/08/18;过去 12 个月发布了 140 个版本。

版本发布日期距今
2.3.0latest2026/11/11今天
2.2.2-preview-e8fe6b56.0preview2026/11/11今天
2.2.2-preview-c0e895ed.02026/11/11今天
2.2.2-preview-90b10112.02026/11/11今天
2.2.2-preview-fd7dd437.02026/11/101 天前
2.2.2-preview-9a75a2a9.02026/11/101 天前

关于 @cloud-ru/ds-drawer 的常见问题

@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 和提交记录判断。