11import { forwardRef , useImperativeHandle , useCallback , useRef } from 'react'
2+ import SlDialog from '@shoelace-style/shoelace/dist/react/dialog/index.js'
3+ import type SlDialogElement from '@shoelace-style/shoelace/dist/components/dialog/dialog.js'
24import type { RLDialogProps , RLDialogRef } from './types'
35import type { SlRequestCloseEvent } from '../utils/types'
46
5- declare global {
6- namespace JSX {
7- interface IntrinsicElements {
8- 'sl-dialog' : React . DetailedHTMLProps < React . HTMLAttributes < HTMLElement > , HTMLElement > & {
9- label ?: string
10- open ?: boolean
11- noHeader ?: boolean
12- class ?: string
13- onSlShow ?: ( event : Event ) => void
14- onSlAfterShow ?: ( event : Event ) => void
15- onSlHide ?: ( event : Event ) => void
16- onSlAfterHide ?: ( event : Event ) => void
17- onSlInitialFocus ?: ( event : Event ) => void
18- onSlRequestClose ?: ( event : Event ) => void
19- }
20- }
21- }
22- }
23-
247export const RLDialog = forwardRef < RLDialogRef , RLDialogProps > (
258 (
269 {
@@ -40,7 +23,7 @@ export const RLDialog = forwardRef<RLDialogRef, RLDialogProps>(
4023 } ,
4124 ref
4225 ) => {
43- const dialogRef = useRef < HTMLElement & { open : boolean ; show : ( ) => void ; hide : ( ) => void } > ( null )
26+ const dialogRef = useRef < SlDialogElement > ( null )
4427
4528 useImperativeHandle ( ref , ( ) => ( {
4629 open : dialogRef . current ?. open ,
@@ -49,8 +32,8 @@ export const RLDialog = forwardRef<RLDialogRef, RLDialogProps>(
4932 } ) )
5033
5134 const handleRequestClose = useCallback (
52- ( event : Event ) => {
53- const evt = event as unknown as SlRequestCloseEvent
35+ ( event : CustomEvent ) => {
36+ const evt = event as SlRequestCloseEvent
5437 if ( noCloseOnOutsideClick && evt . detail . source === 'overlay' ) {
5538 evt . preventDefault ( )
5639 return
@@ -63,47 +46,47 @@ export const RLDialog = forwardRef<RLDialogRef, RLDialogProps>(
6346 )
6447
6548 const handleShow = useCallback (
66- ( event : Event ) => {
67- onShow ?.( event as unknown as Parameters < NonNullable < typeof onShow > > [ 0 ] )
49+ ( event : CustomEvent ) => {
50+ onShow ?.( event )
6851 } ,
6952 [ onShow ]
7053 )
7154
7255 const handleAfterShow = useCallback (
73- ( event : Event ) => {
74- onAfterShow ?.( event as unknown as Parameters < NonNullable < typeof onAfterShow > > [ 0 ] )
56+ ( event : CustomEvent ) => {
57+ onAfterShow ?.( event )
7558 } ,
7659 [ onAfterShow ]
7760 )
7861
7962 const handleHide = useCallback (
80- ( event : Event ) => {
81- onHide ?.( event as unknown as Parameters < NonNullable < typeof onHide > > [ 0 ] )
63+ ( event : CustomEvent ) => {
64+ onHide ?.( event )
8265 } ,
8366 [ onHide ]
8467 )
8568
8669 const handleAfterHide = useCallback (
87- ( event : Event ) => {
88- onAfterHide ?.( event as unknown as Parameters < NonNullable < typeof onAfterHide > > [ 0 ] )
70+ ( event : CustomEvent ) => {
71+ onAfterHide ?.( event )
8972 } ,
9073 [ onAfterHide ]
9174 )
9275
9376 const handleInitialFocus = useCallback (
94- ( event : Event ) => {
95- onInitialFocus ?.( event as unknown as Parameters < NonNullable < typeof onInitialFocus > > [ 0 ] )
77+ ( event : CustomEvent ) => {
78+ onInitialFocus ?.( event )
9679 } ,
9780 [ onInitialFocus ]
9881 )
9982
10083 return (
101- < sl-dialog
84+ < SlDialog
10285 ref = { dialogRef }
103- class = { className ?? 'dialog' }
86+ className = { className ?? 'dialog' }
10487 label = { label }
105- open = { open || undefined }
106- noHeader = { noHeader || undefined }
88+ open = { open }
89+ noHeader = { noHeader }
10790 onSlShow = { handleShow }
10891 onSlAfterShow = { handleAfterShow }
10992 onSlHide = { handleHide }
@@ -112,7 +95,7 @@ export const RLDialog = forwardRef<RLDialogRef, RLDialogProps>(
11295 onSlRequestClose = { handleRequestClose }
11396 >
11497 { children }
115- </ sl-dialog >
98+ </ SlDialog >
11699 )
117100 }
118101)
0 commit comments