mirror of
https://github.com/supabase/supabase.git
synced 2026-10-19 08:09:11 +03:00
+14








247c72fff2
* feat(sql-editor): cli commands to import snippet as migration/seed * fix(sql-editor): reword to download snippet * chore(sql-editor): update wording * Move to tabed ui, move download button to context menu * Inline * feat: add react native auth blog and quickstart. (#19006) * feat: add react native auth blog and quickstart. * Grammarly check * Minor edits. * Added og image. * chore: add password sign in and gif. --------- Co-authored-by: Ramiro Nuñez Dosio <ramiro@supabase.io> * fix: duplicate eslint dependency (#19028) * Update sveltekit.mdx (#18998) Extended authorization section of docs to mention use of Sveltekit sequence helper function for protecting routes alongside defining Supabase session. Also provided new code. Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * fix: add hello world example to edge functions quickstart (#19030) * Fix project card status not showing (#19034) * Fix project card status not showing * Fix tooltip project card styling * chore: update cli reference doc (#18934) * Add docs for updating the image versions (#18160) see #17930 * chore: fix casing of "encryption at rest" (#19032) * chore: update self-hosted image versions (#18935) chore: update image versions for docker/docker-compose.yml * (docs) Update arg name that resulted from adapters release (#19024) update arg name that resulted from adapters release * docs: Fix an example (@supabase/ssr package) for Next.js API Route (#19009) Update creating-a-client.mdx replace `appendHeader` with `setHeader` for the Next.js API route example. * chore: cleanup studio dependencies (#19040) * Fix code text color (#19042) * make dark: selector work again * fix reference docs code color * feat: remove note about tus rollout (#19007) it has been rolled out to all projects * docs: update language in database-size.mdx code block (#19033) Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> * Docs: Adds a page for enums (#18590) * Adds a page for enums * Adds some details on deleting values * Update apps/docs/pages/guides/database/postgres/enums.mdx Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> * Update apps/docs/pages/guides/database/postgres/enums.mdx Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> * Update apps/docs/pages/guides/database/postgres/enums.mdx Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> * Update apps/docs/pages/guides/database/postgres/enums.mdx Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * removes dangerous operation --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update hugging-face.mdx: fix example curl request (#17667) The example request did not match the example edge function because there is used prompt and in the curl script was used query * docs: fix syntax error in create role command (#17755) * Update auth-sso-saml.mdx (#17856) * docs: Update auth-google.mdx (#18119) * fix: Bump up Realtime to 2.25.35 (#19048) * Update llamaindex.ipynb doc_hash to hash (#18838) * Update llamaindex.ipynb doc_hash to hash Update `doc_hash` to `hash` since running this as-is provided an `AttributeError`. Here's what the Python build-in `vars` gives me (truncated): ```python {'id_': 'd94b1287-b3ef-4aba-ac6b-7a4e353b0327', 'embedding': None, 'metadata': {}, 'excluded_embed_metadata_keys': [], 'excluded_llm_metadata_keys': [], 'relationships': {}, 'hash': '4c702b4df575421e1d1af4b1fd50511b226e0c9863dbfffeccb8b689b8448f35',...} ``` * fix: SimpleWebPageReader & StorageContext imports * chore: revert python version change --------- Co-authored-by: Greg Richardson <greg.nmr@gmail.com> * fix: add reference docs back to search index (#19054) Reference docs weren't being indexed properly because the specs weren't getting checked out at build time. * docs: add RN videos and discoverability improvements. (#18633) * docs: add RN videos and discoverability improvements. * Apply suggestions from code review Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> * chore: run prettier. --------- Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> * docs: add getting started guide for Swift (#19044) * docs: getting started guide for Swift * Apply suggestions from code review Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Add new tutorial to menu * Add correct image for tutorial * style: format with-swift tutorial * docs: add example to the repository --------- Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> Co-authored-by: Thor 雷神 Schaeff <5748289+thorwebdev@users.noreply.github.com> * docs: Update mentions of `foreign table` to `referenced table` (#18656) * replace foreignTable parameter with referencedTable parameter * remove redirects * rename any mentions of foreign table to referenced table * fix one mention of foreign table * update some links * guide: add pgroonga videos to pgroonga guide (#19073) add pgroonga videos to pgroonga guide * docs(swift): rename `authStateChanges` and remove `File` from upload method (#19067) docs: fix authStateChanges and upload documentation * Small style fixes * Style * Update * Update * Update UI components positioning for DownloadSnippetModal --------- Co-authored-by: Terry Sutton <saltcod@gmail.com> Co-authored-by: Thor 雷神 Schaeff <5748289+thorwebdev@users.noreply.github.com> Co-authored-by: Ramiro Nuñez Dosio <ramiro@supabase.io> Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> Co-authored-by: uncapped1599 <126204291+uncapped1599@users.noreply.github.com> Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> Co-authored-by: Lakshan Perera <lakshan@supabase.io> Co-authored-by: Joshen Lim <joshenlimek@gmail.com> Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> Co-authored-by: Div Arora <darora@users.noreply.github.com> Co-authored-by: Oliver Rice <github@oliverrice.com> Co-authored-by: Taishi <taishi.k0903@gmail.com> Co-authored-by: Francesco Sansalvadore <f.sansalvadore@gmail.com> Co-authored-by: Inian <inian1234@gmail.com> Co-authored-by: Joseph Yu <39754176+joseph082@users.noreply.github.com> Co-authored-by: Maidi <mareike.haug@web.de> Co-authored-by: Shinya Fujino <shf0811@gmail.com> Co-authored-by: Andrei Soroker <soroker@gmail.com> Co-authored-by: Isaac Abotsi <abotsi@users.noreply.github.com> Co-authored-by: Filipe Cabaço <filipe@supabase.io> Co-authored-by: Jason R. Stevens, CFA <jason@thinkjrs.dev> Co-authored-by: Guilherme Souza <grsouza@pm.me> Co-authored-by: Tyler <18113850+dshukertjr@users.noreply.github.com>
164 lines
5.7 KiB
TypeScript
164 lines
5.7 KiB
TypeScript
import { Children } from 'react'
|
|
import * as CopyToClipboard from 'react-copy-to-clipboard'
|
|
import { Light as SyntaxHighlighter } from 'react-syntax-highlighter'
|
|
import { monokaiCustomTheme } from './CodeBlock.utils'
|
|
import { Button, IconCheck, IconCopy } from 'ui'
|
|
|
|
import js from 'react-syntax-highlighter/dist/cjs/languages/hljs/javascript'
|
|
import ts from 'react-syntax-highlighter/dist/cjs/languages/hljs/typescript'
|
|
import csharp from 'react-syntax-highlighter/dist/cjs/languages/hljs/csharp'
|
|
import py from 'react-syntax-highlighter/dist/cjs/languages/hljs/python'
|
|
import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql'
|
|
import bash from 'react-syntax-highlighter/dist/cjs/languages/hljs/bash'
|
|
import dart from 'react-syntax-highlighter/dist/cjs/languages/hljs/dart'
|
|
import json from 'react-syntax-highlighter/dist/cjs/languages/hljs/json'
|
|
import kotlin from 'react-syntax-highlighter/dist/cjs/languages/hljs/kotlin'
|
|
|
|
import { useState } from 'react'
|
|
import { useTheme } from 'next-themes'
|
|
|
|
export interface CodeBlockProps {
|
|
title?: string
|
|
language: 'js' | 'jsx' | 'sql' | 'py' | 'bash' | 'ts' | 'dart' | 'json' | 'csharp' | 'kotlin'
|
|
linesToHighlight?: number[]
|
|
hideCopy?: boolean
|
|
hideLineNumbers?: boolean
|
|
className?: string
|
|
value?: string
|
|
children?: string
|
|
}
|
|
|
|
export const CodeBlock = ({
|
|
title,
|
|
language,
|
|
linesToHighlight = [],
|
|
className,
|
|
value,
|
|
children,
|
|
hideCopy = false,
|
|
hideLineNumbers = false,
|
|
}: CodeBlockProps) => {
|
|
const { resolvedTheme } = useTheme()
|
|
const isDarkTheme = resolvedTheme?.includes('dark')!
|
|
const monokaiTheme = monokaiCustomTheme(isDarkTheme)
|
|
|
|
const [copied, setCopied] = useState(false)
|
|
|
|
const handleCopy = () => {
|
|
setCopied(true)
|
|
setTimeout(() => {
|
|
setCopied(false)
|
|
}, 1000)
|
|
}
|
|
|
|
// Extract string when `children` has a single string node
|
|
const childrenArray = Children.toArray(children)
|
|
const [singleChild] = childrenArray.length === 1 ? childrenArray : []
|
|
const singleString = typeof singleChild === 'string' ? singleChild : undefined
|
|
|
|
let codeValue = value ?? singleString ?? children
|
|
codeValue = codeValue?.trimEnd?.() ?? codeValue
|
|
|
|
// check the length of the string inside the <code> tag
|
|
// if it's fewer than 70 characters, add a white-space: pre so it doesn't wrap
|
|
const shortCodeBlockClasses =
|
|
typeof codeValue === 'string' && codeValue.length < 70 ? 'short-inline-codeblock' : ''
|
|
|
|
let lang = language ? language : className ? className.replace('language-', '') : 'js'
|
|
// force jsx to be js highlighted
|
|
if (lang === 'jsx') lang = 'js'
|
|
SyntaxHighlighter.registerLanguage('js', js)
|
|
SyntaxHighlighter.registerLanguage('ts', ts)
|
|
SyntaxHighlighter.registerLanguage('py', py)
|
|
SyntaxHighlighter.registerLanguage('sql', sql)
|
|
SyntaxHighlighter.registerLanguage('bash', bash)
|
|
SyntaxHighlighter.registerLanguage('dart', dart)
|
|
SyntaxHighlighter.registerLanguage('csharp', csharp)
|
|
SyntaxHighlighter.registerLanguage('json', json)
|
|
SyntaxHighlighter.registerLanguage('kotlin', kotlin)
|
|
|
|
const large = false
|
|
// don't show line numbers if bash == lang
|
|
if (lang === 'bash' || lang === 'sh') hideLineNumbers = true
|
|
const showLineNumbers = !hideLineNumbers
|
|
|
|
return (
|
|
<>
|
|
{title && (
|
|
<div className="rounded-t-md bg-surface-100 py-2 px-4 border-b border-default text-blue-1100 font-sans">
|
|
{title.replace(/%20/g, ' ')}
|
|
</div>
|
|
)}
|
|
{className ? (
|
|
<div className="relative max-w-[90vw] md:max-w-none overflow-auto">
|
|
{/* @ts-ignore */}
|
|
<SyntaxHighlighter
|
|
language={lang}
|
|
wrapLines={true}
|
|
// @ts-ignore
|
|
style={monokaiTheme}
|
|
className={[
|
|
'code-block border p-4 w-full !my-0 !bg-surface-100',
|
|
`${!title ? '!rounded-md' : '!rounded-t-none !rounded-b-md'}`,
|
|
`${!showLineNumbers ? 'pl-6' : ''}`,
|
|
className,
|
|
].join(' ')}
|
|
customStyle={{
|
|
fontSize: large ? 18 : 13,
|
|
lineHeight: large ? 1.5 : 1.4,
|
|
}}
|
|
showLineNumbers={showLineNumbers}
|
|
lineProps={(lineNumber) => {
|
|
if (linesToHighlight.includes(lineNumber)) {
|
|
return {
|
|
style: { display: 'block', backgroundColor: 'hsl(var(--background-selection))' },
|
|
}
|
|
}
|
|
return {}
|
|
}}
|
|
lineNumberContainerStyle={{
|
|
paddingTop: '128px',
|
|
}}
|
|
lineNumberStyle={{
|
|
minWidth: '44px',
|
|
paddingLeft: '4px',
|
|
paddingRight: '4px',
|
|
marginRight: '12px',
|
|
color: '#828282',
|
|
textAlign: 'center',
|
|
fontSize: large ? 14 : 12,
|
|
paddingTop: '4px',
|
|
paddingBottom: '4px',
|
|
}}
|
|
>
|
|
{codeValue}
|
|
</SyntaxHighlighter>
|
|
{!hideCopy && (value || children) && className ? (
|
|
<div
|
|
className={[
|
|
'absolute right-2',
|
|
`${isDarkTheme ? 'dark' : ''}`,
|
|
`${!title ? 'top-2' : 'top-[3.25rem]'}`,
|
|
].join(' ')}
|
|
>
|
|
{/* //
|
|
@ts-ignore */}
|
|
<CopyToClipboard text={value || children}>
|
|
<Button
|
|
type="default"
|
|
icon={copied ? <IconCheck /> : <IconCopy />}
|
|
onClick={() => handleCopy()}
|
|
>
|
|
{copied ? 'Copied' : ''}
|
|
</Button>
|
|
</CopyToClipboard>
|
|
</div>
|
|
) : null}
|
|
</div>
|
|
) : (
|
|
<code className={shortCodeBlockClasses}>{value || children}</code>
|
|
)}
|
|
</>
|
|
)
|
|
}
|