Commit cef215c4 authored by Дмитрий Малюгин's avatar Дмитрий Малюгин 🕓
Browse files

feat: ended Drawer

parent 37a72177
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -208,14 +208,33 @@ 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>
  <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
  >
+15 −16
Original line number Diff line number Diff line
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';
+8 −0
Original line number Diff line number Diff line
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,
};
+23 −27
Original line number Diff line number Diff line
<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>
      <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;