diff --git a/src/page-components/pattern-editor/PulseCard.module.css b/src/page-components/pattern-editor/PulseCard.module.css new file mode 100644 index 0000000..281bfff --- /dev/null +++ b/src/page-components/pattern-editor/PulseCard.module.css @@ -0,0 +1,25 @@ +@layer pages { + .pulse_card { + display: flex; + flex-direction: row; + align-items: center; + gap: calc(var(--spacing) * 2); + color: var(--color-on-surface); + background-color: var(--color-surface); + border-radius: calc(var(--border-radius) * 2); + padding: 0; + &.selected { + background-color: color-mix(in oklch, var(--color-on-surface) 18%, transparent); + } + .order { + padding: calc(var(--spacing) * 2) calc(var(--spacing) * 3); + background-color: var(--color-secondary-container); + color: var(--color-on-secondary-container); + border-top-left-radius: calc(var(--border-radius) * 2); + border-bottom-left-radius: calc(var(--border-radius) * 2); + } + .offset { + padding: calc(var(--spacing) * 2) calc(var(--spacing) * 3); + } + } +} diff --git a/src/page-components/pattern-editor/PulseCard.tsx b/src/page-components/pattern-editor/PulseCard.tsx index 0c9d85a..8d1a11c 100644 --- a/src/page-components/pattern-editor/PulseCard.tsx +++ b/src/page-components/pattern-editor/PulseCard.tsx @@ -1,12 +1,34 @@ -import { FC } from 'react'; +import cx from 'clsx'; +import { useAtom } from 'jotai'; +import { FC, useCallback } from 'react'; import { Pulse } from '../../context/pattern-model'; +import { SelectedPulseIdAtom } from '../../context/Patterns'; +import styles from './PulseCard.module.css'; type PulseCardProps = { pulse: Pulse; }; const PulseCard: FC = ({ pulse }) => { - return
; + const [selected, setSelected] = useAtom(SelectedPulseIdAtom); + + const handleSelect = useCallback(() => { + if (selected === pulse.id) { + setSelected(null); + } else { + setSelected(pulse.id); + } + }, [pulse, selected]); + + return ( +
+
{pulse.order.toString().padStart(3, '0')}
+
+
+ {pulse.offset} ms
+
+ ); }; export default PulseCard;