77
77
:class =" `language-${props.lang}`"
78
78
:style =" preTagStyles"
79
79
>
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 >
93
93
</div >
94
94
</div >
95
95
</template >
@@ -121,11 +121,13 @@ import {
121
121
neonBunnyHighlightThemeMin
122
122
} from ' ./themes' ;
123
123
124
- import hljs from ' highlight.js/lib/core' ;
125
124
import langCss from ' highlight.js/lib/languages/css' ;
126
- import langJavascript from ' highlight.js/lib/languages/javascript' ;
127
125
import 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' ;
128
128
import langPlaintext from ' highlight.js/lib/languages/plaintext' ;
129
+ import langTypescript from ' highlight.js/lib/languages/typescript' ;
130
+ import { HLJSApi } from ' highlight.js' ;
129
131
130
132
131
133
const highlightJsVersion = ' 11.8.0' ;
@@ -136,7 +138,6 @@ const prismThemesVersion = '1.9.0';
136
138
// -------------------------------------------------- Emits & Slots & Injects //
137
139
const emit = defineEmits ([' run' , ' update:copy-status' ]);
138
140
const slots = useSlots ();
139
- const codeBlockGlobalOptions = inject <Props >(' codeBlockGlobalOptions' );
140
141
141
142
142
143
// -------------------------------------------------- Props //
@@ -145,6 +146,7 @@ const props = withDefaults(defineProps<Props>(), { ...AllProps });
145
146
146
147
// -------------------------------------------------- Data //
147
148
149
+ let hljs: HLJSApi ;
148
150
// eslint-disable-next-line @typescript-eslint/no-explicit-any
149
151
let prismModule: any ;
150
152
@@ -283,7 +285,7 @@ onBeforeMount(() => {
283
285
});
284
286
285
287
onMounted (() => {
286
- useTheme .value = codeBlockGlobalOptions ?. theme || props .theme ;
288
+ useTheme .value = props .theme ;
287
289
loadTheme ();
288
290
mobileCheck ();
289
291
renderCode ();
@@ -495,12 +497,22 @@ function renderCode(): void {
495
497
convertCode ();
496
498
497
499
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
+ });
504
516
}
505
517
506
518
if (props .prismjs ) {
0 commit comments