diff --git a/src/stories/components/Knob/Knob.vue b/src/stories/components/Knob/Knob.vue
index 73dc2bdd7013e52ec79f144d671bae8605e632dc..7ed7a923776340615063a8e862ac2b112e7f6f62 100644
--- a/src/stories/components/Knob/Knob.vue
+++ b/src/stories/components/Knob/Knob.vue
@@ -1,15 +1,69 @@
 <script setup lang="ts">
 import type { IKnobProps } from '@interfaces/componentsProps';
+import { computed } from 'vue';
+import { convertThemeToColor } from '@helpers/common';
 
-const props = withDefaults(defineProps<IKnobProps>(), {});
+const props = withDefaults(defineProps<IKnobProps>(), {
+  min: 0,
+  max: 2,
+  negativeTheme: 'black',
+  showLabel: true,
+});
 const value = defineModel('value');
+
+const degreesTotal = computed(() => 360 - 90);
+const length = computed(() => props.max - props.min);
+const textColor = computed(() => convertThemeToColor(props.theme, props.darknessTheme));
+const background = computed(() => {
+  const color = convertThemeToColor(
+    props.negativeTheme ?? (props.theme === 'white' ? 'black' : props.theme === 'black' ? 'white' : props.theme),
+    (!props.negativeTheme && props.theme === 'black') || props.negativeTheme === 'white'
+      ? '500'
+      : props.darknessNegativeTheme,
+  );
+  return `radial-gradient(circle at center, transparent 50%, ${color} 50%)`;
+});
+const conicGradient = computed(() => {
+  return `conic-gradient(red ${(225 + (1 / length.value) * degreesTotal.value) % 360}deg, transparent 225deg)`;
+});
 </script>
 
 <template>
-  <section class="container"></section>
+  {{ (225 + (1 / length) * degreesTotal) % 360 }}
+  {{ length }}
+  {{ conicGradient }}
+  <section class="container">
+    <div class="circle" :style="`width: 100px; height: 100px`">
+      <div class="circle selected" :style="`width: 100px; height: 100px`"></div>
+
+      <span v-if="showLabel" class="count">{{ value }}</span>
+    </div>
+  </section>
 </template>
 
 <style scoped>
 .container {
+  position: relative;
+}
+.circle {
+  overflow: hidden;
+  border-radius: 50%;
+  background: v-bind(background);
+  clip-path: polygon(0 0, 0 100%, 50% 50%, 50% 50%, 100% 100%, 100% 0);
+}
+.selected {
+  position: absolute;
+  z-index: 100;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: v-bind(conicGradient);
+}
+.count {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
 }
 </style>