@@ -10,15 +10,20 @@ import React, {
1010import Code from "./Code" ;
1111import cn from "./utils/cn" ;
1212import Icon from "./Icon" ;
13- import { getLanguageInfo , stripSdkType } from "./CodeSnippet/languages" ;
13+ import {
14+ getLanguageInfo ,
15+ stripSdkType ,
16+ SDK_PREFIXES ,
17+ SDKType ,
18+ } from "./CodeSnippet/languages" ;
1419import LanguageSelector from "./CodeSnippet/LanguageSelector" ;
1520import ApiKeySelector from "./CodeSnippet/ApiKeySelector" ;
1621import PlainCodeView from "./CodeSnippet/PlainCodeView" ;
1722import CopyButton from "./CodeSnippet/CopyButton" ;
1823import SegmentedControl from "./SegmentedControl" ;
1924
20- // Define SDK type
21- export type SDKType = "realtime" | "rest" | "fe" | "be" | null ;
25+ // Re-export SDKType for consumers
26+ export type { SDKType } ;
2227
2328// Define API key types
2429export type ApiKeysItem = {
@@ -211,14 +216,11 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
211216
212217 if ( ! codeLanguage ) return ;
213218
214- if ( codeLanguage . startsWith ( "realtime_" ) ) {
215- sdkTypes . add ( "realtime" ) ;
216- } else if ( codeLanguage . startsWith ( "rest_" ) ) {
217- sdkTypes . add ( "rest" ) ;
218- } else if ( codeLanguage . startsWith ( "fe_" ) ) {
219- sdkTypes . add ( "fe" ) ;
220- } else if ( codeLanguage . startsWith ( "be_" ) ) {
221- sdkTypes . add ( "be" ) ;
219+ for ( const prefix of SDK_PREFIXES ) {
220+ if ( codeLanguage . startsWith ( `${ prefix } _` ) ) {
221+ sdkTypes . add ( prefix ) ;
222+ break ;
223+ }
222224 }
223225
224226 if ( ! languages . includes ( codeLanguage ) ) {
@@ -237,14 +239,14 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
237239 } ;
238240 } , [ children , extractLanguageFromCode , findCodeElement ] ) ;
239241
240- const resolvedSdk : SDKType = useMemo ( ( ) => {
242+ const resolvedSdk : SDKType | undefined = useMemo ( ( ) => {
241243 if ( sdkTypes . size === 1 && sdk && ! sdkTypes . has ( sdk ) ) {
242244 return Array . from ( sdkTypes ) [ 0 ] ;
243245 }
244- return sdk ?? null ;
246+ return sdk ;
245247 } , [ sdk , sdkTypes ] ) ;
246248
247- // Only show SDK selector for realtime/rest types, not for fe/be (which are controlled by page-level selector)
249+ // Only show SDK selector for realtime/rest types, not for client/agent (which are controlled by page-level selector)
248250 const showSDKSelector = sdkTypes . has ( "realtime" ) || sdkTypes . has ( "rest" ) ;
249251
250252 const filteredLanguages = useMemo ( ( ) => {
@@ -273,8 +275,8 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
273275 } , [ resolvedSdk , showSDKSelector , languages , languageOrdering ] ) ;
274276
275277 const activeLanguage = useMemo ( ( ) => {
276- // For fe/be SDK types (controlled by page-level selector), construct the full language
277- if ( resolvedSdk === "fe " || resolvedSdk === "be " ) {
278+ // For client/agent SDK types (controlled by page-level selector), construct the full language
279+ if ( resolvedSdk === "client " || resolvedSdk === "agent " ) {
278280 const fullLang = `${ resolvedSdk } _${ lang } ` ;
279281 // Verify this language exists in available languages
280282 if ( languages . includes ( fullLang ) ) {
@@ -434,6 +436,29 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
434436 // Show a read-only language label when fixed (controlled by external selector)
435437 const showFixedLanguageLabel = fixed && activeLanguage ;
436438
439+ const renderLanguageLabel = ( langKey : string , onClick ?: ( ) => void ) => (
440+ < div
441+ className = { cn (
442+ "border-b border-neutral-300 dark:border-neutral-1000 h-[2.125rem] inline-flex items-center px-3 w-full" ,
443+ { "rounded-t-lg" : ! headerRow } ,
444+ ) }
445+ >
446+ < div
447+ className = { cn ( "inline-flex items-center" , onClick && "cursor-pointer" ) }
448+ { ...( onClick && { onClick } ) }
449+ >
450+ < Icon
451+ name = { getLanguageInfo ( langKey ) . icon }
452+ size = "16px"
453+ additionalCSS = "mr-2"
454+ />
455+ < span className = "ui-text-label4 font-semibold text-neutral-800 dark:text-neutral-500 select-none" >
456+ { getLanguageInfo ( langKey ) . label }
457+ </ span >
458+ </ div >
459+ </ div >
460+ ) ;
461+
437462 const renderContent = useMemo ( ( ) => {
438463 if ( ! activeLanguage ) return null ;
439464
@@ -535,25 +560,8 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
535560 </ div >
536561 ) }
537562
538- { showFixedLanguageLabel && (
539- < div
540- className = { cn (
541- "border-b border-neutral-300 dark:border-neutral-1000 h-[2.125rem] inline-flex items-center px-3 w-full" ,
542- { "rounded-t-lg" : ! headerRow } ,
543- ) }
544- >
545- < div className = "inline-flex items-center" >
546- < Icon
547- name = { getLanguageInfo ( activeLanguage ) . icon }
548- size = "16px"
549- additionalCSS = "mr-2"
550- />
551- < span className = "ui-text-label4 font-semibold text-neutral-800 dark:text-neutral-500 select-none" >
552- { getLanguageInfo ( activeLanguage ) . label }
553- </ span >
554- </ div >
555- </ div >
556- ) }
563+ { showFixedLanguageLabel &&
564+ renderLanguageLabel ( activeLanguage ) }
557565
558566 { showLanguageSelector &&
559567 ( showFullSelector ? (
@@ -563,32 +571,10 @@ const CodeSnippet: React.FC<CodeSnippetProps> = ({
563571 onLanguageChange = { handleLanguageChange }
564572 />
565573 ) : (
566- < div
567- className = { cn (
568- "border-b border-neutral-300 dark:border-neutral-1000 h-[2.125rem] inline-flex items-center px-3 w-full" ,
569- { "rounded-t-lg" : ! headerRow } ,
570- ) }
571- >
572- { filteredLanguages . length > 0 && (
573- < div
574- className = { cn ( "inline-flex items-center" , {
575- "cursor-pointer" : filteredLanguages . length > 0 ,
576- } ) }
577- { ...( filteredLanguages . length > 0 && {
578- onClick : ( ) => handleLanguageChange ( filteredLanguages [ 0 ] ) ,
579- } ) }
580- >
581- < Icon
582- name = { getLanguageInfo ( filteredLanguages [ 0 ] ) . icon }
583- size = "16px"
584- additionalCSS = "mr-2"
585- />
586- < span className = "ui-text-label4 font-semibold text-neutral-800 dark:text-neutral-500 select-none" >
587- { getLanguageInfo ( filteredLanguages [ 0 ] ) . label }
588- </ span >
589- </ div >
590- ) }
591- </ div >
574+ renderLanguageLabel (
575+ filteredLanguages [ 0 ] ,
576+ ( ) => handleLanguageChange ( filteredLanguages [ 0 ] ) ,
577+ )
592578 ) ) }
593579 < div
594580 ref = { codeRef }
0 commit comments