Files
supabase/apps/www/components/Realtime/sandpack.tsx
Saxon FletcherandJoshen Lim 7af346d185 Feat/realtime examples (#34317)
* realtime examples

* more examples

* styling updates

* use broadcast from database for todos

* updated realtime examples

* update layout

* clean up

* turbo

* update example structure

* remove context

* remove text from example

* realtime migration

* Smol fix

* Update

* Update

* Final fix

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-04-02 11:00:27 +10:00

56 lines
1.6 KiB
TypeScript

'use client'
import { SandpackProvider, SandpackLayout, SandpackPreview } from '@codesandbox/sandpack-react'
import './sandpack-styles.css' // Import custom Sandpack styles
type SandpackProps = {
files: Record<string, string>
dependencies?: Record<string, string>
}
export default function SandpackWrapper({ files, dependencies = {} }: SandpackProps) {
// Ensure we have the required files for React template
const completeFiles = {
'/App.js': files['/App.js'] || files['App.js'] || '',
'/styles.css': files['/styles.css'] || files['styles.css'] || '',
...files,
}
// Default dependencies
const defaultDependencies = {
'@supabase/supabase-js': 'latest',
'lucide-react': 'latest',
}
return (
<div className="h-full w-full">
<SandpackProvider
template="react"
files={completeFiles}
customSetup={{
dependencies: {
...defaultDependencies,
...dependencies,
},
}}
options={{
experimental_enableServiceWorker: true,
visibleFiles: ['/App.js'],
initMode: 'user-visible',
activeFile: '/App.js',
externalResources: ['https://cdn.tailwindcss.com'],
}}
>
<SandpackLayout className="!h-full !min-h-full !border-none !bg-surface-50 !rounded-none !flex !flex-col">
<SandpackPreview
showNavigator={false}
showRefreshButton={false}
showOpenInCodeSandbox={false}
className="!h-full !flex-1 !border-none"
/>
</SandpackLayout>
</SandpackProvider>
</div>
)
}