From a93da3d442fb21733077fe904180c03dd2e84c40 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?=
 =?UTF-8?q?=D0=BB=D1=8E=D0=B3=D0=B8=D0=BD?= <d.malygin@iqdev.digital>
Date: Wed, 11 Dec 2024 17:48:43 +0500
Subject: [PATCH] feat: really finish with Drawer and add Divider

---
 .storybook/manager-head.html                  |  11 +
 README.md                                     |   6 +
 public/storybook.ico                          | Bin 0 -> 218174 bytes
 src/common/constants/icons.ts                 | 209 ++++++++++++++++++
 src/common/helpers/icons.ts                   |   8 -
 src/common/interfaces/common.ts               |   4 +
 .../components/Divider/Divider.stories.ts     |  58 +++++
 src/stories/components/Divider/Divider.vue    |  14 +-
 .../components/Drawer/Drawer.stories.ts       |  36 ++-
 src/stories/components/Drawer/Drawer.vue      |  85 +++++--
 10 files changed, 396 insertions(+), 35 deletions(-)
 create mode 100644 .storybook/manager-head.html
 create mode 100644 public/storybook.ico
 create mode 100644 src/common/constants/icons.ts
 delete mode 100644 src/common/helpers/icons.ts
 create mode 100644 src/stories/components/Divider/Divider.stories.ts

diff --git a/.storybook/manager-head.html b/.storybook/manager-head.html
new file mode 100644
index 0000000..657a1b8
--- /dev/null
+++ b/.storybook/manager-head.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <link rel="icon" href="./storybook.ico">
+  <title>Storybook</title>
+</head>
+<body>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/README.md b/README.md
index 4e72dcb..5b1dc0d 100644
--- a/README.md
+++ b/README.md
@@ -27,3 +27,9 @@ yarn dev
 ```sh
 yarn build
 ```
+
+## Важные моменты при разработке
+
+После создания иконки:
+1. Добавить иконку в iconsSet (src/common/constants/icons);
+2. Добавить иконку в соответствующий массив в App.vue.
\ No newline at end of file
diff --git a/public/storybook.ico b/public/storybook.ico
new file mode 100644
index 0000000000000000000000000000000000000000..690ee543d1b7a8d727252f9d278e2538ad02a61f
GIT binary patch
literal 218174
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

literal 0
HcmV?d00001

diff --git a/src/common/constants/icons.ts b/src/common/constants/icons.ts
new file mode 100644
index 0000000..3762015
--- /dev/null
+++ b/src/common/constants/icons.ts
@@ -0,0 +1,209 @@
+import type { Component } from 'vue';
+
+import Age18Icon from '@stories/icons/Mono/Age18Icon.vue';
+import AirplaneIcon from '@stories/icons/Mono/AirplaneIcon.vue';
+import AlarmIcon from '@stories/icons/Mono/AlarmIcon.vue';
+import AlignCenterIcon from '@stories/icons/Mono/AlignCenterIcon.vue';
+import AlignLeftIcon from '@stories/icons/Mono/AlignLeftIcon.vue';
+import AlignRightIcon from '@stories/icons/Mono/AlignRightIcon.vue';
+import AnchorIcon from '@stories/icons/Mono/AnchorIcon.vue';
+import AnchorLinkIcon from '@stories/icons/Mono/AnchorLinkIcon.vue';
+import ArchiveIcon from '@stories/icons/Mono/ArchiveIcon.vue';
+import ArrowForwardIcon from '@stories/icons/Mono/ArrowForwardIcon.vue';
+import ArrowLeftIcon from '@stories/icons/Mono/ArrowLeftIcon.vue';
+import ArrowRightIcon from '@stories/icons/Mono/ArrowRightIcon.vue';
+import ArrowsVerticalIcon from '@stories/icons/Mono/ArrowsVerticalIcon.vue';
+import AtIcon from '@stories/icons/Mono/AtIcon.vue';
+import AwardIcon from '@stories/icons/Mono/AwardIcon.vue';
+import BackspaceIcon from '@stories/icons/Mono/BackspaceIcon.vue';
+import BadgeIcon from '@stories/icons/Mono/BadgeIcon.vue';
+import BallFootballIcon from '@stories/icons/Mono/BallFootballIcon.vue';
+import BallIcon from '@stories/icons/Mono/BallIcon.vue';
+import BanknoteIcon from '@stories/icons/Mono/BanknoteIcon.vue';
+import BellIcon from '@stories/icons/Mono/BellIcon.vue';
+import BellOffIcon from '@stories/icons/Mono/BellOffIcon.vue';
+import BoxIcon from '@stories/icons/Mono/BoxIcon.vue';
+import BrightnessIcon from '@stories/icons/Mono/BrightnessIcon.vue';
+import BulbIcon from '@stories/icons/Mono/BulbIcon.vue';
+import CalculatorIcon from '@stories/icons/Mono/CalculatorIcon.vue';
+import CalendarAddIcon from '@stories/icons/Mono/CalendarAddIcon.vue';
+import CalendarIcon from '@stories/icons/Mono/CalendarIcon.vue';
+import CalendarRemoveIcon from '@stories/icons/Mono/CalendarRemoveIcon.vue';
+import CardsIcon from '@stories/icons/Mono/CardsIcon.vue';
+import ChartLineIcon from '@stories/icons/Mono/ChartLineIcon.vue';
+import ChartPieIcon from '@stories/icons/Mono/ChartPieIcon.vue';
+import ChatIcon from '@stories/icons/Mono/ChatIcon.vue';
+import CrossCircleIcon from '@stories/icons/Mono/CrossCircleIcon.vue';
+import CropIcon from '@stories/icons/Mono/CropIcon.vue';
+import ChatWritingIcon from '@stories/icons/Mono/ChatWritingIcon.vue'
+import CheckmarkIcon from '@stories/icons/Mono/CheckmarkIcon.vue'
+import ChemistryFlaskIcon from '@stories/icons/Mono/ChemistryFlaskIcon.vue'
+import CodeIcon from '@stories/icons/Mono/CodeIcon.vue'
+import CoinsIcon from '@stories/icons/Mono/CoinsIcon.vue'
+import ColorPaletteIcon from '@stories/icons/Mono/ColorPaletteIcon.vue'
+import CompassIcon from '@stories/icons/Mono/CompassIcon.vue'
+import ConstructionWorkerIcon from '@stories/icons/Mono/ConstructionWorkerIcon.vue'
+import ContactsIcon from '@stories/icons/Mono/ContactsIcon.vue'
+import CrossIcon from '@stories/icons/Mono/CrossIcon.vue'
+import CubeIcon from '@stories/icons/Mono/CubeIcon.vue'
+import CupIcon from '@stories/icons/Mono/CupIcon.vue'
+import CursorIcon from '@stories/icons/Mono/CursorIcon.vue'
+import DiamondIcon from '@stories/icons/Mono/DiamondIcon.vue'
+import DiaryIcon from '@stories/icons/Mono/DiaryIcon.vue'
+import DiceIcon from '@stories/icons/Mono/DiceIcon.vue'
+import DigIcon from '@stories/icons/Mono/DigIcon.vue'
+import DislikeIcon from '@stories/icons/Mono/DislikeIcon.vue'
+import DisplayIcon from '@stories/icons/Mono/DisplayIcon.vue'
+import DocumentIcon from '@stories/icons/Mono/DocumentIcon.vue'
+import DocumentAddIcon from '@stories/icons/Mono/DocumentAddIcon.vue'
+import DocumentDeleteIcon from '@stories/icons/Mono/DocumentDeleteIcon.vue'
+import DocumentEditIcon from '@stories/icons/Mono/DocumentEditIcon.vue'
+import DollarIcon from '@stories/icons/Mono/DollarIcon.vue'
+import DotsHorizontalIcon from '@stories/icons/Mono/DotsHorizontalIcon.vue'
+import DotsVerticalIcon from '@stories/icons/Mono/DotsVerticalIcon.vue'
+import DownloadIcon from '@stories/icons/Mono/DownloadIcon.vue'
+import DropIcon from '@stories/icons/Mono/DropIcon.vue'
+import DumbbelIcon from '@stories/icons/Mono/DumbbelIcon.vue'
+import EarthIcon from '@stories/icons/Mono/EarthIcon.vue'
+import EditIcon from '@stories/icons/Mono/EditIcon.vue'
+import EncyclopediaIcon from '@stories/icons/Mono/EncyclopediaIcon.vue'
+import ExitIcon from '@stories/icons/Mono/ExitIcon.vue'
+import EyeIcon from '@stories/icons/Mono/EyeIcon.vue'
+import FeedbackIcon from '@stories/icons/Mono/FeedbackIcon.vue'
+import FilterIcon from '@stories/icons/Mono/FilterIcon.vue'
+import FingerprintIcon from '@stories/icons/Mono/FingerprintIcon.vue'
+import FireIcon from '@stories/icons/Mono/FireIcon.vue'
+import FlagIcon from '@stories/icons/Mono/FlagIcon.vue'
+import FlashIcon from '@stories/icons/Mono/FlashIcon.vue'
+import FlashlightIcon from '@stories/icons/Mono/FlashlightIcon.vue'
+import FolderLockIcon from '@stories/icons/Mono/FolderLockIcon.vue'
+import FrameIcon from '@stories/icons/Mono/FrameIcon.vue'
+import FullScreenIcon from '@stories/icons/Mono/FullScreenIcon.vue'
+import GameControllerIcon from '@stories/icons/Mono/GameControllerIcon.vue'
+import GiftIcon from '@stories/icons/Mono/GiftIcon.vue'
+import GlassesIcon from '@stories/icons/Mono/GlassesIcon.vue'
+import HamburgerIcon from '@stories/icons/Mono/HamburgerIcon.vue'
+import HandIcon from '@stories/icons/Mono/HandIcon.vue'
+import HomeIcon from '@stories/icons/Mono/HomeIcon.vue'
+import ImageIcon from '@stories/icons/Mono/ImageIcon.vue'
+import ImageEditIcon from '@stories/icons/Mono/ImageEditIcon.vue'
+import LineIcon from '@stories/icons/Mono/LineIcon.vue'
+import LineDashedIcon from '@stories/icons/Mono/LineDashedIcon.vue'
+import LineDottedIcon from '@stories/icons/Mono/LineDottedIcon.vue'
+import LineDiagonalIcon from '@stories/icons/Mono/LineDiagonalIcon.vue'
+import MoveIcon from '@stories/icons/Mono/MoveIcon.vue'
+import ParagraphIcon from '@stories/icons/Mono/ParagraphIcon.vue'
+import PhoneHandsetIcon from '@stories/icons/Mono/PhoneHandsetIcon.vue'
+import PlusCircleIcon from '@stories/icons/Mono/PlusCircleIcon.vue'
+import PlusIcon from '@stories/icons/Mono/PlusIcon.vue'
+import PointerIcon from '@stories/icons/Mono/PointerIcon.vue'
+import SaveIcon from '@stories/icons/Mono/SaveIcon.vue'
+import SettingsIcon from '@stories/icons/Mono/SettingsIcon.vue'
+import TableIcon from '@stories/icons/Mono/TableIcon.vue'
+import TrashIcon from '@stories/icons/Mono/TrashIcon.vue'
+import UserIcon from '@stories/icons/Mono/UserIcon.vue'
+
+export const iconsSet: Record<string, Component> = {
+  Age18Icon: Age18Icon,
+  AirplaneIcon: AirplaneIcon,
+  AlarmIcon: AlarmIcon,
+  AlignCenterIcon: AlignCenterIcon,
+  AlignLeftIcon: AlignLeftIcon,
+  AlignRightIcon: AlignRightIcon,
+  AnchorIcon: AnchorIcon,
+  AnchorLinkIcon: AnchorLinkIcon,
+  ArchiveIcon: ArchiveIcon,
+  ArrowForwardIcon: ArrowForwardIcon,
+  ArrowLeftIcon: ArrowLeftIcon,
+  ArrowRightIcon: ArrowRightIcon,
+  ArrowsVerticalIcon: ArrowsVerticalIcon,
+  AtIcon: AtIcon,
+  AwardIcon: AwardIcon,
+  BackspaceIcon: BackspaceIcon,
+  BadgeIcon: BadgeIcon,
+  BallFootballIcon: BallFootballIcon,
+  BallIcon: BallIcon,
+  BanknoteIcon: BanknoteIcon,
+  BellIcon: BellIcon,
+  BellOffIcon: BellOffIcon,
+  BoxIcon: BoxIcon,
+  BrightnessIcon: BrightnessIcon,
+  BulbIcon: BulbIcon,
+  CalculatorIcon: CalculatorIcon,
+  CalendarAddIcon: CalendarAddIcon,
+  CalendarIcon: CalendarIcon,
+  CalendarRemoveIcon: CalendarRemoveIcon,
+  CardsIcon: CardsIcon,
+  ChartLineIcon: ChartLineIcon,
+  ChartPieIcon: ChartPieIcon,
+  ChatIcon: ChatIcon,
+  ChatWritingIcon: ChatWritingIcon,
+  CheckmarkIcon: CheckmarkIcon,
+  ChemistryFlaskIcon: ChemistryFlaskIcon,
+  CodeIcon: CodeIcon,
+  CoinsIcon: CoinsIcon,
+  ColorPaletteIcon: ColorPaletteIcon,
+  CompassIcon: CompassIcon,
+  ConstructionWorkerIcon: ConstructionWorkerIcon,
+  ContactsIcon: ContactsIcon,
+  CropIcon: CropIcon,
+  CrossIcon: CrossIcon,
+  CrossCircleIcon: CrossCircleIcon,
+  CubeIcon: CubeIcon,
+  CupIcon: CupIcon,
+  CursorIcon: CursorIcon,
+  DiamondIcon: DiamondIcon,
+  DiaryIcon: DiaryIcon,
+  DiceIcon: DiceIcon,
+  DigIcon: DigIcon,
+  DislikeIcon: DislikeIcon,
+  DisplayIcon: DisplayIcon,
+  DocumentIcon: DocumentIcon,
+  DocumentAddIcon: DocumentAddIcon,
+  DocumentDeleteIcon: DocumentDeleteIcon,
+  DocumentEditIcon: DocumentEditIcon,
+  DollarIcon: DollarIcon,
+  DotsHorizontalIcon: DotsHorizontalIcon,
+  DotsVerticalIcon: DotsVerticalIcon,
+  DownloadIcon: DownloadIcon,
+  DropIcon: DropIcon,
+  DumbbelIcon: DumbbelIcon,
+  EarthIcon: EarthIcon,
+  EditIcon: EditIcon,
+  EncyclopediaIcon: EncyclopediaIcon,
+  ExitIcon: ExitIcon,
+  EyeIcon: EyeIcon,
+  FeedbackIcon: FeedbackIcon,
+  FilterIcon: FilterIcon,
+  FingerprintIcon: FingerprintIcon,
+  FireIcon: FireIcon,
+  FlagIcon: FlagIcon,
+  FlashIcon: FlashIcon,
+  FlashlightIcon: FlashlightIcon,
+  FolderLockIcon: FolderLockIcon,
+  FrameIcon: FrameIcon,
+  FullScreenIcon: FullScreenIcon,
+  GameControllerIcon: GameControllerIcon,
+  GiftIcon: GiftIcon,
+  GlassesIcon: GlassesIcon,
+  HamburgerIcon: HamburgerIcon,
+  HandIcon: HandIcon,
+  HomeIcon: HomeIcon,
+  ImageIcon: ImageIcon,
+  ImageEditIcon: ImageEditIcon,
+  LineIcon: LineIcon,
+  LineDashedIcon: LineDashedIcon,
+  LineDottedIcon: LineDottedIcon,
+  LineDiagonalIcon: LineDiagonalIcon,
+  MoveIcon: MoveIcon,
+  ParagraphIcon: ParagraphIcon,
+  PhoneHandsetIcon: PhoneHandsetIcon,
+  PlusCircleIcon: PlusCircleIcon,
+  PlusIcon: PlusIcon,
+  PointerIcon: PointerIcon,
+  SaveIcon: SaveIcon,
+  SettingsIcon: SettingsIcon,
+  TableIcon: TableIcon,
+  TrashIcon: TrashIcon,
+  UserIcon: UserIcon,
+};
diff --git a/src/common/helpers/icons.ts b/src/common/helpers/icons.ts
deleted file mode 100644
index 7fbd44b..0000000
--- a/src/common/helpers/icons.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import CrossCircleIcon from '@stories/icons/Mono/CrossCircleIcon.vue';
-import CropIcon from '@stories/icons/Mono/CropIcon.vue';
-import type { Component } from 'vue';
-
-export const iconsSet: Record<string, Component> = {
-  CrossCircleIcon: CrossCircleIcon,
-  CropIcon: CropIcon,
-};
diff --git a/src/common/interfaces/common.ts b/src/common/interfaces/common.ts
index 8cbf8a9..ffde71b 100644
--- a/src/common/interfaces/common.ts
+++ b/src/common/interfaces/common.ts
@@ -1,3 +1,5 @@
+import type { iconsSet } from '@/common/constants/icons';
+
 export type TThemeColor =
   | 'white'
   | 'slate'
@@ -14,3 +16,5 @@ export type TThemeColor =
   | 'rose'
   | 'red'
   | 'black';
+
+export type TIcons = keyof typeof iconsSet;
diff --git a/src/stories/components/Divider/Divider.stories.ts b/src/stories/components/Divider/Divider.stories.ts
new file mode 100644
index 0000000..aa8f212
--- /dev/null
+++ b/src/stories/components/Divider/Divider.stories.ts
@@ -0,0 +1,58 @@
+import type { Meta, StoryObj } from '@storybook/vue3';
+
+import Divider from './Divider.vue';
+
+const meta: Meta = {
+  title: 'Components/Divider',
+  component: Divider,
+  tags: ['autodocs'],
+  argTypes: {
+    height: { control: 'number' },
+    type: { control: 'select', options: ['solid', 'dashed', 'dotted'] },
+    color: {
+      control: 'select',
+      options: [
+        'white',
+        'slate',
+        'blue',
+        'sky',
+        'teal',
+        'green',
+        'yellow',
+        'orange',
+        'pink',
+        'fuchsia',
+        'purple',
+        'indigo',
+        'rose',
+        'red',
+        'black',
+      ],
+    },
+  },
+  args: {
+    // primary: false,
+    // Use `fn` to spy on the onClick arg, which will appear in the actions panel once invoked: https://storybook.js.org/docs/essentials/actions#action-args
+    // onClick: fn(),
+  },
+} satisfies Meta<typeof Divider>;
+
+export default meta;
+
+type Story = StoryObj<typeof meta>;
+/*
+ *👇 Render functions are a framework specific feature to allow you control on how the component renders.
+ * See https://storybook.js.org/docs/api/csf
+ * to learn how to use render functions.
+ */
+export const Primary: Story = {
+  args: {},
+};
+
+export const RedDashed: Story = {
+  args: {
+    height: 2,
+    color: 'red',
+    type: 'dashed',
+  },
+};
diff --git a/src/stories/components/Divider/Divider.vue b/src/stories/components/Divider/Divider.vue
index ed05734..32f230a 100644
--- a/src/stories/components/Divider/Divider.vue
+++ b/src/stories/components/Divider/Divider.vue
@@ -1,13 +1,23 @@
 <script setup lang="ts">
+import { computed } from 'vue';
+import type { TThemeColor } from '@interfaces/common';
+import { convert500ThemeToColor } from '@helpers/colors';
+
 interface Props {
   height?: number;
   type?: 'solid' | 'dashed' | 'dotted';
+  color?: TThemeColor;
 }
-defineProps<Props>();
+const props = withDefaults(defineProps<Props>(), {
+  height: 1,
+  type: 'solid',
+  color: 'black',
+});
+const colorConverted = computed(() => convert500ThemeToColor(props.color));
 </script>
 
 <template>
-  <div :style="`border-bottom: ${height ?? 1}px ${type ?? 'solid'} #6b7280`" class="w-full"></div>
+  <div :style="`border-bottom: ${height}px ${type} ${colorConverted}`" class="w-full"></div>
 </template>
 
 <style scoped></style>
diff --git a/src/stories/components/Drawer/Drawer.stories.ts b/src/stories/components/Drawer/Drawer.stories.ts
index d86ecef..1cc0506 100644
--- a/src/stories/components/Drawer/Drawer.stories.ts
+++ b/src/stories/components/Drawer/Drawer.stories.ts
@@ -1,12 +1,24 @@
 import type { Meta, StoryObj } from '@storybook/vue3';
 
 import Drawer from './Drawer.vue';
+import { iconsSet } from '@/common/constants/icons';
 
 const meta: Meta = {
   title: 'Components/Drawer',
   component: Drawer,
   tags: ['autodocs'],
   argTypes: {
+    visible: { control: 'boolean' },
+    position: { control: 'select', options: ['left', 'right', 'top', 'bottom'] },
+    width: { control: 'number' },
+    header: { control: 'text' },
+    default: { control: 'text' },
+    footer: { control: 'text' },
+    isModal: { control: 'boolean' },
+    isDismissible: { control: 'boolean' },
+    closeIcon: { control: 'select', options: Object.keys(iconsSet) },
+    isHeaderDivider: { control: 'boolean' },
+    isFooterDivider: { control: 'boolean' },
     theme: {
       control: 'select',
       options: [
@@ -27,11 +39,6 @@ const meta: Meta = {
         'black',
       ],
     },
-    visible: { control: 'boolean' },
-    width: { control: 'number' },
-    header: { control: 'text' },
-    default: { control: 'text' },
-    footer: { control: 'text' },
   },
   args: {
     // primary: false,
@@ -51,5 +58,24 @@ type Story = StoryObj<typeof meta>;
 export const Primary: Story = {
   args: {
     visible: true,
+    default: 'Какой-то текст.',
+  },
+};
+
+export const BlackFull: Story = {
+  args: {
+    visible: true,
+    width: 200,
+    theme: 'black',
+    closeIcon: 'CrossIcon',
+    header: 'Drawer',
+    footer: 'The end.',
+    isHeaderDivider: true,
+    isFooterDivider: true,
+
+    default:
+      '  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto dicta dolorum eaque explicabo illo. Beatae et eveniet itaque libero sint. Atque blanditiis consequuntur dolorum explicabo, facilis iste nulla numquam provident.',
+
+    isModal: true,
   },
 };
diff --git a/src/stories/components/Drawer/Drawer.vue b/src/stories/components/Drawer/Drawer.vue
index ddd4d21..01c5691 100644
--- a/src/stories/components/Drawer/Drawer.vue
+++ b/src/stories/components/Drawer/Drawer.vue
@@ -1,20 +1,30 @@
 <script setup lang="ts">
-import { convert500ThemeToColor, convert300ThemeToColor } from '@helpers/colors';
-import type { TThemeColor } from '@interfaces/common';
 import { computed } from 'vue';
-import { iconsSet } from '@helpers/icons';
+import { iconsSet } from '@/common/constants/icons';
+import { convert500ThemeToColor, convert300ThemeToColor } from '@helpers/colors';
+import type { TIcons, TThemeColor } from '@interfaces/common';
 
 const props = withDefaults(
   defineProps<{
+    position: 'left' | 'right' | 'top' | 'bottom';
     width?: string | number;
     theme?: TThemeColor;
-    closeIcon?: string;
+    isModal?: boolean;
+    isDismissible?: boolean;
+    closeIcon?: TIcons;
+    isHeaderDivider?: boolean;
+    isFooterDivider?: boolean;
   }>(),
   {
     visible: false,
+    position: 'left',
     width: 400,
+    isModal: true,
+    isDismissible: true,
     theme: 'white',
-    closeIcon: 'CrossCircleIcon',
+    closeIcon: 'CrossIcon',
+    isHeaderDivider: false,
+    isFooterDivider: false,
   },
 );
 const emit = defineEmits(['onClose']);
@@ -27,28 +37,33 @@ const textColor = computed(() => {
   return 'white';
 });
 const drawerWidth = computed(() => {
-  if (+props.width < 100) return '100px';
+  if (+props.width < 200) return '200px';
   return `${props.width}px`;
 });
 </script>
-
 <template>
   <article>
     <section
+      v-if="isModal"
       :class="[
         'drawerBackground',
         {
           drawerBackgroundOpened: visible,
         },
       ]"
-      @click.prevent="visible = false"
+      @click.prevent="isDismissible ? (visible = false) : false"
     ></section>
     <section
       :style="`color: ${textColor}; background-color: ${themeColor}`"
       :class="[
         'drawer',
         {
+          drawerLeft: position === 'left',
+          drawerRight: position === 'right',
+          drawerTop: position === 'top',
+          drawerBottom: position === 'bottom',
           drawerOpened: visible,
+          drawerVertical: position === 'top' || position === 'bottom',
         },
       ]"
     >
@@ -66,11 +81,12 @@ const drawerWidth = computed(() => {
           <component :is="iconsSet[closeIcon]" :color="textColor" />
         </button>
       </header>
+      <div v-if="isHeaderDivider" class="divider divider-header"></div>
       <div class="main">
         <slot />
       </div>
       <div v-if="$slots.footer">
-        <div class="divider"></div>
+        <div v-if="isFooterDivider" class="divider"></div>
         <footer class="drawerFooter">
           <slot name="footer" />
         </footer>
@@ -98,47 +114,76 @@ const drawerWidth = computed(() => {
 .drawer {
   width: v-bind(drawerWidth);
   position: fixed;
-  top: 0;
-  left: 0;
   z-index: 31;
   height: 100vh;
   display: flex;
   flex-direction: column;
   justify-content: space-between;
   padding: 20px;
-  transform: translateX(-100%);
   transition: transform ease-out 0.2s;
-  border-right: 2px solid gray;
+  border-right: 2px solid #b1b1b1;
+}
+.drawerVertical {
+  width: 100vw !important;
+  height: v-bind(drawerWidth) !important;
 }
 .drawerOpened {
-  transform: translateX(0);
+  transform: translateX(0) !important;
+}
+.drawerLeft {
+  transform: translateX(-100%);
+  top: 0;
+  left: 0;
+}
+.drawerRight {
+  transform: translateX(100%);
+  top: 0;
+  right: 0;
+}
+.drawerTop {
+  transform: translateY(-100%);
+  top: 0;
+  left: 0;
+}
+.drawerBottom {
+  transform: translateY(100%);
+  bottom: 0;
+  left: 0;
 }
 .drawerHeader {
   font-weight: bold;
-  font-size: 2rem;
-  padding-right: 50px;
+  font-size: 32px;
+  width: calc(100% - 30px);
   margin-bottom: 10px;
-  min-height: 1rem;
+  height: 37px;
   overflow: auto;
 }
 .main {
   flex: 1 1 auto;
   overflow: auto;
-  padding: 10px;
+  margin: 10px;
 }
 .drawerFooter {
-  overflow: auto;
   padding: 10px 10px 0 10px;
+  overflow: auto;
 }
 .divider {
   height: 2px;
   background-color: v-bind(scrollColor);
 }
+.divider-header {
+  position: absolute;
+  left: 20px;
+  top: 65px;
+  width: calc(100% - 40px);
+}
 .buttonClose {
   position: absolute;
-  top: 20px;
+  top: 25px;
   right: 20px;
   width: 30px;
+  display: flex;
+  align-items: center;
 }
 ::-webkit-scrollbar {
   width: 8px;
-- 
GitLab