mirror of
https://github.com/nextui-org/nextui.git
synced 2025-12-08 19:26:11 +00:00
* chore(root): menu and select components in progress * chore(root): merged with main * feat(menu): stories created * feat(dropdown): menu migrated to menu component * feat(select): base implementation in progress * feat(select): listbox implemented * feat(select): scroll overflow and auto scroll added * feat(select): colors & variants improved, inside placement complete, outside pending * feat(scroll-shadow): new component in progress * feat(select): scroll shadow integrated * fix(select): popover implementation, more scroll shadow stories added * feat(listbox): custom styles example added to stories * chore(listbox): overflow hidden removed * feat(select): variants and styles completed * chore(select): description story added * feat(select): more stories added * fix(select): dynamic collections inference, styles improved, more stories added * fix(select): auto scroll to selected item, scroll padding added * chore(select): scroll behavior changed to nearest * feat(select): custom item story added * fix(select): autoscroll fixed * feat(select): multi select support added * feat(select): more examples added, clean-package modified to remove dev packages * chore(modal): useImperativeHandle removed * feat(select): render value story improved * feat(docs): listbox & scroll shadow docs done * feat(docs): select documentation in progress * fix: select aria label (#1425) * feat(docs): more examples added * feat(docs): select multiple added, storybook favicon changed * fix: added value to aria label of select (#1431) * feat(select): more examples added, storybook favicon changed * fix(popover): dialog role removed * feat(select): api added, async loading exampled added * fix: fixed list box on click not working with sr click (#1439) * feat(select): async items loading support added and documented * feat(root): input styles updated to be as the select ones * chore(root): listbox and scroll shadow readme updated * feat(select): ts examples added, banner updated * fix(popover): voiceover closes when focusing an item fixed * chore(select): focus scope removed * fix(popover): free solo popover added to use without a trigger * feat(select): blog post added * chore(docs): search meta generated, multi controlled onchange example fixed * chore(root): changeset added --------- Co-authored-by: Jakob Guddas <github@jguddas.de>
88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
"use client";
|
|
|
|
import {FC, useRef} from "react";
|
|
import {SandpackProvider, SandpackLayout, SandpackPreview} from "@codesandbox/sandpack-react";
|
|
|
|
import {SandpackCodeViewer} from "./code-viewer";
|
|
import {nextuiTheme} 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;
|
|
defaultExpanded?: boolean;
|
|
showOpenInCodeSandbox?: boolean;
|
|
children?: React.ReactNode;
|
|
}
|
|
|
|
export const Sandpack: FC<SandpackProps> = ({
|
|
files: filesProp,
|
|
template,
|
|
highlightedLines,
|
|
typescriptStrict = false,
|
|
showPreview = false,
|
|
showEditor = true,
|
|
defaultExpanded = false,
|
|
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={nextuiTheme}
|
|
>
|
|
<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}
|
|
defaultExpanded={defaultExpanded}
|
|
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 />}
|
|
</div>
|
|
{hasTypescript && sandpackTemplate && (
|
|
<LanguageSelector template={sandpackTemplate} onChange={setCurrentTemplate} />
|
|
)}
|
|
</div>
|
|
</div>
|
|
</SandpackLayout>
|
|
</SandpackProvider>
|
|
);
|
|
};
|