- Add [Explore/Quote] mode toggle to MainNavigation.vue (TopNav)
- Remove mode toggle from CatalogPage.vue (now in header)
- Move [Offers/Hubs/Suppliers] view toggle from top-left to top-right on map
- View toggle now visible in both modes (Explore and Quote)
- Simplify mobile layout to show only view toggle
- Move Explore/Quote mode toggle to top right corner
- Add view toggle (Offers/Hubs/Suppliers) to top left in Explore mode
- Panel shows only in Quote mode when showPanel prop is true
- Simplified panel slot structure
- Add CatalogMode type (explore/quote) to useCatalogSearch
- Create ExplorePanel component with view toggle (offers/hubs/suppliers)
- Create QuoteForm and QuotePanel components for search form
- Refactor CatalogPage to fullscreen map with overlay panel
- Simplify catalog/index.vue to use new components
- Add translations for modes and quote form (ru/en)
The catalog now has two modes:
- Explore: Browse map with offers/hubs/suppliers toggle
- Quote: Search form with product/hub/qty filters to find offers
- Add MapViewMode type (offers/hubs/suppliers) with cookie storage
- Add view toggle button group on full-width map
- Update clusterNodeType and mapPointColor based on selected view
- Add translations for view options
- Change displayMode from 'hero' to 'map-default' for /catalog
- Always show map on catalog page (fullWidthMap when no selectMode)
- Add offersCount to GetProducts, GetProductsBySupplier, GetProductsNearHub
- Remove CatalogHero from catalog page (hero content stays on /)
- Remove 'Товар:' badge during selection - tags appear only after selection
- Align logo and icons vertically with input (h-12)
- Simplify search input styling
- Add color scheme: product/offer=orange, supplier=blue, hub=green
- Remove 'location' filter (same as hub)
- Quantity filter appears only after product is selected
- Map hover shows 'target' ring effect (outer white ring)
- Tokens in header use entity-specific colors
- Merge two rows into one: logo + search block + icons
- Search block now contains input and chips together
- Input is bigger with larger tokens
- Remove hero section from landing page
- Update padding to match new header height
- Restore full landing with How it works + Who it's for sections
- Make search input bigger and rounder (rounded-full, shadow)
- Remove border between input and chips
- Bigger badges and icons
- Move search input with tokens into center of header
- Remove tabs (Search, Catalog, Orders, Seller)
- Icons (bot, globe, user) remain on right side
- Chips for filter selection below input
- Delete GlobalSearchBar.vue and UnifiedSearchBar.vue
- Share searchQuery via useState across composable calls
- Simplify main page to just show hero
- Main page (/) now redirects to /catalog
- Catalog page uses CatalogPage component with map on the right
- Search bar tokens are now inside the input field (like Gmail)
- Removed separate grid components, using cards directly
- Added missing translations (refine, noResults)
- Add useCatalogSearch composable for managing unified search state
- Add UnifiedSearchBar component with token chips for filters
- Add CatalogHero component for empty/landing state
- Create grid components for each display mode:
- CatalogGridProducts, CatalogGridSuppliers, CatalogGridHubs
- CatalogGridHubsForProduct, CatalogGridProductsFromSupplier
- CatalogGridProductsInHub, CatalogGridOffers
- Add unified catalog page at /catalog with query params
- Remove SubNavigation from catalog section (kept for other sections)
- Update all links to use new unified catalog paths
- Delete old nested catalog pages (offers/suppliers/hubs flows)
- Add i18n translations for catalog section
- Change theme from cmyk to cupcake
- Move [offerId].vue to detail/[offerId].vue to avoid conflict with [productId]/index.vue
- Update all navigation references to use new /catalog/offers/detail/ path
- GlobalSearchBar now redirects to /catalog/offers/[productId]/[hubId]
- GoodsContent redirects to offers flow
- select-location pages redirect to offers flow
- Added quantity tag to offers page
- Added KYC profile loading and offer detail navigation on offers page
- New KycProfileCard shows full KYC profile data (INN, OGRN, director, capital, activities)
- Added to offer detail page /catalog/suppliers/[supplierId]/[productId]/[hubId]
- Uses kycProfileFull endpoint for authorized detailed company info
When using server-side clustering, the clicked item's uuid might not be
in the paginated props.items array. Now emits a minimal object with just
uuid so parent pages can still navigate.
- Add @select handler to hubs/index.vue and suppliers/index.vue
for map click navigation
- Add hoveredId props to final pages for point highlighting
on card hover
- Add "Выберите источник" hint on final pages with sources
- Add key property to FilterOption interface in CatalogSearchBar
- Display badges in "Key: Value" format (e.g., "Поставщик: Name")
- Remove SuppliersBreadcrumbs from supplier catalog pages
- Add navigationFilters computed with supplier/product/hub badges
- Add handleRemoveFilter to navigate back when badge is clicked
- Remove counter from /catalog/offers search bar
- Add server-clustering to /catalog/offers/[productId]
- Remove transition animations from Card.vue
- Use client-side clustering for suppliers (data from exchange, not geo)
- Add clusterNodeType prop to CatalogPage
- Update useClusteredNodes to accept nodeType parameter
- Enable server clustering on /offers and /suppliers pages
- Add hoveredId sync on /offers page
- Remove hover:shadow-lg animation from Card
- Replace FindProductRoutesDocument with GetOffersToHubDocument
- Replace FindSupplierProductHubsDocument with GetOffersBySupplierProductDocument + GetHubsNearOfferDocument
- Update all catalog pages to use new query naming convention
- Add new GraphQL operation files, remove deprecated ones
- SupplierCard.vue: use supplier.uuid in link generation
- products/[id].vue: get uuid from supplier profile and use it for navigation
Fixes 404 errors on supplier pages
- Redesign RouteStepper: nodes connected by lines with distance on line
- Add HubProductCard component with sparkline chart background
- Auto-select first product when hub page loads
- Remove placeholder with package-x icon
- Add ApexCharts plugin for charts
- Pass startName/endName to RouteStepper for route visualization
- Replace v-show with transform: translateY() for smooth header collapse animation
- Wrap MainNav + SubNav in fixed container with dynamic transform
- Remove sticky positioning from MainNavigation and SubNavigation
- Fix map to extend to screen edge (right-0, no rounded corners)
- Add dynamic padding-top to main for fixed header compensation
- Remove catalog.vue layout and useCatalogLayout.ts (broken provide/inject)
- All catalog/clientarea list pages now use topnav layout
- Pages use CatalogPage component for SearchBar + Map functionality
- Clean architecture: layout handles nav, component handles features
- Create useCatalogLayout composable for data transfer from pages to layout
- Layout now owns SearchBar and CatalogMap components directly
- Pages provide data via provideCatalogLayout()
- Fixes navigation glitches (multiple SearchBars) when switching tabs
- Support custom subNavItems for clientarea pages
- Unify 6 pages to use catalog layout:
- catalog/offers, suppliers, hubs
- clientarea/orders, addresses, offers
- Add sticky positioning with proper styling (bg, border-b)
- Use negative margins to span full width like nav bars
- Update map offset to account for 3 bars (11rem with search bar)
Use dynamic mapTopClass/mapHeightClass based on searchBar slot:
- With searchBar: top-44 (176px), height calc(100vh-12rem)
- Without searchBar: top-32 (128px), height calc(100vh-9rem)
- Create CatalogSearchBar.vue with search input, filter badges (× to remove), filter dropdown, counter, sort dropdown
- Integrate searchBar slot into CatalogPage with displayedCount and totalCount
- Update hubs page to use CatalogSearchBar with transport type and country filters
- Add translations for search bar in common.json
- Add transport/country filter labels in catalogHubsSection.json
- Delete hubs/map.vue, offers/map.vue, suppliers/map.vue
- Pass hoveredId to CatalogMap for marker highlighting
- Split view on main pages (like Airbnb) is the correct approach
- Add useClusteredNodes composable for fetching clustered nodes
- Update CatalogMap to support server-side clustering mode
- Add bounds-change event for fetching clusters on map move/zoom
- Add hover event to HubCard for marker highlighting
- Update hubs/map page to use new clustering system
- Add mapItems prop to CatalogPage for separate map data
- List shows one card per order, map shows source+dest points
- Fix hover to match by orderUuid pattern
- Make GlobalSearchBar functional with searchStore integration
- Add destination search using hubs/nodes GraphQL query
- Navigate to /request page instead of /catalog/offers
- Remove hero section from index.vue (search is now in header)
- Add padding (px-3 lg:px-6) to topnav layout
- Implement split layout for catalog pages (offers, hubs, suppliers)
- Left side: filters + scrollable card list (40%)
- Right side: map (60%, hidden on mobile)
- Add fitBounds to CatalogMap for auto-centering on all points
- Add productUuid filter to useCatalogOffers composable
- Create useCatalogProducts composable for products list
- Update offers/index.vue: show products first, then offers by product
- Update offers/map.vue: same two-level navigation
- Add translations for new UI elements
Navigation flow:
/catalog/offers → product selection → offers for that product
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>