
# Direktif @source

`@source` berada di CSS input Anda. Bentuk `inline()` menambah atau menghapus kandidat kelas dan berfungsi di mana saja. Bentuk jalurnya menyebut file templat yang dipindai untuk mencari nama kelas; hanya [CLI](https://tailwindphp.inline0.dev/id/docs/cli) yang memindai file, dan saat ini belum menerapkan jalur yang Anda berikan (lihat [Cara jalur digunakan](#how-paths-are-used)).

```css
@import "tailwindcss";
@source "./templates";
```

Direktif `@source` dibaca selama kompilasi dan dihapus dari output — direktif ini tidak pernah muncul dalam CSS yang dihasilkan. Jalur harus diapit tanda kutip; tanda kutip tunggal dan ganda dapat digunakan.

## Jalur, glob, dan negasi

Bentuk jalur menerima direktori, glob, atau jalur yang dinegasikan, dan direktifnya terakumulasi:

```css
@source "./templates";              /* a directory */
@source "./components/**/*.php";    /* a glob */
@source not "./templates/legacy";   /* an exclusion */
```

### Cara jalur digunakan

Compiler mencatat setiap direktif jalur dalam daftar `sources` pada array yang dikembalikan oleh `TailwindPHP\compile()`, sebagai `['base' => …, 'pattern' => …, 'negated' => …]` dengan `base` diambil dari opsi kompilasi `base`. Compiler tidak pernah membaca file itu sendiri.

- `tw::generate()`, `tw::compile()`, dan `TailwindCompiler` hanya mengompilasi konten yang Anda teruskan. Direktif jalur tidak berpengaruh di sana.
- [CLI](https://tailwindphp.inline0.dev/id/docs/cli) membaca `sources`, tetapi pada rilis saat ini alat tersebut memindai direktori file input secara rekursif untuk setiap jalur yang tidak dinegasikan, apa pun isi jalur atau globnya, dan melewati sepenuhnya jalur `not`, sehingga jalur tersebut tidak mengecualikan apa pun ([#8](https://github.com/inline0/tailwindphp/issues/8)). [Yang dipindai oleh CLI](https://tailwindphp.inline0.dev/id/docs/cli#what-the-cli-scans) menjelaskan detailnya dan memberikan susunan yang berfungsi saat ini.

## Kandidat sebaris

`@source inline(...)` memaksakan kelas masuk ke output meskipun kelas tersebut tidak pernah muncul dalam file yang dipindai — berguna untuk nama kelas yang dirangkai secara dinamis saat runtime:

```css
@source inline("flex p-4 m-2");
```

Kandidat sebaris juga mendukung varian:

```css
@source inline("hover:bg-blue-500 focus:ring-2");
```

### Ekspansi kurung kurawal

Pola sebaris memperluas kelompok kurung kurawal, sehingga Anda dapat mencantumkan banyak kandidat secara ringkas:

```css
@source inline("p-{1,2,4}");
/* Generates p-1, p-2, and p-4 */

@source inline("text-{red,blue}-500");
/* Generates text-red-500 and text-blue-500 */
```

## Kandidat sebaris yang diabaikan

`@source not inline(...)` melakukan kebalikan dari `inline()` — direktif ini menghapus kandidat yang cocok dari output, bahkan jika kandidat itu ditemukan dalam konten Anda. Ekspansi kurung kurawal juga berfungsi di sini:

```css
@source not inline("legacy");
@source not inline("p-{1,2}");
```

## Aturan validasi

`@source` adalah pernyataan, bukan blok. Compiler menolak:

- Direktif yang memiliki body — `@source cannot have a body.`
- Direktif bersarang (misalnya di dalam `@media`) — `@source cannot be nested.`
- Jalur yang tidak diapit tanda kutip — `@source paths must be quoted.`

```css
/* Invalid — throws "`@source` cannot have a body." */
@source "./src" {
    .some-style { color: red; }
}

/* Invalid — throws "`@source` paths must be quoted." */
@source ./src;
```

Lihat [CLI](https://tailwindphp.inline0.dev/id/docs/cli) untuk build berbasis file, dan [Impor](https://tailwindphp.inline0.dev/id/docs/usage/imports) untuk menyelesaikan `@import` dan modul virtual.
