style: format modified files with prettier
Commit notes
Co-authored-by: armin.naimi <[email redacted]>
- Files
- 20
- Added
- +702
- Removed
- −660
A complete build timeline of Grainstash taking shape—from early sequencer experiments to the product it is today.
Showing 351–400 of 1,543
Page 8 of 31
Co-authored-by: armin.naimi <[email redacted]>
- Replace confirm() with AlertDialog in dashboard for Mollie disconnect - Fix transition-all with specific properties across 23 occurrences - Replace z-60 with z-modal-backdrop semantic utility in FullscreenLoader - Fix duration-300+ to duration-200 for interaction feedback - Add text-balance to headings for better typography - Add text-pretty to body paragraphs - Replace h-* w-* with size-* for square elements - Add aria-labels to icon-only buttons for accessibility Files modified: - 29 frontend components and pages Follows UI Skills guidelines from .cursor/skills/ui-skills/SKILL.md Co-authored-by: armin.naimi <[email redacted]>
- Remove collapsible sidebar from library page - Create CompactWorkspaceNav component with horizontal dropdowns - Integrate compact navigation above the packs section - Maintain all workspace/project switching functionality - Keep storage usage display in the packs panel - Better information architecture with context at top of left column Co-authored-by: armin.naimi <[email redacted]>
Co-authored-by: armin.naimi <[email redacted]>
Remove the md:opacity-0 md:group-hover:opacity-100 classes that were hiding the similarity button on desktop until row hover. The icon is now always visible with a neutral color, changing to white on hover. Co-authored-by: armin.naimi <[email redacted]>
LibrarySampleGrid name column fading
Replace custom mask-based fade effect (.sample-name-fade) with Tailwind's truncate utility. The mask was applying a gradient fade unconditionally, even on short names that don't overflow. The truncate class only shows ellipsis when text actually overflows, which is the expected behavior. Co-authored-by: armin.naimi <[email redacted]>
LibrarySampleGrid display issues
Co-authored-by: armin.naimi <[email redacted]>
- Reduce name fade distance from 24px to 10px to prevent early truncation - Add missing Duration column between Name and BPM columns - Remove inconsistent px-2 padding from header cells to fix column alignment Co-authored-by: armin.naimi <[email redacted]>
Icon button consistency
Updated icon buttons across the app for consistent styling: - TransportControls: play/stop and reset buttons - SequencerTrack: delay, reverb, bitcrusher FX buttons - Header: library, sequencer, and notifications buttons - GainMeter: volume cycle button - GrooveControls: groove cycle button - KeyboardShortcuts: keyboard shortcuts trigger button - PackOrganizer: select all and clear selection buttons - LibrarySearchFilter: sort order toggle button - LibrarySampleGrid: edit sample button - SharePopover: share and copy link buttons - share/[token]/+page: download button - Toaster: close notification button Co-authored-by: armin.naimi <[email redacted]>
Duration column removal
The duration is already displayed in the play button, so the separate duration column was redundant. This change: - Removes the duration column from the columns definition - Removes the duration cell from data rows - Removes duration from the sortable columns map Co-authored-by: armin.naimi <[email redacted]>
- Replace truncation with fade-out mask effect for sample names that overflow - Display sample tags as badges below the name (shows up to 4 tags with overflow indicator) - Remove duration from mobile view badges entirely - Combine duration with play button - now shows duration next to play icon as a clickable button - Increased play button column width to accommodate duration text Co-authored-by: armin.naimi <[email redacted]>
- Move similarity icon to second-to-last column (before share) - Make similarity icon always visible on mobile (not hidden until hover) - Reduce play column width from 40px to 32px for more name space - Reduce drag column width from 32px to 28px - Hide duplicate indicator on mobile to save space - Replace flex-wrap with overflow-hidden on mobile badges to prevent line breaks - Remove 'BPM' suffix from mobile bpm badge for compactness - Remove date badge from mobile view for cleaner layout - Add truncation to category badge on mobile - Reduce play button size from 28px (h-7 w-7) to 24px (size-6) Co-authored-by: armin.naimi <[email redacted]>
Changed data rows from items-start to items-center so content is vertically centered within each row, matching the header row. Co-authored-by: armin.naimi <[email redacted]>
Changed header row gap from gap-1 to gap-2 to match the data rows, ensuring columns are properly aligned between header and content. Co-authored-by: armin.naimi <[email redacted]>
Keep the gpt-5-nano model name as requested - it's a valid model. The core fix remains: interpretEmbedding now uses proper nullish checks and direct audio features instead of L2-normalized embedding values. Co-authored-by: armin.naimi <[email redacted]>
Root causes fixed: 1. Invalid OpenAI model name 'gpt-5-nano' changed to 'gpt-4o-mini' - The invalid model caused API calls to fail, falling back to rule-based tagging 2. Fixed interpretEmbedding function in ai-tagging.ts: - Changed truthiness check for spectralCentroid to nullish check (0 is valid) - Fixed attack sharpness calculation to use features.attackTime directly instead of L2-normalized embedding values - Fixed harmonic content to derive from spectral bandwidth/centroid ratio 3. Added attackTime and decayTime fields to AudioFeatures interface - These temporal envelope values are now stored as direct features - Previously only available in L2-normalized embedding vector The rule-based tagging now correctly uses the actual audio features instead of falling back to default values, producing varied tags based on each sample's unique characteristics. Co-authored-by: armin.naimi <[email redacted]>
LibrarySampleGrid mobile display
- Hide waveform column on mobile for cleaner layout - Show sample metadata as badges underneath the name on mobile (duration, BPM, key, category, date) - Keep share and similarity columns visible on mobile - Keep edit column hidden on mobile - Adjust row alignment to items-start on mobile for badge layout Co-authored-by: armin.naimi <[email redacted]>
Drawer animation consistency
Co-authored-by: armin.naimi <[email redacted]>
Upload file selection only
On mobile (especially iOS), using audio/* in the accept attribute causes the browser to show Photo Library and Camera options. By using only specific file extensions (.wav, .mp3, .flac, etc.), the file input will only show the Files/Browse option. - Updated LibrarySearchFilter.svelte accept attribute - Updated upload page file inputs Co-authored-by: armin.naimi <[email redacted]>
- Removed scroll-based hide/show behavior from mobile navigation - Removed useScrollVisibility hook usage from Header component - Mobile nav now stays fixed at bottom regardless of scroll direction Co-authored-by: armin.naimi <[email redacted]>
- Remove text labels ('Library', 'Sequencer', 'Account', 'Sign in') from mobile bottom nav - Update buttons to be consistent 44px circular touch targets (size-11) - Add proper aria-labels for accessibility - Simplify button styling with centered icons Co-authored-by: armin.naimi <[email redacted]>
The Drawer component wasn't animating up on open because the critical CSS styles from vaul-svelte's :global() declarations weren't being properly applied with Svelte 5 and Tailwind CSS v4. Added the complete set of drawer animation styles to app.css: - Initial off-screen transform positions for all drawer directions - Visible state transforms that animate the drawer into view - Overlay fade-in animation from opacity 0 to 1 - Pseudo-element background extensions for seamless visuals - Drag state handling to disable transitions during interaction - Snap points overlay handling - User selection prevention on hover devices - Reduced motion support for accessibility Co-authored-by: armin.naimi <[email redacted]>
The search expand animation was not working because the CSS transition was set on 'width' property, but the actual sizing used flex-based layout (flex-1 with min/max constraints). CSS cannot interpolate between a fixed width value and a flex-based layout. Fixed by: - Changed transition-search utility to transition 'max-width' instead of 'width' - Updated LibrarySearchFilter to use explicit max-width values in both states: - Collapsed: max-w-9 (36px) - Expanded: max-w-48 (192px) / max-w-64 (256px) on larger screens This allows CSS to smoothly animate the max-width property between the collapsed and expanded states. Co-authored-by: armin.naimi <[email redacted]>
- Add CSS transitions for [data-vaul-drawer] elements with 0.5s duration using vaul's cubic-bezier easing curve (0.32, 0.72, 0, 1) - Add CSS transitions for [data-vaul-overlay] elements for smooth fade - Add will-change: transform hint for GPU-accelerated animations - Disable transitions during dragging with .vaul-dragging class - Honor prefers-reduced-motion for accessibility by disabling drawer animations when reduced motion is preferred Co-authored-by: armin.naimi <[email redacted]>
- Move keyframes and animation utilities to app.css - Add @utility directives: animate-search-expand, animate-search-content, transition-search - Replace component <style> block with Tailwind utility classes - Add search animation classes to reduced motion media query - Follows project's Tailwind v4 patterns with @utility directive Co-authored-by: armin.naimi <[email redacted]>
- Add smooth width transition with ease-out-cubic easing (220ms) - Add subtle scale animation when expanding (0.98 to 1) - Add content fade-in with slight translateX motion for polish - Use will-change for GPU acceleration on width and transform - Add proper prefers-reduced-motion support for accessibility - Follow animation guidelines with fast, purposeful motion Co-authored-by: armin.naimi <[email redacted]>
Tailwind CSS v4 doesn't support theme() in component styles the same way. Use var(--color-neutral-*) CSS custom properties instead. Co-authored-by: armin.naimi <[email redacted]>
- Replace accordion-style filter sections with native <select> elements - Add custom .filter-select styling for dark theme consistency - Include proper labels for accessibility - Simplify handlers to work with native select change events - Maintain all existing filter functionality (tags, mood, BPM, key, sort) - Keep sort direction toggle button alongside sort select Co-authored-by: armin.naimi <[email redacted]>