nextui/apps/docs/components/demo-code-modal.tsx
Junior Garcia b8e7b94586
🚀 (#4570)
* docs: optimize route higtlight (#4520)

* docs: optimize home display (#4519)

* docs: optimize home display and route highlight

* docs: optimize home display

* fix(alert): propagate className (#4535)

* fix(alert): propagate className

* chore(alert): remove className from alert theme

* fix(avatar): title type in Avatar (#4529)

* fix(avatar): title type in Avatar

* fix(alert): apply isEmpty check on title

* fix(alert): alert interface props type

* refactor: remove unnecessary props types (#4530)

* refactor(docs): remove string type as it is included in ReactNode

* refactor: remove unnecessary types

* feat(changeset): add changeset

* chore: remove changeset

* refactor: remove null since ReactNode unions it already

* fix(input): use onPress for wrapper click focus (#4483)

* fix(input): use onPress for wrapper click focus

* test(input): wrapper click focus test

* chore(changeset): input onPress for wrapper click focus

* chore(changeset): minor wording

* Refactor/rebrand (#4532)

* chore: rebrand in progress

* chore: update docs to use heroui

* chore: components renbranded

* chore: figma moved to the docs files

* fix: posthog config

* fix(docs): extra classname in form example (#4465)

* chore: clean git

* chore: make heroui private

* chore: new logo

* chore: node env var renamed

* chore: public robots txt deleted

* chore: wrangler installed

* chore: wrangler renamed

* chore: cloudlfare workers removed

* chore: force vercel deploy

* refactor: first migration and provider

* refactor: rename nextui plugin

* refactor: rename github site

* refactor: rename CONTRIBUTING

* refactor: rename package name

* refactor: nextjs image hostname

* refactor: mdx repo nextui-org rename frontio-ai

* refactor: nextui.org rename heroui.com

* refactor: add heroui to missing places

* fix: heroui plugin name

* fix: update docs

* docs: nextui to heroui add npmrc pnpm migratation

* chore: rename all packages with new org name

* chore: replace frontio-ai by frontioai

* chore: revert previous changes

* chore: small adjustment

* chore: doc updated

* feat: blog

* chore: avatar updated

* fix: url

* chore: add new ogimage

* fix: ogimage command

* fix: heroui name and storybook welcome page

* fix: og image url

* feat: favicon and icon changed

---------

Co-authored-by: աӄա <wingkwong.code@gmail.com>
Co-authored-by: winches <329487092@qq.com>

* fix: postbuild script

* chore: core package updates

* ci(changesets): version packages (#4569)

Co-authored-by: Junior Garcia <jrgarciadev@gmail.com>

* feat: contributors added to the blog

---------

Co-authored-by: winches <329487092@qq.com>
Co-authored-by: աӄա <wingkwong.code@gmail.com>
Co-authored-by: Peterl561 <76144929+Peterl561@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-01-16 16:24:32 -03:00

90 lines
2.3 KiB
TypeScript

"use client";
import {FC, useState} from "react";
import {
Modal,
Button,
ModalContent,
ModalHeader,
Link as HeroUILink,
ModalBody,
ModalFooter,
Skeleton,
} from "@heroui/react";
import Link from "next/link";
import {CodeWindow} from "@/components/code-window";
import {useIsMobile} from "@/hooks/use-media-query";
export interface DemoCodeModalProps {
isOpen: boolean;
code: string;
title: string;
subtitle?: string;
onClose: () => void;
}
export const DemoCodeModal: FC<DemoCodeModalProps> = ({isOpen, code, title, subtitle, onClose}) => {
const [isCodeVisible, setIsCodeVisible] = useState(false);
const isMobile = useIsMobile();
const lowerTitle = title.toLowerCase();
const fileName = `${lowerTitle}.tsx`;
return (
<Modal
classNames={{
backdrop: "z-[100002]", // to appear above the navbar
wrapper: "z-[100003]", // to appear above the backdrop
}}
isOpen={isOpen}
motionProps={{
onAnimationComplete: () => {
setIsCodeVisible(isOpen);
},
}}
radius={isMobile ? "none" : "lg"}
size={isMobile ? "full" : "2xl"}
onClose={onClose}
>
<ModalContent>
<ModalHeader className="flex flex-col gap-2">
<h3>{title} code</h3>
<p className="text-base font-normal">
{subtitle || (
<>
This is an example of how to use the {lowerTitle} component, for more information
please visit the&nbsp;
<HeroUILink as={Link} href={`/docs/components/${lowerTitle}`}>
{lowerTitle}
</HeroUILink>
&nbsp;docs.
</>
)}
</p>
</ModalHeader>
<ModalBody className="flex-initial md:pb-6">
{isCodeVisible ? (
<CodeWindow
showCopy
showWindowIcons
className="min-h-[320px] !h-[60vh] max-h-full"
language="jsx"
title={fileName}
value={code}
/>
) : (
<Skeleton className="h-[60vh] rounded-xl" />
)}
</ModalBody>
<ModalFooter className="md:hidden">
<Button fullWidth onPress={onClose}>
Close
</Button>
</ModalFooter>
</ModalContent>
</Modal>
);
};