0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

shadcn/uiのSidebarで発生するDialogContentエラーの解決方法

Last updated at Posted at 2024-12-23

はじめに

shadcn/uiの公式ドキュメントのSidebarテンプレートを使用した際に、モバイル画面でサイドバーを開くトリガーを押すと、以下のエラーが発生しました。

`DialogContent` requires a `DialogTitle` for the component to be accessible for screen reader users.

If you want to hide the `DialogTitle`, you can wrap it with our VisuallyHidden component.

For more information, see https://radix-ui.com/primitives/docs/components/dialog

この記事では、このエラーの原因と解決方法について説明します。

エラー原因

エラー内容から、DialogContentにおいて、アクセシビリティを確保するためにDialogTitleが必要であることがわかりました。

解決方法

shadcn/uiの公式リポジトリのissue #430で一時的に解消する方法を見つけている方がいました。

SheetTitle(またはDialogTitle)を一時的に利用し、それを隠すことで問題を解決できました。

修正したコード

修正箇所:components/ui/sidebar.tsx(201行目あたり)

  • 修正前
    if (isMobile) {
      return (
        <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>
          <SheetContent
            data-sidebar="sidebar"
            data-mobile="true"
            className="w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden"
            style={
              {
                "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
              } as React.CSSProperties
            }
            side={side}
          >
            <div className="flex h-full w-full flex-col">{children}</div>
          </SheetContent>
        </Sheet>
      );
    }
    
  • 修正後
    if (isMobile) {
      return (
        <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>
          <SheetContent
            data-sidebar="sidebar"
            data-mobile="true"
            className="w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden"
            style={
              {
                "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
              } as React.CSSProperties
            }
            side={side}
          >
          // コードを追加
            <SheetHeader className="sr-only">
              <SheetTitle>Sidebar</SheetTitle>
            </SheetHeader>
            <div className="flex h-full w-full flex-col">{children}</div>
          </SheetContent>
        </Sheet>
      );
    }
    

さいごに

一時的な措置ですが、エラーが解消できてよかったです!誰かの助けになると幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?