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

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>
);
};