
# @source 지시문

`@source`는 입력 CSS에 작성합니다. `inline()` 형식은 클래스 후보를 추가하거나 제거하며 어디서나 사용할 수 있습니다. 경로 형식은 클래스 이름을 스캔할 템플릿 파일을 지정합니다. [CLI형식](https://tailwindphp.inline0.dev/ko/docs/cli)만 파일을 스캔하며, 현재는 지정한 경로를 적용하지 않습니다([경로 사용 방법](#how-paths-are-used) 참고).

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

`@source` 지시문은 컴파일 중에 읽힌 뒤 출력에서 제거되므로 생성된 CSS에는 나타나지 않습니다. 경로는 따옴표로 묶어야 하며 작은따옴표와 큰따옴표를 모두 사용할 수 있습니다.

## 경로, 글로브 및 제외

경로 형식에는 디렉터리, 글로브 또는 제외할 경로를 사용할 수 있으며, 지시문은 누적 적용됩니다:

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

### 경로 사용 방법

컴파일러는 모든 경로 지시문을 `TailwindPHP\compile()`가 반환하는 배열의 `sources` 목록에 `['base' => …, 'pattern' => …, 'negated' => …]`로 기록합니다. 여기서 `base` 값은 `base` 컴파일 옵션에서 가져옵니다. 컴파일러가 직접 파일을 읽지는 않습니다.

- `tw::generate()`, `tw::compile()`, `TailwindCompiler`는 전달한 콘텐츠만 컴파일합니다. 경로 지시문은 영향을 주지 않습니다.
- [CLI형식](https://tailwindphp.inline0.dev/ko/docs/cli)은 `sources`을 읽지만, 현재 릴리스에서는 경로나 글로브의 지정 내용과 관계없이 입력 파일의 디렉터리를 재귀적으로 스캔해 제외가 아닌 모든 경로를 처리하고 `not` 경로는 완전히 건너뛰므로 아무것도 제외하지 않습니다([#8](https://github.com/inline0/tailwindphp/issues/8)). [CLI에서 스캔하는 항목](https://tailwindphp.inline0.dev/ko/docs/cli#what-the-cli-scans)에 현재 사용할 수 있는 디렉터리 구조와 자세한 내용이 나와 있습니다.

## 인라인 후보

`@source inline(...)`는 스캔한 파일에 나타나지 않는 클래스도 출력에 강제로 포함합니다. 런타임에 동적으로 조합되는 클래스 이름에 유용합니다:

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

인라인 후보는 변형도 지원합니다:

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

### 중괄호 확장

인라인 패턴은 중괄호 그룹을 확장하므로 많은 후보를 간결하게 나열할 수 있습니다:

```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 */
```

## 무시할 인라인 후보

`@source not inline(...)`는 `inline()`와 반대로 작동합니다. 콘텐츠에서 발견된 경우에도 일치하는 후보를 출력에서 제거합니다. 여기서도 중괄호 확장을 사용할 수 있습니다:

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

## 검증 규칙

`@source`는 블록이 아니라 문장입니다. 컴파일러는 다음을 거부합니다:

- 본문이 있는 지시문 — `@source cannot have a body.`
- 중첩된 지시문(예: `@media` 내부) — `@source cannot be nested.`
- 따옴표로 묶이지 않은 경로 — `@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;
```

파일 기반 빌드는 [CLI안내](https://tailwindphp.inline0.dev/ko/docs/cli)를, `@import` 및 가상 모듈 확인은 [가져오기](https://tailwindphp.inline0.dev/ko/docs/usage/imports)를 참고하세요.
