mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
* 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>
99 lines
3.1 KiB
TypeScript
99 lines
3.1 KiB
TypeScript
"use client";
|
|
|
|
import {FC, useRef} from "react";
|
|
import {SandpackProvider, SandpackLayout, SandpackPreview} from "@codesandbox/sandpack-react";
|
|
|
|
import {StackblitzButton} from "../stackblitz-button";
|
|
|
|
import {SandpackCodeViewer} from "./code-viewer";
|
|
import {herouiTheme} from "./theme";
|
|
import {UseSandpackProps, useSandpack} from "./use-sandpack";
|
|
import {BugReportButton} from "./bugreport-button";
|
|
import {CopyButton} from "./copy-button";
|
|
import {CodeSandboxButton} from "./codesandbox-button";
|
|
import {LanguageSelector} from "./language-selector";
|
|
|
|
export interface SandpackProps extends UseSandpackProps {
|
|
showTabs?: boolean;
|
|
showPreview?: boolean;
|
|
showEditor?: boolean;
|
|
showCopyCode?: boolean;
|
|
showReportBug?: boolean;
|
|
showOpenInCodeSandbox?: boolean;
|
|
children?: React.ReactNode;
|
|
}
|
|
|
|
export const Sandpack: FC<SandpackProps> = ({
|
|
files: filesProp,
|
|
template,
|
|
highlightedLines,
|
|
typescriptStrict = false,
|
|
showPreview = false,
|
|
showEditor = true,
|
|
showOpenInCodeSandbox = true,
|
|
showReportBug = true,
|
|
showCopyCode = true,
|
|
showTabs,
|
|
children,
|
|
}) => {
|
|
const editorContainerRef = useRef(null);
|
|
|
|
const {files, decorators, customSetup, sandpackTemplate, hasTypescript, setCurrentTemplate} =
|
|
useSandpack({
|
|
files: filesProp,
|
|
template,
|
|
typescriptStrict,
|
|
highlightedLines,
|
|
});
|
|
|
|
return (
|
|
<SandpackProvider
|
|
customSetup={customSetup}
|
|
files={files}
|
|
template={sandpackTemplate}
|
|
theme={herouiTheme}
|
|
>
|
|
<SandpackLayout
|
|
style={{
|
|
// @ts-ignore
|
|
"--sp-border-radius": "0.5rem",
|
|
}}
|
|
>
|
|
<div className="flex w-full flex-col">
|
|
<div>{showPreview ? <SandpackPreview /> : children}</div>
|
|
<div ref={editorContainerRef} className="group h-auto relative pt-2">
|
|
{showEditor && (
|
|
<SandpackCodeViewer
|
|
containerRef={editorContainerRef}
|
|
decorators={decorators}
|
|
highlightedLines={highlightedLines}
|
|
showTabs={showTabs}
|
|
/>
|
|
)}
|
|
<div className="hidden md:flex z-20 opacity-0 group-hover:opacity-100 transition-opacity absolute gap-0 right-2 top-2 items-center justify-center bg-code-background">
|
|
{showReportBug && <BugReportButton />}
|
|
{showCopyCode && <CopyButton />}
|
|
{!showPreview && showOpenInCodeSandbox && <CodeSandboxButton />}
|
|
{!showPreview && showOpenInCodeSandbox && (
|
|
<StackblitzButton
|
|
isIconOnly
|
|
as="span"
|
|
className="dark:text-zinc-500 text-white"
|
|
files={files}
|
|
size="sm"
|
|
title="Open in Stackblitz"
|
|
typescriptStrict={typescriptStrict}
|
|
variant="light"
|
|
/>
|
|
)}
|
|
</div>
|
|
{hasTypescript && sandpackTemplate && (
|
|
<LanguageSelector template={sandpackTemplate} onChange={setCurrentTemplate} />
|
|
)}
|
|
</div>
|
|
</div>
|
|
</SandpackLayout>
|
|
</SandpackProvider>
|
|
);
|
|
};
|