Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RTL Support #1638

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open

RTL Support #1638

wants to merge 17 commits into from

Conversation

nahasco
Copy link

@nahasco nahasco commented Sep 30, 2023

RTL support for almost all components in the registry.

Mainly replaced physical properties with logical properties and added rtl:space-x-reverse where space-x-* is used. In addition to using radix direction provider to return chevrons dynamically.

This fixes #530

Up to date list of adjusted components:

"🔸" means the component didn't need any changes to be compatible with RTL layouts

  • Accordion 🔸
  • Alert Dialog
  • Alert
  • Aspect Ratio 🔸
  • Avatar 🔸
  • Badge 🔸
  • Breadcrumb
  • Button 🔸
  • Calendar
  • Card 🔸
  • Carousel
  • Chart
  • Checkbox 🔸
  • Collapsible 🔸
  • Command
  • Context Menu
  • Dialog
  • Drawer
  • Dropdown Menu
  • Form
  • Hover Card
  • Input OTP
  • Input 🔸
  • Label 🔸
  • Menubar
  • Navigation Menu
  • Pagination
  • Popover 🔸
  • Progress
  • Radio Group 🔸
  • Resizable 🔸
  • Scroll Area 🔸
  • Select
  • Separator 🔸
  • Sheet
  • Skeleton
  • Slider 🔸
  • Sonner 🔸
  • Switch
  • Table
  • Tabs 🔸
  • Textarea 🔸
  • Toast
  • Toaster
  • Toggle Group 🔸
  • Toggle 🔸
  • Tooltip 🔸

@vercel
Copy link

vercel bot commented Sep 30, 2023

Someone is attempting to deploy a commit to the shadcn-pro Team on Vercel.

A member of the Team first needs to authorize it.

@shadcn
Copy link
Collaborator

shadcn commented Oct 3, 2023

This is interesting. I wonder if we could have this as an option via the cli. Turn on rtl in components.json and we automatically apply those updates for you.

@nahasco
Copy link
Author

nahasco commented Oct 3, 2023

This is interesting. I wonder if we could have this as an option via the cli. Turn on rtl in components.json and we automatically apply those updates for you.

That's a great idea!

The changes I have added result in support of both RTL and LTR directions, by simply adding dir=rtl to the html element <html dir="rtl"> and finally wrapping the app with Radix's direction provider <DirectionProvider dir=rtl> to switch to RTL. Furthermore, when changing the properties from directional to logical I realised some icons like ChevronLeft or ChevronRight also need to be adjusted for RTL. One more minor change would be adjusting the animation directions.

Acheiving all of this via the cli would result in full RTL support, but I am not sure how can it be done.

@shadcn
Copy link
Collaborator

shadcn commented Oct 19, 2023

@nahasco I can take a look at this. Having this in the cli would be awesome. Adding it to the next milestone. I'll push to this PR and make sure you're credited for the work you've done here. Thank you.

@nahasco
Copy link
Author

nahasco commented Oct 22, 2023

@nahasco I can take a look at this. Having this in the cli would be awesome. Adding it to the next milestone. I'll push to this PR and make sure you're credited for the work you've done here. Thank you.

Regarding the choice between physical and logical properties, I'd like to clarify whether you intend to use logical properties as the default for all languages. Logical properties offer the flexibility needed for seamless direction switching, and I believe they could simplify the codebase and improve adaptability for various languages.

For other specific elements like icons and HTML or radix direction values, there could be an option to manage these through the CLI to give a starting ground to the user. This approach allows us to make logical properties the primary choice for simplicity and flexibility while maintaining control over other elements that may require manual adjustments.

I'm curious to know your thoughts on this approach and whether logical properties are indeed the direction you're leaning towards. Your input on this would be highly valuable. Once again, thank you for your contribution to this!

@tomer-yechiel
Copy link

please keep in mind the use case of supporting both LTR and RTL in the same codebase.

@mustafamoe
Copy link

It would be great to have it rn 😅

@shadcn shadcn mentioned this pull request Dec 21, 2023
@nahasco nahasco changed the title RTL support for almost all registry components and examples and a bug fix RTL support for almost all registry components and examples Mar 4, 2024
@@ -65,7 +65,7 @@ const AlertDialogFooter = ({
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn(
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 rtl:space-x-reverse",
Copy link

@dodeca-6-tope dodeca-6-tope Jul 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-2? I think it'd be cleaner.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didnt want to change the original styling alot. Just adding rtl:space-x-reverse at the end is the most minimal, i think.

@MHBahrampour
Copy link

It's really shocking that a modern UI library doesn't fully support RTL or Internationalization (like calendar). Love shadcn but I with they would consider these stuff more seriously.

@nahasco nahasco reopened this Sep 11, 2024
@nahasco nahasco changed the title RTL support for almost all registry components and examples RTL Support Sep 11, 2024
@nahasco nahasco marked this pull request as draft September 11, 2024 21:50
@sahandsn
Copy link

any update on this?

@salahkai
Copy link

salahkai commented Oct 2, 2024

Waiting for updates!

@nahasco
Copy link
Author

nahasco commented Oct 2, 2024

I will continue working on this in the next few days. I am hoping I add RTL support to as much components as I can before I open the PR again. Then we will have to wait for it to get merged. In the meantime, you may copy the RTL supported components from this PR.

@nahasco nahasco marked this pull request as ready for review October 3, 2024 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support for RTL
8 participants