Adnotări

Adnotările sunt micile marcaje autorizate care transformă un MDX simplu în conținut structurat pentru site. Ele definesc subpaginile proiectelor, slug-uri stabile, rezumate, fișiere puse în prim-plan și detalii de prezentare a codului, fără a muta aceste informații în codul rutelor.

Această pagină adună elementele de bază utile atât la scrierea manuală, cât și la solicitarea agenților să producă conținut. Fiecare secțiune arată mai întâi tiparul sursă, apoi explică ce face pagina redată cu el.

Încadrare și valori implicite pentru bloc

Adnotările de prezentare la nivel de bloc controlează cromatica implicită, indicatorii de linie, anteturile și controalele de suprapunere fără a necesita o componentă personalizată în fișierul MDX.

Eticheta limbajului

Blocurile de cod își arată limbajul curent ca etichetă, în mod implicit. Nu schimbă și nu modifică codul. Folosește !no-language pentru a o ascunde, sau !language pentru a o activa explicit.

export const packageManagers = ['yarn', 'pnpm', 'npm'];
ts

Numerotarea liniilor

Codul care nu este de tip shell afișează numerotarea liniilor în mod implicit. Blocurile de shell o omit, astfel încât comenzile scurte să rămână compacte, dar !line-numbers reactivează opțiunea pentru un exemplu individual de shell. Folosește !no-line-numbers pentru a dezactiva valoarea implicită pentru orice limbaj.

const managers = [
'yarn',
'pnpm',
'npm',
];
ts

Butonul de copiere

Blocurile de shell arată un buton de copiere în mod implicit, în timp ce blocurile care nu sunt de tip shell păstrează butoanele de copiere opționale. Folosește !copy pentru a activa copierea, sau !no-copy pentru a o ascunde.

// !copy
export const packageManagers = ['yarn', 'pnpm', 'npm'];
ts

Când !copy este prezent alături de eticheta limbajului, ambele împart aceeași bară de suprapunere.

Prefixul de shell

Proiectul rulează prin sarcinile Yarn și Moon ale repository-ului. Blocurile de shell arată prefixul $ și un buton de copiere în mod implicit. Folosește !no-shell-prompt sau !no-copy atunci când un bloc de shell nu trebuie să arate unul dintre acestea, sau folosește !shell-prompt și !copy pentru a le adăuga la un alt limbaj de cod.

yarn moon run website:build
sh

Nume de fișier

Metadatele simple ale unei fenced code block sunt redate ca nume de fișier deasupra blocului de cod.

package-manager.ts
```ts package-manager.ts
export const packageManagers = ['yarn', 'pnpm', 'npm'];
```
mdx

Adnotări vizuale și de linie

Adnotările pot atrage atenția asupra unei părți specifice dintr-un exemplu sau pot ajusta prezentarea liniilor fără a schimba codul pe care cititorii îl pot copia.

Cod marcat

!mark evidențiază linia următoare. Adaugă un interval sau o expresie regulată pentru a marca doar o parte a unei linii, și adaugă o culoare după selector pentru a suprascrie accentul temei.

function publish(version: string) {
// !mark blue
assertCleanWorkingTree();
// !mark[/version/] gold
return createRelease(version);
}
ts

Diferențe (Diffs)

!diff + și !diff - identifică liniile adăugate și eliminate. Stilizarea diferențelor reutilizează adnotarea de marcaj, astfel încât ambele funcționalități păstrează aceeași structură vizuală.

Folosește !noop înaintea unui marcator de adnotare pentru a arăta acel marcator ca și cod, în loc de a fi interpretat. Prefixul noop este omis din linia redată.

export function packageCommand(manager: string) {
// !diff -
return `${manager} install`;
// !diff +
return manager === 'npm' ? 'npm install' : `${manager} add`;
}
ts

Detalii pliate

!fold înlocuiește conținutul inline corespunzător cu o elipsă extensibilă. Elementul disclosure nativ păstrează textul integral în documentul redat pe server și rămâne extensibil fără JavaScript.

// !fold[/className="(.*?)"/gm]
export function Status() {
return <span className="status status--ready">Ready</span>;
}
tsx

Încadrarea automată a textului

!word-wrap păstrează liniile lungi în interiorul lățimii disponibile și aliniază textul încadrat cu indentarea originală.

// !word-wrap
const command = createPackageManagerCommand({ manager: 'yarn', operation: 'exec', package: 'typescript', executable: 'tsc', arguments: ['--watch', '--preserveWatchOutput'] });
ts

Componente complexe

Unele tipare de autorizare necesită mai mult decât un singur element markdown. Aceste componente păstrează sursa MDX lizibilă, permițând în același timp paginii redate să grupeze exemple, controale sau comparații înrudite într-un singur bloc.

File pentru cod (Code Tabs)

Blocurile de cod înrudite care descriu o singură schimbare în mai multe fișiere aparțin împreună, nu stivuite unul după altul.

<CodeWithTabs>
```ts !!tabs component.tsx
export function Example() {
return <p>Example</p>;
}
```
```ts !!tabs component.css.ts
export const exampleStyle = style({
display: 'block',
});
```
</CodeWithTabs>
mdx

Comenzi pentru managerul de pachete

Adnotarea !package descrie o comandă neutră față de managerul de pachete și redă formele corespunzătoare pentru Yarn, pnpm și npm ca file.

Instalarea pachetelor

yarn add typescript zod
sh
```sh !package install typescript zod
```
md

Fiecare variantă adaugă aceleași două pachete în proiectul curent și transmite numele lor neschimbate. Doar comanda diferă: Yarn și pnpm disting adăugarea unei dependințe de instalarea proiectului, folosind deci add, în timp ce npm suprasolicită install.

Inițierea unui proiect cu un pachet folosit o singură dată

yarn dlx create-vite my-app --template react-ts
sh
```sh !package exec create-vite my-app --template react-ts
```
md

Aici binarul și pachetul au același nume, deci nu trebuie declarat niciun pachet. Numele proiectului și argumentele șablonului sunt identice peste tot, și doar executorul se schimbă: yarn dlx, pnpm dlx și npx.

Rularea unui binar dintr-un pachet numit

yarn dlx -p typescript tsc --watch
sh
```sh !package exec --package typescript tsc --watch
```
md

Când binarul nu corespunde pachetului care îl furnizează, pachetul trebuie numit explicit. Executorii diferă la fel ca mai sus, la fel și opțiunea: Yarn o scrie -p, în timp ce pnpm și npm folosesc ambele --package.

Construit și întreținut de Sabin Marcu

(2025 -2026)

Cuprins

Experimente