7777 :class =" `language-${props.lang}`"
7878 :style =" preTagStyles"
7979 >
80- <code
81- v-if =" prismPlugin"
82- :class =" `language-${props.lang} ${browserWindow ? 'v-code-block--code-browser' : ''} ${highlightjs ? 'hljs' : ''}`"
83- :style =" codeTagStyles"
84- v-text =" computedCode"
85- ></code >
86- <code
87- v-else
88- :class =" `language-${props.lang} ${browserWindow ? 'v-code-block--code-browser' : ''} ${highlightjs ? 'hljs' : ''}`"
89- :style =" codeTagStyles"
90- v-html =" renderedCode"
91- ></code >
92- </pre >
80+ <code
81+ v-if =" prismPlugin"
82+ :class =" `language-${props.lang} ${browserWindow ? 'v-code-block--code-browser' : ''} ${highlightjs ? 'hljs' : ''}`"
83+ :style =" codeTagStyles"
84+ v-text =" computedCode"
85+ ></code >
86+ <code
87+ v-else
88+ :class =" `language-${props.lang} ${browserWindow ? 'v-code-block--code-browser' : ''} ${highlightjs ? 'hljs' : ''}`"
89+ :style =" codeTagStyles"
90+ v-html =" renderedCode"
91+ ></code >
92+ </pre >
9393 </div >
9494 </div >
9595</template >
@@ -121,11 +121,13 @@ import {
121121 neonBunnyHighlightThemeMin
122122} from ' ./themes' ;
123123
124- import hljs from ' highlight.js/lib/core' ;
125124import langCss from ' highlight.js/lib/languages/css' ;
126- import langJavascript from ' highlight.js/lib/languages/javascript' ;
127125import langHtml from ' highlight.js/lib/languages/xml' ;
126+ import langJavascript from ' highlight.js/lib/languages/javascript' ;
127+ import langPhp from ' highlight.js/lib/languages/php' ;
128128import langPlaintext from ' highlight.js/lib/languages/plaintext' ;
129+ import langTypescript from ' highlight.js/lib/languages/typescript' ;
130+ import { HLJSApi } from ' highlight.js' ;
129131
130132
131133const highlightJsVersion = ' 11.8.0' ;
@@ -136,7 +138,6 @@ const prismThemesVersion = '1.9.0';
136138// -------------------------------------------------- Emits & Slots & Injects //
137139const emit = defineEmits ([' run' , ' update:copy-status' ]);
138140const slots = useSlots ();
139- const codeBlockGlobalOptions = inject <Props >(' codeBlockGlobalOptions' );
140141
141142
142143// -------------------------------------------------- Props //
@@ -145,6 +146,7 @@ const props = withDefaults(defineProps<Props>(), { ...AllProps });
145146
146147// -------------------------------------------------- Data //
147148
149+ let hljs: HLJSApi ;
148150// eslint-disable-next-line @typescript-eslint/no-explicit-any
149151let prismModule: any ;
150152
@@ -283,7 +285,7 @@ onBeforeMount(() => {
283285});
284286
285287onMounted (() => {
286- useTheme .value = codeBlockGlobalOptions ?. theme || props .theme ;
288+ useTheme .value = props .theme ;
287289 loadTheme ();
288290 mobileCheck ();
289291 renderCode ();
@@ -495,12 +497,22 @@ function renderCode(): void {
495497 convertCode ();
496498
497499 if (props .highlightjs ) {
498- hljs .registerLanguage (' javascript' , langJavascript );
499- hljs .registerLanguage (' css' , langCss );
500- hljs .registerLanguage (' html' , langHtml );
501- hljs .registerLanguage (' plain' , langPlaintext );
502-
503- renderedCode .value = hljs .highlight (convertedCode .value as string , { language: props .lang }).value ;
500+ import (' highlight.js/lib/core' )
501+ .then ((module ) => {
502+ hljs = module .default ;
503+
504+ hljs .registerLanguage (' css' , langCss );
505+ hljs .registerLanguage (' html' , langHtml );
506+ hljs .registerLanguage (' javascript' , langJavascript );
507+ hljs .registerLanguage (' php' , langPhp );
508+ hljs .registerLanguage (' plain' , langPlaintext );
509+ hljs .registerLanguage (' typescript' , langTypescript );
510+
511+ renderedCode .value = hljs .highlight (convertedCode .value as string , { language: props .lang }).value ;
512+ })
513+ .catch ((err ) => {
514+ console .error (' Highlight.js import:' , { err });
515+ });
504516 }
505517
506518 if (props .prismjs ) {
0 commit comments