+
+ Your Presets {presets.length > 0 && `(${presets.length})`}
+
+
+ {!presets.length && (
+
You don't have any presets yet.
+ )}
+
+ {presets.map((preset, index) => (
+
+ changeName(index, e.target.value)}
+ />
+
+
+
+ ))}
+
+ );
+}
diff --git a/src/components/modals/presets/new/index.ts b/src/components/modals/presets/new/index.ts
new file mode 100644
index 0000000..2d200c6
--- /dev/null
+++ b/src/components/modals/presets/new/index.ts
@@ -0,0 +1 @@
+export { New } from './new';
diff --git a/src/components/modals/presets/new/new.module.css b/src/components/modals/presets/new/new.module.css
new file mode 100644
index 0000000..f73f279
--- /dev/null
+++ b/src/components/modals/presets/new/new.module.css
@@ -0,0 +1,61 @@
+.new {
+ margin-top: 16px;
+
+ & .title {
+ font-weight: 500;
+ color: var(--color-foreground-subtle);
+ }
+
+ & .form {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ height: 45px;
+ padding: 4px;
+ margin-top: 8px;
+ background-color: var(--color-neutral-50);
+ border: 1px solid var(--color-neutral-200);
+ border-radius: 8px;
+
+ &.disabled {
+ filter: blur(2px);
+ opacity: 0.4;
+ }
+
+ & input {
+ flex-grow: 1;
+ height: 100%;
+ padding: 0 12px;
+ color: var(--color-foreground);
+ background: transparent;
+ border: none;
+ outline: none;
+ }
+
+ & button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ padding: 0 12px;
+ font-size: var(--font-sm);
+ font-weight: 500;
+ color: var(--color-neutral-50);
+ cursor: pointer;
+ background-color: var(--color-neutral-950);
+ border: none;
+ border-radius: 4px;
+ outline: none;
+
+ &:disabled {
+ cursor: not-allowed;
+ }
+ }
+ }
+
+ & .noSelected {
+ margin-top: 8px;
+ font-size: var(--font-sm);
+ color: var(--color-foreground-subtle);
+ }
+}
diff --git a/src/components/modals/presets/new/new.tsx b/src/components/modals/presets/new/new.tsx
new file mode 100644
index 0000000..462a3a9
--- /dev/null
+++ b/src/components/modals/presets/new/new.tsx
@@ -0,0 +1,59 @@
+import { useState, type FormEvent } from 'react';
+
+import { cn } from '@/helpers/styles';
+import { useSoundStore, usePresetStore } from '@/store';
+
+import styles from './new.module.css';
+
+export function New() {
+ const [name, setName] = useState('');
+
+ const noSelected = useSoundStore(state => state.noSelected());
+ const sounds = useSoundStore(state => state.sounds);
+ const addPreset = usePresetStore(state => state.addPreset);
+
+ const handleSubmit = (e: FormEvent