image-preview.tsx 992 B

1234567891011121314151617181920212223242526272829303132
  1. import { Dialog as Kobalte } from "@kobalte/core/dialog"
  2. import { useI18n } from "../context/i18n"
  3. import { IconButton } from "./icon-button"
  4. export interface ImagePreviewProps {
  5. src: string
  6. alt?: string
  7. }
  8. export function ImagePreview(props: ImagePreviewProps) {
  9. const i18n = useI18n()
  10. return (
  11. <div data-component="image-preview">
  12. <div data-slot="image-preview-container">
  13. <Kobalte.Content data-slot="image-preview-content">
  14. <div data-slot="image-preview-header">
  15. <Kobalte.CloseButton
  16. data-slot="image-preview-close"
  17. as={IconButton}
  18. icon="close"
  19. variant="ghost"
  20. aria-label={i18n.t("ui.common.close")}
  21. />
  22. </div>
  23. <div data-slot="image-preview-body">
  24. <img src={props.src} alt={props.alt ?? i18n.t("ui.imagePreview.alt")} data-slot="image-preview-image" />
  25. </div>
  26. </Kobalte.Content>
  27. </div>
  28. </div>
  29. )
  30. }