11/// <reference types="vite/client" />
22
3- import type { BundledLanguageInfo , BundledThemeInfo } from '@shikijs/types'
3+ import type { BundledLanguage , BundledTheme } from 'shiki'
4+ import type { GrammarInfo } from 'tm-grammars'
5+ import type { ThemeInfo } from 'tm-themes'
46import { useLocalStorage } from '@vueuse/core'
57import { acceptHMRUpdate , defineStore } from 'pinia'
68import { ref , shallowRef , watch } from 'vue'
79
810export const usePlayground = defineStore ( 'playground' , ( ) => {
9- const lang = useLocalStorage ( 'shiki-playground-lang' , 'typescript' )
10- const theme = useLocalStorage ( 'shiki-playground-theme' , 'vitesse-dark' )
11- const allThemes = shallowRef < BundledThemeInfo [ ] > ( [
12- {
13- id : 'vitesse-dark' ,
14- displayName : 'Vitesse Dark' ,
15- type : 'dark' ,
16- import : undefined ! ,
17- } ,
18- ] )
19- const allLanguages = shallowRef < BundledLanguageInfo [ ] > ( [
20- {
21- id : 'typescript' ,
22- name : 'TypeScript' ,
23- import : undefined ! ,
24- } ,
25- ] )
26- const bundledLangsFull = shallowRef < BundledLanguageInfo [ ] > ( [ ] )
27- const bundledLangsWeb = shallowRef < BundledLanguageInfo [ ] > ( [ ] )
11+ const lang = useLocalStorage < BundledLanguage > ( 'shiki-playground-lang' , 'typescript' )
12+ const theme = useLocalStorage < BundledTheme > ( 'shiki-playground-theme' , 'vitesse-dark' )
13+ const allThemes = shallowRef < ThemeInfo [ ] > ( [ ] )
14+ const allLanguages = shallowRef < GrammarInfo [ ] > ( [ ] )
15+ const bundledLangsFull = shallowRef < GrammarInfo [ ] > ( [ ] )
16+ const bundledLangsWeb = shallowRef < GrammarInfo [ ] > ( [ ] )
2817
2918 const input = useLocalStorage ( 'shiki-playground-input' , '' )
3019 const output = ref ( '<pre></pre>' )
@@ -33,16 +22,16 @@ export const usePlayground = defineStore('playground', () => {
3322
3423 function randomize ( ) : void {
3524 if ( allLanguages . value . length && allThemes . value . length ) {
36- lang . value = allLanguages . value [ Math . floor ( Math . random ( ) * allLanguages . value . length ) ] . id as any
37- theme . value = allThemes . value [ Math . floor ( Math . random ( ) * allThemes . value . length ) ] . id as any
25+ lang . value = allLanguages . value [ Math . floor ( Math . random ( ) * allLanguages . value . length ) ] . name as BundledLanguage
26+ theme . value = allThemes . value [ Math . floor ( Math . random ( ) * allThemes . value . length ) ] . name as BundledTheme
3827 }
3928 }
4029
4130 ; ( async ( ) => {
4231 const { createHighlighter } = await import ( 'shiki' )
43- const { bundledLanguagesInfo : bundleFull } = await import ( 'shiki/bundle/full ' )
44- const { bundledLanguagesInfo : bundleWeb } = await import ( 'shiki/bundle/ web')
45- const { bundledThemesInfo } = await import ( 'shiki/ themes' )
32+ const allGrammars = await import ( 'tm-grammars ' )
33+ const webGrammars = allGrammars . grammars . filter ( grammar => grammar . categories ?. includes ( ' web') )
34+ const { themes : bundledThemesInfo } = await import ( 'tm- themes' )
4635
4736 const samplesCache = new Map < string , Promise < string | undefined > > ( )
4837
@@ -59,9 +48,9 @@ export const usePlayground = defineStore('playground', () => {
5948 }
6049
6150 allThemes . value = bundledThemesInfo
62- allLanguages . value = bundleFull
63- bundledLangsFull . value = bundleFull
64- bundledLangsWeb . value = bundleWeb
51+ allLanguages . value = allGrammars . grammars
52+ bundledLangsFull . value = allGrammars . grammars
53+ bundledLangsWeb . value = webGrammars
6554
6655 if ( typeof window !== 'undefined' ) {
6756 const highlighter = await createHighlighter ( {
@@ -74,8 +63,8 @@ export const usePlayground = defineStore('playground', () => {
7463 watch ( [ lang , theme ] , async ( n , o ) => {
7564 isLoading . value = true
7665 await Promise . all ( [
77- highlighter . loadTheme ( theme . value as any ) ,
78- highlighter . loadLanguage ( lang . value as any ) ,
66+ highlighter . loadTheme ( theme . value ) ,
67+ highlighter . loadLanguage ( lang . value ) ,
7968 ] )
8069 // Fetch sample if language changed
8170 if ( ( o [ 0 ] || ! input . value ) && n [ 0 ] !== o [ 0 ] ) {
0 commit comments