1. 30 Nov, 2025 9 commits
  2. 29 Nov, 2025 1 commit
    • Johnny's avatar
      refactor: implement MemoView component with subcomponents and hooks · 1ef11f74
      Johnny authored
      - Added MemoView component to display a single memo card with full functionality including creator info, memo content, attachments, reactions, and comments.
      - Created MemoBody and MemoHeader subcomponents to separate concerns and improve maintainability.
      - Introduced custom hooks for managing memo actions, keyboard shortcuts, NSFW content visibility, and image preview.
      - Implemented reaction handling with new ReactionSelector and ReactionView components.
      - Added TypeScript types for better type safety and clarity.
      - Established constants for memo card styling and keyboard shortcuts.
      - Removed legacy ReactionSelector and ReactionView components from the previous structure.
      1ef11f74
  3. 28 Nov, 2025 1 commit
    • Johnny's avatar
      feat: add LocationDialog and related hooks for location management in MemoEditor · 50199fe9
      Johnny authored
      - Implemented LocationDialog component for selecting and entering location coordinates.
      - Created useLocation hook to manage location state and updates.
      - Added LocationState type for managing location data.
      - Introduced useLinkMemo hook for linking memos with search functionality.
      - Added VisibilitySelector component for selecting memo visibility.
      - Refactored MemoEditor to integrate new hooks and components for improved functionality.
      - Removed obsolete handlers and streamlined memo save logic with useMemoSave hook.
      - Enhanced focus mode functionality with dedicated components for overlay and exit button.
      50199fe9
  4. 27 Nov, 2025 1 commit
  5. 26 Nov, 2025 7 commits
  6. 25 Nov, 2025 7 commits
  7. 24 Nov, 2025 6 commits
  8. 23 Nov, 2025 2 commits
    • Johnny's avatar
      60d977c0
    • Johnny's avatar
      refactor(markdown): use Unicode categories for tag validation · b78d4c25
      Johnny authored
      Replace custom character whitelist with Unicode standards-based validation:
      
      - Use unicode.IsLetter/IsNumber/IsSymbol instead of hardcoded lists
      - Remove manual UTF-8 byte checking for CJK punctuation
      - Add proper rune-based length limiting (MAX_TAG_LENGTH = 100)
      - Improve international character support (CJK, Arabic, Cyrillic, etc.)
      - Add emoji support via unicode.IsSymbol
      
      Benefits:
      - Cleaner, more maintainable code (~50 lines removed)
      - Standards-based approach following Unicode categories
      - Better UTF-8 safety with utf8.DecodeRune
      - Consistent validation between Go backend and TypeScript frontend
      
      All existing tests pass with improved Unicode handling.
      b78d4c25
  9. 21 Nov, 2025 2 commits
  10. 19 Nov, 2025 4 commits
    • Steven's avatar
      fix(web): refresh sidebar tags when creating/updating memos · edfbd6b0
      Steven authored
      The sidebar tag list wasn't updating when users created new memos with tags
      or modified existing memo tags. This was because useFilteredMemoStats hook
      only refetched when filter/state/orderBy changed.
      
      Now the hook observes memoStore.state.stateId, which changes whenever memos
      are created, updated, or deleted. This triggers automatic refetch and the
      sidebar updates immediately with the latest tag counts.
      
      Fixes tag refresh issue in sidebar
      edfbd6b0
    • Steven's avatar
      fix(web): resolve Leaflet DOM cleanup error causing app crashes · cabd0d61
      Steven authored
      - Add MapCleanup component to properly remove Leaflet map instances on unmount
      - Fix LocationMarker initialization with useRef to prevent re-initialization
      - Remove problematic key prop in LocationDialog that caused unnecessary remounts
      - Fix goimports formatting in tag parser
      
      Fixes #5260
      cabd0d61
    • Steven's avatar
    • Steven's avatar
      fix(parser): support Unicode characters in tags · 64e9d82d
      Steven authored
      Fixes #5264
      
      Chinese, Japanese, Korean, and other Unicode characters are now
      properly recognized in hashtags, following the standard hashtag
      parsing conventions used by Twitter, Instagram, and GitHub.
      
      Changes:
      - Updated tag parser to allow Unicode letters and digits
      - Tags stop at whitespace and punctuation (both ASCII and CJK)
      - Allow dash, underscore, forward slash in tags
      - Added comprehensive tests for CJK characters and emoji
      
      Examples:
      - #测试 → recognized as tag '测试'
      - #日本語 → recognized as tag '日本語'
      - #한국어 → recognized as tag '한국어'
      - #测试。→ recognized as tag '测试' (stops at punctuation)
      - #work/测试/项目 → hierarchical tag with Unicode
      64e9d82d