out
dist
node_modules
.vscode-test/
.vscode-test-web/
*.vsix
data/
.yarn/
*.nii*
*.mz3
*.mnc*
static/
images/
.pnpm-store/

# Build artifacts
*.timestamp-*.mjs
tsconfig.tsbuildinfo
.tsbuildinfo
.turbo/
__pycache__
build_log.json
*.orig
*.js.map
.webpack-cache/

# Lint cache files
.eslintcache
.stylelintcache

# Generated directories
lib/
dist/
static/
build/
apps/vscode/niivue/

# Tauri Rust build output
apps/desktop-tauri/src-tauri/target/
apps/desktop-tauri/src-tauri/gen/

# VS Code extension generated files
apps/vscode/vscode-styles.css

# App icons. Everything is generated from the single committed master
# branding/niivue-icon.png (see scripts/generate-icons.mjs). Run
# `pnpm generate:icons` (+ `pnpm generate:icons:tauri` for the desktop bundle).
apps/vscode/icon.png
apps/vscode/language-icon.png
apps/jupyter/style/niivue-icon.png
apps/desktop-tauri/src-tauri/icons/

# PWA generated public assets: logo.png + favicons, pwa-*, apple-touch-*,
# maskable-* (logo.png from generate-icons.mjs, the rest from
# @vite-pwa/assets-generator, all at build time).
apps/pwa/public/*

# Python packaging
*.egg-info/
*.pyc

# JupyterLab extension build output
**/labextension/
**/.ipynb_checkpoints
_version.py


# Pre-release encoder transient output
prerelease-targets.json
changeset-status.json

# Test artifacts
test-results/
playwright-report/
coverage/

# Exception: keep the coverage aggregation script
!scripts/coverage/

# Individual package lockfiles (use root pnpm-lock.yaml only)
**/package-lock.json
**/yarn.lock
**/pnpm-lock.yaml
!pnpm-lock.yaml

# Claude Code session metadata (worktrees, memory, jobs)
.claude/
