From cef215c4b6f05d6b7e4bc8171361d6750b8d327c 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: Tue, 10 Dec 2024 10:54:30 +0500
Subject: [PATCH] feat: ended Drawer

---
 src/App.vue                              | 31 ++++++++++++---
 src/common/helpers/colors.ts             | 31 +++++++--------
 src/common/helpers/icons.ts              |  8 ++++
 src/stories/components/Drawer/Drawer.vue | 50 +++++++++++-------------
 4 files changed, 71 insertions(+), 49 deletions(-)
 create mode 100644 src/common/helpers/icons.ts

diff --git a/src/App.vue b/src/App.vue
index 60d739a..c946895 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -208,15 +208,34 @@ const gentleIcons = [
   TrashIcon,
   UserIcon,
 ];
-const visibleDrawer = ref(false);
+const visibleDrawer = ref(true);
 </script>
 
 <template>
-  <Drawer v-model:visible="visibleDrawer"
-    ><p>pizdwertyukilokl,kmjhgfwewesrdtyukilo,kmjngeartyukikdhgfgjhklj.,kga</p>
-    <template #footer
-      ><div style="height: 1px; background-color: black"></div>
-      pizdwertyukilokl,kmjhgfwewesrdtyukilo,kmjngeartyukikdhgfgjhklj.,kga</template
+  <Drawer v-model:visible="visibleDrawer" theme="sky" closeIcon="CropIcon">
+    <template #header>Это - Drawer</template>
+    <p>
+      pizdwertyuki lokl,kmjhgfwewesrdty ukilo,kmjngeartyukikdhgfgjhklj.,kga Lorem ipsum dolor sit
+      amet, consectetur adipisicing elit. Amet deleniti, esse in ipsam quis sapiente tempore
+      voluptas. Aperiam dignissimos enim, fuga fugit, modi, nam necessitatibus numquam obcaecati
+      omnis recusandae voluptatibus! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque
+      blanditiis consectetur cum delectus ducimus eius est hic incidunt iusto molestiae odio optio
+      reiciendis reprehenderit saepe tempora vel, veniam veritatis voluptates. Lorem ipsum dolor sit
+      amet, consectetur adipisicing elit. Ducimus expedita laboriosam nesciunt voluptatum! Ab animi
+      illum impedit iusto libero magni maxime molestias nisi nobis possimus provident quia repellat,
+      rerum suscipit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem modi ratione
+      reiciendis. Cupiditate deserunt eaque eum labore qui rem? Consequatur corporis, dolorem
+      doloremque eveniet facilis obcaecati quasi repellat vel velit. pizdwertyuki
+      lokl,kmjhgfwewesrdty ukilo,kmjngeartyukikdhgfgjhklj.,kga Lorem ipsum dolor sit amet,
+      consectetur adipisicing elit. Amet deleniti, esse in ipsam quis sapiente tempore voluptas.
+      Aperiam dignissimos enim, fuga fugit, modi, nam necessitatibus numquam obcaecati omnis
+      recusandae voluptatibus! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Atque
+      blanditiis consectetur cum delectus ducimus eius est hic incidunt iusto molestiae odio optio
+      reiciendis reprehenderit saepe tempora vel, veniam veritatis voluptates. Lorem ipsum dolor sit
+      amet, consectetur adipisicing elit.
+    </p>
+    <template #footer>
+      pizdwertyukilokl,kmjhgfw ewesrdtyukilo,kmjng eartyukikdhgfgjhklj.,kga</template
     ></Drawer
   >
   <main class="main">
diff --git a/src/common/helpers/colors.ts b/src/common/helpers/colors.ts
index a9bb35d..d0590e8 100644
--- a/src/common/helpers/colors.ts
+++ b/src/common/helpers/colors.ts
@@ -1,39 +1,39 @@
-export const convert200ThemeToColor = (theme: string | undefined) => {
+export const convert300ThemeToColor = (theme: string | undefined) => {
   switch (theme) {
     case 'white':
-      return '#ffffff';
+      return '#cbd5e1';
     case 'slate':
-      return '#64748b';
+      return '#cbd5e1';
     case 'blue':
-      return '#3b82f6';
+      return '#93c5fd';
     case 'sky':
       return '#7dd3fc';
     case 'teal':
-      return '#14b8a6';
+      return '#5eead4';
     case 'lime':
-      return '#84cc16';
+      return '#bef264';
     case 'green':
-      return '#22c55e';
+      return '#86efac';
     case 'yellow':
-      return '#eab308';
+      return '#fde047';
     case 'amber':
-      return '#f59e0b';
+      return '#fcd34d';
     case 'orange':
-      return '#f97316';
+      return '#fdba74';
     case 'pink':
       return '#ec4899';
     case 'fuchsia':
-      return '#d946ef';
+      return '#f0abfc';
     case 'purple':
-      return '#a855f7';
+      return '#d8b4fe';
     case 'indigo':
-      return '#6366f1';
+      return '#a5b4fc';
     case 'rose':
-      return '#f43f5e';
+      return '#fda4af';
     case 'red':
       return '#fca5a5';
     case 'black':
-      return '#000000';
+      return '#334155';
   }
 };
 
@@ -77,7 +77,6 @@ export const convert500ThemeToColor = (theme: string | undefined) => {
 };
 
 export const convert800ThemeToColor = (theme: string | undefined) => {
-  if (!theme) return '#9294a1';
   switch (theme) {
     case 'white':
       return '#ffffff';
diff --git a/src/common/helpers/icons.ts b/src/common/helpers/icons.ts
new file mode 100644
index 0000000..7fbd44b
--- /dev/null
+++ b/src/common/helpers/icons.ts
@@ -0,0 +1,8 @@
+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/stories/components/Drawer/Drawer.vue b/src/stories/components/Drawer/Drawer.vue
index 1a8efd3..ddd4d21 100644
--- a/src/stories/components/Drawer/Drawer.vue
+++ b/src/stories/components/Drawer/Drawer.vue
@@ -1,24 +1,27 @@
 <script setup lang="ts">
-import { convert500ThemeToColor, convert200ThemeToColor } from '@helpers/colors';
+import { convert500ThemeToColor, convert300ThemeToColor } from '@helpers/colors';
 import type { TThemeColor } from '@interfaces/common';
 import { computed } from 'vue';
+import { iconsSet } from '@helpers/icons';
 
 const props = withDefaults(
   defineProps<{
     width?: string | number;
     theme?: TThemeColor;
+    closeIcon?: string;
   }>(),
   {
     visible: false,
     width: 400,
     theme: 'white',
+    closeIcon: 'CrossCircleIcon',
   },
 );
 const emit = defineEmits(['onClose']);
-const visible = defineModel('visible');
+const visible = defineModel<boolean>('visible');
 
 const themeColor = computed(() => convert500ThemeToColor(props.theme));
-const scrollColor = computed(() => convert200ThemeToColor(props.theme));
+const scrollColor = computed(() => convert300ThemeToColor(props.theme));
 const textColor = computed(() => {
   if (!props.theme || props.theme === 'white') return 'black';
   return 'white';
@@ -60,28 +63,18 @@ const drawerWidth = computed(() => {
             }
           "
         >
-          <svg
-            width="40px"
-            height="40px"
-            viewBox="0 0 24 24"
-            fill="none"
-            xmlns="http://www.w3.org/2000/svg"
-          >
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              d="M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM8.96963 8.96965C9.26252 8.67676 9.73739 8.67676 10.0303 8.96965L12 10.9393L13.9696 8.96967C14.2625 8.67678 14.7374 8.67678 15.0303 8.96967C15.3232 9.26256 15.3232 9.73744 15.0303 10.0303L13.0606 12L15.0303 13.9696C15.3232 14.2625 15.3232 14.7374 15.0303 15.0303C14.7374 15.3232 14.2625 15.3232 13.9696 15.0303L12 13.0607L10.0303 15.0303C9.73742 15.3232 9.26254 15.3232 8.96965 15.0303C8.67676 14.7374 8.67676 14.2625 8.96965 13.9697L10.9393 12L8.96963 10.0303C8.67673 9.73742 8.67673 9.26254 8.96963 8.96965Z"
-              :fill="textColor ?? '#1C274C'"
-            />
-          </svg>
+          <component :is="iconsSet[closeIcon]" :color="textColor" />
         </button>
       </header>
       <div class="main">
         <slot />
       </div>
-      <footer class="drawerFooter">
-        <slot name="footer" />
-      </footer>
+      <div v-if="$slots.footer">
+        <div class="divider"></div>
+        <footer class="drawerFooter">
+          <slot name="footer" />
+        </footer>
+      </div>
     </section>
   </article>
 </template>
@@ -122,18 +115,24 @@ const drawerWidth = computed(() => {
 }
 .drawerHeader {
   font-weight: bold;
-  font-size: 1.5rem;
+  font-size: 2rem;
   padding-right: 50px;
-  margin-bottom: 20px;
+  margin-bottom: 10px;
   min-height: 1rem;
   overflow: auto;
 }
 .main {
   flex: 1 1 auto;
   overflow: auto;
+  padding: 10px;
 }
 .drawerFooter {
   overflow: auto;
+  padding: 10px 10px 0 10px;
+}
+.divider {
+  height: 2px;
+  background-color: v-bind(scrollColor);
 }
 .buttonClose {
   position: absolute;
@@ -142,11 +141,8 @@ const drawerWidth = computed(() => {
   width: 30px;
 }
 ::-webkit-scrollbar {
-  width: 10px;
-  height: 10px;
-}
-::-webkit-scrollbar-track {
-  background: v-bind(textColor);
+  width: 8px;
+  height: 8px;
 }
 ::-webkit-scrollbar-thumb {
   border-radius: 5px;
-- 
GitLab