diff --git a/public/res/ic/outlined/check.svg b/public/res/ic/outlined/check.svg
new file mode 100644
index 00000000..72a18327
--- /dev/null
+++ b/public/res/ic/outlined/check.svg
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/src/app/molecules/power-level-selector/PowerLevelSelector.jsx b/src/app/molecules/power-level-selector/PowerLevelSelector.jsx
new file mode 100644
index 00000000..7d531bf4
--- /dev/null
+++ b/src/app/molecules/power-level-selector/PowerLevelSelector.jsx
@@ -0,0 +1,49 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import './PowerLevelSelector.scss';
+
+import IconButton from '../../atoms/button/IconButton';
+import { MenuHeader, MenuItem } from '../../atoms/context-menu/ContextMenu';
+
+import CheckIC from '../../../../public/res/ic/outlined/check.svg';
+
+function PowerLevelSelector({
+ value, max, onSelect,
+}) {
+ const handleSubmit = (e) => {
+ const powerLevel = e.target.elements['power-level'];
+ if (!powerLevel) return;
+ onSelect(Number(powerLevel));
+ };
+
+ return (
+
+ Power level selector
+
+ {max >= 0 && Presets}
+ {max >= 100 && }
+ {max >= 50 && }
+ {max >= 0 && }
+
+ );
+}
+
+PowerLevelSelector.propTypes = {
+ value: PropTypes.number.isRequired,
+ max: PropTypes.number.isRequired,
+ onSelect: PropTypes.func.isRequired,
+};
+
+export default PowerLevelSelector;
diff --git a/src/app/molecules/power-level-selector/PowerLevelSelector.scss b/src/app/molecules/power-level-selector/PowerLevelSelector.scss
new file mode 100644
index 00000000..14a151dd
--- /dev/null
+++ b/src/app/molecules/power-level-selector/PowerLevelSelector.scss
@@ -0,0 +1,20 @@
+@use '../../partials/flex';
+@use '../../partials/dir';
+
+.power-level-selector {
+ & .context-menu__item .text {
+ margin: 0 !important;
+ }
+
+ & form {
+ margin: var(--sp-normal);
+ display: flex;
+
+ & input {
+ @extend .cp-fx__item-one;
+ @include dir.side(margin, 0, var(--sp-tight));
+ width: 148px;
+ padding: 9px var(--sp-tight);
+ }
+ }
+}
\ No newline at end of file