Extrait de Code

Importer et afficher le code source de votre projet.

Utilisation

Ajouter le composant CodeSnippet

components/content/CodeSnippet.vue
<template>
  <MDC v-if="loadedCode" :value="md" class="not-first:mt-5" />
  <UiAlert v-else variant="destructive">
    <UiAlertTitle>Erreur</UiAlertTitle>
    <UiAlertDescription>
      Impossible de charger le code : <ProseCodeInline>{{ file || url }}</ProseCodeInline>
    </UiAlertDescription>
  </UiAlert>
</template>

<script setup lang="ts">
const { file, url, language, title, highlights, meta, start, offset } = defineProps<{
  file?: string;
  url?: string;
  language: string;
  title?: string;
  highlights?: string;
  meta?: string;
  start?: number;
  offset?: number;
}>();

const loadedCode = ref('');

const rawFiles = import.meta.glob([
  // Chemin que vous souhaitez importer
], {
  query: '?raw',
  import: 'default',
});

if (file) {
  const importer = rawFiles[file];
  if (importer) {
    loadedCode.value = (await importer()) as string;
  }
} else if (url) {
  try {
    const data = await $fetch(url, { parseResponse: txt => txt });
    if (data) {
      loadedCode.value = data as string;
    }
  } catch {}
}

if (loadedCode.value && start && offset) {
  const lines = loadedCode.value.split('\n');
  loadedCode.value = lines.slice(Number(start || 1) - 1, Number(start || 1) - 1 + Number(offset)).join('\n');
}

const md = `
::div
\`\`\`\`${language} ${title && `[${title}]`} ${highlights && `{${highlights}}`} ${meta || ''}
${loadedCode.value}
\`\`\`\`
::
`;
</script>

Ajouter les chemins que vous souhaitez importer

Utilisez le motif d'importation Glob pour ajouter des chemins.

Lignes 25 à 30 dans CodeSnippet.vue
const rawFiles = import.meta.glob([
  // Chemin que vous souhaitez importer
  // ex.
  '@/examples/**/*.{vue}',
], {
  query: '?raw',
  import: 'default',
});

Utiliser dans les fichiers markdown

::code-snippet
---
file: /examples/file.vue
language: vue
---
::

Mise en Surbrillance des Lignes

::code-snippet
---
file: /examples/file.vue
language: vue
title: Fichier
highlights: 9-11
meta: line-numbers height=300
---
::

Se traduit par :

````ts [Fichier] {9-11} line-numbers height=300
// code importé depuis /examples/file.vue
````

Utilisation des Props Offset

::code-snippet
---
file: /examples/file.vue
language: vue
start: 6
offset: 4
---
::

Récupération depuis une URL Distante

::code-snippet
---
url: https://raw.githubusercontent.com/ZTL-UwU/shadcn-docs-nuxt/refs/heads/main/pages/index.vue
language: vue
---
::

Props

filestring
Le chemin vers le fichier importé
urlstring
Une URL distante pour récupérer le code
titlestring
Titre du bloc de code
languagestring
Langage de coloration syntaxique du bloc de code
highlightsstring
Lignes à mettre en surbrillance dans le bloc de code
metastring
Méta-données du bloc de code
startnumber
Index de la ligne de début
offsetnumber
Nombre de lignes à afficher à partir du début