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 29 commits into
base: main
Choose a base branch
from
Open

RTL Support #1638

wants to merge 29 commits into from

Conversation

nahasco
Copy link

@nahasco nahasco commented Sep 30, 2023

RTL support for all components in the registry.

Mainly replaced physical properties with logical properties and added rtl:space-x-reverse where space-x-* is used.

This fixes #530, fixes #4877 , fixes #5776, fixes #5658 , fixes #2759 , fixes #2736 , fixes #1919

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 🔸
  • Sidebar

@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
Copy link

@Aymen-Khanfir Aymen-Khanfir left a comment

Choose a reason for hiding this comment

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

Good job, i was thinking of use rlt[] and ltr[] but you solution required less code

Copy link

vercel bot commented Dec 6, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated (UTC)
ui ❌ Failed (Inspect) Dec 11, 2024 7:22pm

RTL support for more components
@nahasco
Copy link
Author

nahasco commented Dec 13, 2024

Thanks to @jjeem , all components are completed and the PR is ready to merge.

@shadcn

@shadcn
Copy link
Collaborator

shadcn commented Dec 14, 2024

@nahasco wow, great work. I'll review.

@MohamedAlQadeery
Copy link

This is amazing cant wait for it be merged !

@ioeldev
Copy link

ioeldev commented Dec 20, 2024

Can we do something to speed up the merge ?

@alialnaghmoush
Copy link

@shadcn We are waiting for the merged

@200-0K
Copy link

200-0K commented Dec 22, 2024

Waiting for this to be merged

@omerman
Copy link

omerman commented Dec 22, 2024

Same here, would love to see it too

@ioeldev
Copy link

ioeldev commented Dec 23, 2024

If i have customized some of the shadcn components directly to the /ui folder (button.tsx, card.tsx etc.), how would i be able to keep my changes and integrate the new RTL support ?
Have someone already experienced a component update that has already custom style in it ?

@omerman
Copy link

omerman commented Dec 23, 2024

If i have customized some of the shadcn components directly to the /ui folder (button.tsx, card.tsx etc.), how would i be able to keep my changes and integrate the new RTL support ? Have someone already experienced a component update that has already custom style in it ?

I guess you will have some conflicts.. hopefully not much 🤷

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: cli area: component area: roadmap This looks great. We'll add it to the roadmap, review and merge. enhancement New feature or request
Projects
None yet