shadcn.io is not affiliated with official shadcn/ui
Dual Marquee Monogram Row Logos Block for Vue
Two rows of two-letter monogram tiles for a textile-ERP maker, scrolling in opposite directions at a tight spacing with one button that pauses both.
Installation
Overview
A dense, two-row customer marquee for Vue with Ark UI. A start-aligned header says how many mills and dyeworks run on the product and carries a button that pauses the scrolling. Under it, a ruled band that ends the block holds two rows of small bordered tiles, each a customer's two-letter monogram in a mono face, packed close together and running in opposite directions. Every name is text for screen readers and the marquee's looping copies are hidden from them. It's built from Marquee, Button and Guides, with CSS for the entrance and your theme's tokens for every colour. For a page where the number of customers is the proof and wordmarks would take too much room.
FAQ
How do I change the customers?
Edit FIRST_ROW and SECOND_ROW at the top of the file: each entry is the initials drawn on the tile and the name that screen readers read. Keep the initials to two letters so the tiles stay square, and keep the rows about the same length so they take the same time to loop.
How do the rows stop?
Four ways: the pause button in the header (a toggle with aria-pressed that holds both rows at once), hovering a row, moving keyboard focus into one, and the reduced-motion setting, which stops both rows and leaves each as a row you can scroll by hand. The button is hidden under reduced motion because there is nothing left to pause.
How do the rows run in opposite directions?
The second Marquee has the reverse prop. Both take the same speed, so the rows drift apart evenly. Change speed on each, in pixels per second, for a slower or a lopsided pair.
How does a monogram tile name its customer?
The two letters are decorative, so they are hidden from assistive technology, and the customer's full name sits next to them as screen-reader-only text. The tiles aren't links or buttons, so they aren't tab stops, and the repeated copies the loop needs are hidden and inert.