From 1768ba1548a444c57dbfd5e351d77838238aed0d Mon Sep 17 00:00:00 2001 From: MAZE Date: Fri, 30 Aug 2024 15:30:22 +0330 Subject: [PATCH] feat: update the menu items --- .../menu/items/breathing-exercise.tsx | 9 +- src/components/menu/items/notepad.tsx | 9 +- src/components/menu/items/pomodoro.tsx | 18 +- src/components/menu/menu.tsx | 25 +-- .../toolbox/breathing/breathing.module.css | 1 - .../toolbox/breathing/breathing.tsx | 18 -- .../breathing/exercise/exercise.module.css | 47 ----- .../toolbox/breathing/exercise/exercise.tsx | 122 ------------ .../toolbox/breathing/exercise/index.ts | 1 - src/components/toolbox/breathing/index.ts | 1 - .../toolbox/generics/button/button.module.css | 34 ---- .../toolbox/generics/button/button.tsx | 33 ---- .../toolbox/generics/button/index.ts | 1 - src/components/toolbox/index.ts | 3 - .../toolbox/notepad/button/button.module.css | 45 ----- .../toolbox/notepad/button/button.tsx | 36 ---- .../toolbox/notepad/button/index.ts | 1 - src/components/toolbox/notepad/index.ts | 1 - .../toolbox/notepad/notepad.module.css | 44 ----- src/components/toolbox/notepad/notepad.tsx | 90 --------- src/components/toolbox/pomodoro/index.ts | 1 - .../toolbox/pomodoro/pomodoro.module.css | 36 ---- src/components/toolbox/pomodoro/pomodoro.tsx | 179 ------------------ .../toolbox/pomodoro/setting/index.ts | 1 - .../pomodoro/setting/setting.module.css | 76 -------- .../toolbox/pomodoro/setting/setting.tsx | 110 ----------- src/components/toolbox/pomodoro/tabs/index.ts | 1 - .../toolbox/pomodoro/tabs/tabs.module.css | 43 ----- src/components/toolbox/pomodoro/tabs/tabs.tsx | 25 --- 29 files changed, 9 insertions(+), 1002 deletions(-) delete mode 100644 src/components/toolbox/breathing/breathing.module.css delete mode 100644 src/components/toolbox/breathing/breathing.tsx delete mode 100644 src/components/toolbox/breathing/exercise/exercise.module.css delete mode 100644 src/components/toolbox/breathing/exercise/exercise.tsx delete mode 100644 src/components/toolbox/breathing/exercise/index.ts delete mode 100644 src/components/toolbox/breathing/index.ts delete mode 100644 src/components/toolbox/generics/button/button.module.css delete mode 100644 src/components/toolbox/generics/button/button.tsx delete mode 100644 src/components/toolbox/generics/button/index.ts delete mode 100644 src/components/toolbox/index.ts delete mode 100644 src/components/toolbox/notepad/button/button.module.css delete mode 100644 src/components/toolbox/notepad/button/button.tsx delete mode 100644 src/components/toolbox/notepad/button/index.ts delete mode 100644 src/components/toolbox/notepad/index.ts delete mode 100644 src/components/toolbox/notepad/notepad.module.css delete mode 100644 src/components/toolbox/notepad/notepad.tsx delete mode 100644 src/components/toolbox/pomodoro/index.ts delete mode 100644 src/components/toolbox/pomodoro/pomodoro.module.css delete mode 100644 src/components/toolbox/pomodoro/pomodoro.tsx delete mode 100644 src/components/toolbox/pomodoro/setting/index.ts delete mode 100644 src/components/toolbox/pomodoro/setting/setting.module.css delete mode 100644 src/components/toolbox/pomodoro/setting/setting.tsx delete mode 100644 src/components/toolbox/pomodoro/tabs/index.ts delete mode 100644 src/components/toolbox/pomodoro/tabs/tabs.module.css delete mode 100644 src/components/toolbox/pomodoro/tabs/tabs.tsx diff --git a/src/components/menu/items/breathing-exercise.tsx b/src/components/menu/items/breathing-exercise.tsx index 5695afb..ada0b45 100644 --- a/src/components/menu/items/breathing-exercise.tsx +++ b/src/components/menu/items/breathing-exercise.tsx @@ -2,17 +2,12 @@ import { IoMdFlower } from 'react-icons/io/index'; import { Item } from '../item'; -interface BreathingExerciseProps { - open: () => void; -} - -export function BreathingExercise({ open }: BreathingExerciseProps) { +export function BreathingExercise() { return ( } label="Breathing Exercise" - shortcut="Shift + B" - onClick={open} /> ); } diff --git a/src/components/menu/items/notepad.tsx b/src/components/menu/items/notepad.tsx index ef0ff39..c7a5b9f 100644 --- a/src/components/menu/items/notepad.tsx +++ b/src/components/menu/items/notepad.tsx @@ -4,20 +4,15 @@ import { Item } from '../item'; import { useNoteStore } from '@/stores/note'; -interface NotepadProps { - open: () => void; -} - -export function Notepad({ open }: NotepadProps) { +export function Notepad() { const note = useNoteStore(state => state.note); return ( } label="Notepad" - shortcut="Shift + N" - onClick={open} /> ); } diff --git a/src/components/menu/items/pomodoro.tsx b/src/components/menu/items/pomodoro.tsx index 43473b5..5939920 100644 --- a/src/components/menu/items/pomodoro.tsx +++ b/src/components/menu/items/pomodoro.tsx @@ -2,22 +2,8 @@ import { MdOutlineAvTimer } from 'react-icons/md/index'; import { Item } from '../item'; -import { usePomodoroStore } from '@/stores/pomodoro'; - -interface PomodoroProps { - open: () => void; -} - -export function Pomodoro({ open }: PomodoroProps) { - const running = usePomodoroStore(state => state.running); - +export function Pomodoro() { return ( - } - label="Pomodoro" - shortcut="Shift + P" - onClick={open} - /> + } label="Pomodoro" /> ); } diff --git a/src/components/menu/menu.tsx b/src/components/menu/menu.tsx index ff3eb12..5cf512c 100644 --- a/src/components/menu/menu.tsx +++ b/src/components/menu/menu.tsx @@ -22,7 +22,6 @@ import { ShareLinkModal } from '@/components/modals/share-link'; import { PresetsModal } from '@/components/modals/presets'; import { ShortcutsModal } from '@/components/modals/shortcuts'; import { SleepTimerModal } from '@/components/modals/sleep-timer'; -import { Notepad, Pomodoro, BreathingExercise } from '@/components/toolbox'; import { fade, mix, slideY } from '@/lib/motion'; import { useSoundStore } from '@/stores/sound'; @@ -37,9 +36,6 @@ export function Menu() { const initial = useMemo( () => ({ - breathingExercise: false, - notepad: false, - pomodoro: false, presets: false, shareLink: false, shortcuts: false, @@ -67,9 +63,6 @@ export function Menu() { ); useHotkeys('shift+m', () => setIsOpen(prev => !prev)); - useHotkeys('shift+n', () => open('notepad')); - useHotkeys('shift+p', () => open('pomodoro')); - useHotkeys('shift+b', () => open('breathingExercise')); useHotkeys('shift+alt+p', () => open('presets')); useHotkeys('shift+h', () => open('shortcuts')); useHotkeys('shift+s', () => open('shareLink'), { enabled: !noSelected }); @@ -112,11 +105,9 @@ export function Menu() { open('sleepTimer')} /> - open('breathingExercise')} - /> - open('pomodoro')} /> - open('notepad')} /> + + + @@ -142,16 +133,6 @@ export function Menu() { onClose={() => close('shortcuts')} /> close('presets')} /> - close('notepad')} /> - open('pomodoro')} - show={modals.pomodoro} - onClose={() => close('pomodoro')} - /> - close('breathingExercise')} - /> close('sleepTimer')} diff --git a/src/components/toolbox/breathing/breathing.module.css b/src/components/toolbox/breathing/breathing.module.css deleted file mode 100644 index fdbd99d..0000000 --- a/src/components/toolbox/breathing/breathing.module.css +++ /dev/null @@ -1 +0,0 @@ -/* WIP */ diff --git a/src/components/toolbox/breathing/breathing.tsx b/src/components/toolbox/breathing/breathing.tsx deleted file mode 100644 index c807a22..0000000 --- a/src/components/toolbox/breathing/breathing.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Modal } from '@/components/modal'; -import { Exercise } from './exercise'; - -import styles from './breathing.module.css'; - -interface TimerProps { - onClose: () => void; - show: boolean; -} - -export function BreathingExercise({ onClose, show }: TimerProps) { - return ( - -

Breathing Exercise

- -
- ); -} diff --git a/src/components/toolbox/breathing/exercise/exercise.module.css b/src/components/toolbox/breathing/exercise/exercise.module.css deleted file mode 100644 index 05b9baa..0000000 --- a/src/components/toolbox/breathing/exercise/exercise.module.css +++ /dev/null @@ -1,47 +0,0 @@ -.exercise { - position: relative; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - padding: 75px 0; - margin-top: 12px; - background-color: var(--color-neutral-50); - border: 1px solid var(--color-neutral-200); - border-radius: 8px; - - & .phase { - font-family: var(--font-display); - font-size: var(--font-lg); - font-weight: 600; - } - - & .circle { - position: absolute; - top: 50%; - left: 50%; - z-index: -1; - height: 55%; - aspect-ratio: 1 / 1; - background-image: radial-gradient( - var(--color-neutral-50), - var(--color-neutral-100) - ); - border: 1px solid var(--color-neutral-200); - border-radius: 50%; - transform: translate(-50%, -50%); - } -} - -.selectBox { - width: 100%; - min-width: 0; - height: 45px; - padding: 0 12px; - margin-top: 8px; - font-size: var(--font-sm); - color: var(--color-foreground); - background-color: var(--color-neutral-100); - border: 1px solid var(--color-neutral-200); - border-radius: 8px; -} diff --git a/src/components/toolbox/breathing/exercise/exercise.tsx b/src/components/toolbox/breathing/exercise/exercise.tsx deleted file mode 100644 index b3087ea..0000000 --- a/src/components/toolbox/breathing/exercise/exercise.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { useState, useEffect } from 'react'; -import { motion } from 'framer-motion'; - -import styles from './exercise.module.css'; - -type Exercise = 'Box Breathing' | 'Resonant Breathing' | '4-7-8 Breathing'; -type Phase = 'inhale' | 'exhale' | 'holdInhale' | 'holdExhale'; - -export function Exercise() { - const [selectedExercise, setSelectedExercise] = - useState('4-7-8 Breathing'); - - const getAnimationPhases = ( - exercise: Exercise, - ): Array<'inhale' | 'holdInhale' | 'exhale' | 'holdExhale'> => { - switch (exercise) { - case 'Box Breathing': - return ['inhale', 'holdInhale', 'exhale', 'holdExhale']; - case 'Resonant Breathing': - return ['inhale', 'exhale']; - case '4-7-8 Breathing': - return ['inhale', 'holdInhale', 'exhale']; - default: - return ['inhale', 'holdInhale', 'exhale', 'holdExhale']; - } - }; - - const getAnimationDurations = (exercise: Exercise) => { - switch (exercise) { - case 'Box Breathing': - return { exhale: 4, holdExhale: 4, holdInhale: 4, inhale: 4 }; - case 'Resonant Breathing': - return { exhale: 5, inhale: 5 }; - case '4-7-8 Breathing': - return { exhale: 8, holdInhale: 7, inhale: 4 }; - default: - return { exhale: 4, holdExhale: 4, holdInhale: 4, inhale: 4 }; - } - }; - - const getLabel = (phase: Phase) => { - switch (phase) { - case 'inhale': - return 'Inhale'; - case 'exhale': - return 'Exhale'; - default: - return 'Hold'; - } - }; - - const [phase, setPhase] = useState('inhale'); - const [durations, setDurations] = useState( - getAnimationDurations(selectedExercise), - ); - - const animationVariants = { - exhale: { - transform: 'translate(-50%, -50%) scale(1)', - transition: { duration: durations.exhale }, - }, - holdExhale: { - transform: 'translate(-50%, -50%) scale(1)', - transition: { duration: durations.holdExhale || 4 }, - }, - holdInhale: { - transform: 'translate(-50%, -50%) scale(1.5)', - transition: { duration: durations.holdInhale || 4 }, - }, - inhale: { - transform: 'translate(-50%, -50%) scale(1.5)', - transition: { duration: durations.inhale }, - }, - }; - - useEffect(() => { - setDurations(getAnimationDurations(selectedExercise)); - }, [selectedExercise]); - - useEffect(() => { - const phases = getAnimationPhases(selectedExercise); - - let phaseIndex = 0; - - setPhase(phases[phaseIndex]); - - const interval = setInterval( - () => { - phaseIndex = (phaseIndex + 1) % phases.length; - - setPhase(phases[phaseIndex]); - }, - (durations[phases[phaseIndex]] || 4) * 1000, - ); - - return () => clearInterval(interval); - }, [selectedExercise, durations]); - - return ( - <> -
- -

{getLabel(phase)}

-
- - - - ); -} diff --git a/src/components/toolbox/breathing/exercise/index.ts b/src/components/toolbox/breathing/exercise/index.ts deleted file mode 100644 index 881062d..0000000 --- a/src/components/toolbox/breathing/exercise/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Exercise } from './exercise'; diff --git a/src/components/toolbox/breathing/index.ts b/src/components/toolbox/breathing/index.ts deleted file mode 100644 index 323b544..0000000 --- a/src/components/toolbox/breathing/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { BreathingExercise } from './breathing'; diff --git a/src/components/toolbox/generics/button/button.module.css b/src/components/toolbox/generics/button/button.module.css deleted file mode 100644 index a96e112..0000000 --- a/src/components/toolbox/generics/button/button.module.css +++ /dev/null @@ -1,34 +0,0 @@ -.button { - display: flex; - align-items: center; - justify-content: center; - width: 30px; - height: 30px; - font-size: var(--font-sm); - color: var(--color-foreground); - cursor: pointer; - background-color: var(--color-neutral-100); - border: 1px solid var(--color-neutral-200); - border-radius: 4px; - outline: none; - transition: 0.2s; - - &:focus-visible { - outline: 2px solid var(--color-neutral-400); - outline-offset: 2px; - } - - &:hover, - &:focus-visible { - background-color: var(--color-neutral-200); - } - - &.smallIcon { - font-size: var(--font-xsm); - } - - &:disabled { - cursor: not-allowed; - opacity: 0.4; - } -} diff --git a/src/components/toolbox/generics/button/button.tsx b/src/components/toolbox/generics/button/button.tsx deleted file mode 100644 index 5828ad6..0000000 --- a/src/components/toolbox/generics/button/button.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Tooltip } from '@/components/tooltip'; - -import { cn } from '@/helpers/styles'; - -import styles from './button.module.css'; - -interface ButtonProps { - disabled?: boolean; - icon: React.ReactElement; - onClick: () => void; - smallIcon?: boolean; - tooltip: string; -} - -export function Button({ - disabled = false, - icon, - onClick, - smallIcon, - tooltip, -}: ButtonProps) { - return ( - - - - ); -} diff --git a/src/components/toolbox/generics/button/index.ts b/src/components/toolbox/generics/button/index.ts deleted file mode 100644 index a039b75..0000000 --- a/src/components/toolbox/generics/button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Button } from './button'; diff --git a/src/components/toolbox/index.ts b/src/components/toolbox/index.ts deleted file mode 100644 index 5eb0811..0000000 --- a/src/components/toolbox/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { Notepad } from './notepad'; -export { Pomodoro } from './pomodoro'; -export { BreathingExercise } from './breathing'; diff --git a/src/components/toolbox/notepad/button/button.module.css b/src/components/toolbox/notepad/button/button.module.css deleted file mode 100644 index 4a4e756..0000000 --- a/src/components/toolbox/notepad/button/button.module.css +++ /dev/null @@ -1,45 +0,0 @@ -.button { - display: flex; - align-items: center; - justify-content: center; - width: 30px; - height: 30px; - font-size: var(--font-sm); - color: var(--color-foreground); - cursor: pointer; - background-color: var(--color-neutral-100); - border: 1px solid var(--color-neutral-200); - border-radius: 4px; - outline: none; - transition: 0.2s; - transition-property: border-color, color, background-color; - - &:focus-visible { - outline: 2px solid var(--color-neutral-400); - outline-offset: 2px; - } - - &.critical { - color: #f43f5e; - border-color: #f43f5e; - - &:hover { - background-color: rgb(244 63 94 / 10%); - } - } - - &.recommended { - font-size: var(--font-xsm); - color: #22c55e; - border-color: #22c55e; - - &:hover { - background-color: rgb(34 197 94 / 10%); - } - } - - &:hover, - &:focus-visible { - background-color: var(--color-neutral-200); - } -} diff --git a/src/components/toolbox/notepad/button/button.tsx b/src/components/toolbox/notepad/button/button.tsx deleted file mode 100644 index d3da910..0000000 --- a/src/components/toolbox/notepad/button/button.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Tooltip } from '@/components/tooltip'; - -import { cn } from '@/helpers/styles'; - -import styles from './button.module.css'; - -interface ButtonProps { - critical?: boolean; - icon: React.ReactElement; - onClick: () => void; - recommended?: boolean; - tooltip: string; -} - -export function Button({ - critical, - icon, - onClick, - recommended, - tooltip, -}: ButtonProps) { - return ( - - - - ); -} diff --git a/src/components/toolbox/notepad/button/index.ts b/src/components/toolbox/notepad/button/index.ts deleted file mode 100644 index a039b75..0000000 --- a/src/components/toolbox/notepad/button/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Button } from './button'; diff --git a/src/components/toolbox/notepad/index.ts b/src/components/toolbox/notepad/index.ts deleted file mode 100644 index 8a3fad5..0000000 --- a/src/components/toolbox/notepad/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { Notepad } from './notepad'; diff --git a/src/components/toolbox/notepad/notepad.module.css b/src/components/toolbox/notepad/notepad.module.css deleted file mode 100644 index 2dadc40..0000000 --- a/src/components/toolbox/notepad/notepad.module.css +++ /dev/null @@ -1,44 +0,0 @@ -.header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 8px; - - & .label { - font-size: var(--font-sm); - font-weight: 500; - color: var(--color-foreground-subtle); - } - - & .buttons { - display: flex; - column-gap: 4px; - align-items: center; - } -} - -.textarea { - width: 100%; - height: 350px; - padding: 12px; - line-height: 1.6; - color: var(--color-foreground-subtle); - resize: none; - background-color: var(--color-neutral-50); - border: 1px solid var(--color-neutral-200); - border-radius: 4px; - outline: none; - scroll-padding-bottom: 12px; - - &:focus-visible { - outline: 2px solid var(--color-neutral-400); - outline-offset: 2px; - } -} - -.counter { - margin-top: 8px; - font-size: var(--font-xsm); - color: var(--color-foreground-subtle); - text-align: center; -} diff --git a/src/components/toolbox/notepad/notepad.tsx b/src/components/toolbox/notepad/notepad.tsx deleted file mode 100644 index 921556f..0000000 --- a/src/components/toolbox/notepad/notepad.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { useRef, useEffect } from 'react'; -import { BiTrash } from 'react-icons/bi/index'; -import { LuCopy, LuDownload } from 'react-icons/lu/index'; -import { FaCheck } from 'react-icons/fa6/index'; -import { FaUndo } from 'react-icons/fa/index'; - -import { Modal } from '@/components/modal'; -import { Button } from './button'; - -import { useNoteStore } from '@/stores/note'; -import { useCopy } from '@/hooks/use-copy'; -import { download } from '@/helpers/download'; - -import styles from './notepad.module.css'; - -interface NotepadProps { - onClose: () => void; - show: boolean; -} - -export function Notepad({ onClose, show }: NotepadProps) { - const textareaRef = useRef(null); - - const note = useNoteStore(state => state.note); - const history = useNoteStore(state => state.history); - const write = useNoteStore(state => state.write); - const words = useNoteStore(state => state.words()); - const characters = useNoteStore(state => state.characters()); - const clear = useNoteStore(state => state.clear); - const restore = useNoteStore(state => state.restore); - - const { copy, copying } = useCopy(); - - useEffect(() => { - if (show && textareaRef.current) { - setTimeout(() => { - textareaRef.current?.focus(); - }, 10); - } - }, [show]); - - const handleKeyDown = (e: React.KeyboardEvent) => { - e.stopPropagation(); - - if (e.key === 'Escape') onClose(); - }; - - return ( - -
-

Your Note

-
-
-
- -