@biggora/claude-plugins 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/package.json +1 -1
- package/registry/registry.json +319 -244
- package/specs/coding.md +24 -0
- package/specs/pod.md +2 -0
- package/src/skills/captcha/README.md +221 -0
- package/src/skills/captcha/SKILL.md +355 -0
- package/src/skills/captcha/references/captcha-types.md +254 -0
- package/src/skills/captcha/references/services.md +172 -0
- package/src/skills/captcha/references/stealth.md +238 -0
- package/src/skills/captcha/scripts/solve_captcha.py +323 -0
- package/src/skills/captcha/scripts/solve_image_grid.py +350 -0
- package/src/skills/google-merchant-api/SKILL.md +581 -0
- package/src/skills/google-merchant-api/references/accounts.md +247 -0
- package/src/skills/google-merchant-api/references/content-api-legacy.md +216 -0
- package/src/skills/google-merchant-api/references/datasources.md +233 -0
- package/src/skills/google-merchant-api/references/inventories.md +201 -0
- package/src/skills/google-merchant-api/references/migration.md +267 -0
- package/src/skills/google-merchant-api/references/products.md +316 -0
- package/src/skills/google-merchant-api/references/promotions.md +201 -0
- package/src/skills/google-merchant-api/references/reports.md +240 -0
- package/src/skills/lv-aggregators-api/SKILL.md +113 -0
- package/src/skills/lv-aggregators-api/references/integration-guide.md +368 -0
- package/src/skills/lv-aggregators-api/references/kurpirkt.md +103 -0
- package/src/skills/lv-aggregators-api/references/salidzini.md +122 -0
- package/src/skills/tailwindcss-best-practices/SKILL.md +180 -0
- package/src/skills/tailwindcss-best-practices/references/best-practices-utility-patterns.md +87 -0
- package/src/skills/tailwindcss-best-practices/references/core-installation.md +109 -0
- package/src/skills/tailwindcss-best-practices/references/core-preflight.md +200 -0
- package/src/skills/tailwindcss-best-practices/references/core-responsive.md +163 -0
- package/src/skills/tailwindcss-best-practices/references/core-source-detection.md +114 -0
- package/src/skills/tailwindcss-best-practices/references/core-theme.md +108 -0
- package/src/skills/tailwindcss-best-practices/references/core-utility-classes.md +59 -0
- package/src/skills/tailwindcss-best-practices/references/core-variants.md +204 -0
- package/src/skills/tailwindcss-best-practices/references/effects-form-controls.md +76 -0
- package/src/skills/tailwindcss-best-practices/references/effects-mask.md +91 -0
- package/src/skills/tailwindcss-best-practices/references/effects-scroll-snap.md +59 -0
- package/src/skills/tailwindcss-best-practices/references/effects-text-shadow.md +78 -0
- package/src/skills/tailwindcss-best-practices/references/effects-transition-animation.md +80 -0
- package/src/skills/tailwindcss-best-practices/references/effects-visibility-interactivity.md +82 -0
- package/src/skills/tailwindcss-best-practices/references/features-content-detection.md +175 -0
- package/src/skills/tailwindcss-best-practices/references/features-custom-styles.md +203 -0
- package/src/skills/tailwindcss-best-practices/references/features-dark-mode.md +137 -0
- package/src/skills/tailwindcss-best-practices/references/features-functions-directives.md +241 -0
- package/src/skills/tailwindcss-best-practices/references/features-upgrade.md +160 -0
- package/src/skills/tailwindcss-best-practices/references/layout-aspect-ratio.md +39 -0
- package/src/skills/tailwindcss-best-practices/references/layout-columns.md +80 -0
- package/src/skills/tailwindcss-best-practices/references/layout-display.md +110 -0
- package/src/skills/tailwindcss-best-practices/references/layout-flexbox.md +112 -0
- package/src/skills/tailwindcss-best-practices/references/layout-grid.md +87 -0
- package/src/skills/tailwindcss-best-practices/references/layout-height.md +97 -0
- package/src/skills/tailwindcss-best-practices/references/layout-inset.md +103 -0
- package/src/skills/tailwindcss-best-practices/references/layout-logical-properties.md +92 -0
- package/src/skills/tailwindcss-best-practices/references/layout-margin.md +126 -0
- package/src/skills/tailwindcss-best-practices/references/layout-min-max-sizing.md +63 -0
- package/src/skills/tailwindcss-best-practices/references/layout-object-fit-position.md +64 -0
- package/src/skills/tailwindcss-best-practices/references/layout-overflow.md +57 -0
- package/src/skills/tailwindcss-best-practices/references/layout-padding.md +77 -0
- package/src/skills/tailwindcss-best-practices/references/layout-position.md +85 -0
- package/src/skills/tailwindcss-best-practices/references/layout-tables.md +67 -0
- package/src/skills/tailwindcss-best-practices/references/layout-width.md +102 -0
- package/src/skills/tailwindcss-best-practices/references/transform-base.md +68 -0
- package/src/skills/tailwindcss-best-practices/references/transform-rotate.md +70 -0
- package/src/skills/tailwindcss-best-practices/references/transform-scale.md +83 -0
- package/src/skills/tailwindcss-best-practices/references/transform-skew.md +62 -0
- package/src/skills/tailwindcss-best-practices/references/transform-translate.md +77 -0
- package/src/skills/tailwindcss-best-practices/references/typography-font-text.md +142 -0
- package/src/skills/tailwindcss-best-practices/references/typography-list-style.md +65 -0
- package/src/skills/tailwindcss-best-practices/references/typography-text-align.md +60 -0
- package/src/skills/tailwindcss-best-practices/references/visual-background.md +76 -0
- package/src/skills/tailwindcss-best-practices/references/visual-border.md +108 -0
- package/src/skills/tailwindcss-best-practices/references/visual-effects.md +111 -0
- package/src/skills/tailwindcss-best-practices/references/visual-svg.md +82 -0
- package/src/skills/test-mobile-app/SKILL.md +11 -6
- package/src/skills/test-mobile-app/scripts/analyze_apk.py +15 -4
- package/src/skills/test-mobile-app/scripts/check_environment.py +5 -5
- package/src/skills/test-mobile-app/scripts/run_tests.py +1 -1
- package/src/skills/test-web-ui/SKILL.md +264 -84
- package/src/skills/test-web-ui/scripts/discover.py +25 -12
- package/src/skills/test-web-ui/scripts/run_tests.py +3 -2
- package/src/skills/vite-best-practices/SKILL.md +115 -0
- package/src/skills/vite-best-practices/references/build-and-ssr.md +255 -0
- package/src/skills/vite-best-practices/references/core-config.md +231 -0
- package/src/skills/vite-best-practices/references/core-features.md +222 -0
- package/src/skills/vite-best-practices/references/core-plugin-api.md +294 -0
- package/src/skills/vite-best-practices/references/environment-api.md +108 -0
- package/src/skills/vite-best-practices/references/rolldown-migration.md +242 -0
- package/codex-cli-workspace/iteration-1/benchmark.json +0 -122
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/outputs/response.md +0 -163
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/grading.json +0 -58
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/outputs/response.md +0 -151
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -86
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -58
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/eval_metadata.json +0 -13
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/grading.json +0 -52
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/outputs/response.md +0 -130
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/grading.json +0 -64
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/outputs/response.md +0 -209
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/timing.json +0 -5
- package/codex-cli-workspace/iteration-1/review.html +0 -1325
- package/gemini-cli-workspace/iteration-1/benchmark.json +0 -86
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/outputs/response.md +0 -401
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/outputs/response.md +0 -405
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -212
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -427
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/eval_metadata.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -171
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -199
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-1/review.html +0 -1325
- package/gemini-cli-workspace/iteration-2/benchmark.json +0 -173
- package/gemini-cli-workspace/iteration-2/benchmark.md +0 -28
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/outputs/response.md +0 -195
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/outputs/response.md +0 -377
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/eval_metadata.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/outputs/response.md +0 -127
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/grading.json +0 -37
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/outputs/response.md +0 -164
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/eval_metadata.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/outputs/response.md +0 -91
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/grading.json +0 -32
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/outputs/response.md +0 -112
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/timing.json +0 -5
- package/gemini-cli-workspace/iteration-2/eval-viewer.html +0 -1325
- package/screen-recording-workspace/evals.json +0 -41
- package/screen-recording-workspace/iteration-1/benchmark.json +0 -102
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/eval_metadata.json +0 -31
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/grading.json +0 -11
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/record_screen.py +0 -67
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/timing.json +0 -5
- package/screen-recording-workspace/iteration-1/review.html +0 -1325
- package/src/skills/codex-cli/evals/evals.json +0 -47
- package/src/skills/gemini-cli/evals/evals.json +0 -46
- package/src/skills/tm-search/evals/evals.json +0 -23
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-form-controls
|
|
3
|
+
description: Form control styling with accent-color, appearance, caret-color, and resize
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Form Controls & Input Styling
|
|
7
|
+
|
|
8
|
+
Utilities for styling form controls: accent color, native appearance, caret color, and resize behavior.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
### Accent color
|
|
13
|
+
|
|
14
|
+
Control the accent color of checkboxes, radio buttons, range inputs, and progress:
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<input type="checkbox" class="accent-pink-500" checked />
|
|
18
|
+
<input type="radio" class="accent-rose-500" name="opt" />
|
|
19
|
+
<input type="range" class="accent-indigo-500" />
|
|
20
|
+
|
|
21
|
+
<!-- Opacity modifier -->
|
|
22
|
+
<input type="checkbox" class="accent-purple-500/75" />
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Appearance
|
|
26
|
+
|
|
27
|
+
Remove native form control styling for custom designs:
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<!-- Custom select with overlay icon -->
|
|
31
|
+
<div class="grid">
|
|
32
|
+
<select class="col-start-1 row-start-1 appearance-none bg-gray-50 ...">
|
|
33
|
+
<option>Yes</option>
|
|
34
|
+
</select>
|
|
35
|
+
<svg class="pointer-events-none col-start-1 row-start-1 ...">...</svg>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Restore default in forced-colors mode (accessibility) -->
|
|
39
|
+
<input type="checkbox" class="appearance-none forced-colors:appearance-auto" />
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Caret color
|
|
43
|
+
|
|
44
|
+
Set the text input cursor color:
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<textarea class="caret-pink-500">Focus to see caret</textarea>
|
|
48
|
+
<input class="caret-blue-500" />
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Resize
|
|
52
|
+
|
|
53
|
+
Control textarea resize behavior:
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<textarea class="resize-y">Vertical only</textarea>
|
|
57
|
+
<textarea class="resize-x">Horizontal only</textarea>
|
|
58
|
+
<textarea class="resize">Both directions</textarea>
|
|
59
|
+
<textarea class="resize-none">No resize handle</textarea>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Key Points
|
|
63
|
+
|
|
64
|
+
- `accent-*` - theme colors for checkboxes, radio, range; use `accent-[#hex]` or `accent-(--var)` for custom
|
|
65
|
+
- `appearance-none` - remove native styling (custom selects, checkboxes)
|
|
66
|
+
- `appearance-auto` - restore default (e.g. for `forced-colors: active`)
|
|
67
|
+
- `caret-*` - theme colors for input cursor; matches text color patterns
|
|
68
|
+
- `resize` - both; `resize-x` - horizontal; `resize-y` - vertical; `resize-none` - no handle
|
|
69
|
+
|
|
70
|
+
<!--
|
|
71
|
+
Source references:
|
|
72
|
+
- https://tailwindcss.com/docs/accent-color
|
|
73
|
+
- https://tailwindcss.com/docs/appearance
|
|
74
|
+
- https://tailwindcss.com/docs/caret-color
|
|
75
|
+
- https://tailwindcss.com/docs/resize
|
|
76
|
+
-->
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-mask
|
|
3
|
+
description: Composable mask utilities added in Tailwind CSS v4.1 — linear gradient masks, radial masks, and positioning
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mask Utilities (v4.1+)
|
|
7
|
+
|
|
8
|
+
Composable mask system for creating fade, reveal, and shape effects. Added in Tailwind CSS v4.1.
|
|
9
|
+
|
|
10
|
+
## Linear Gradient Masks
|
|
11
|
+
|
|
12
|
+
Fade elements from a direction using gradient masks:
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<!-- Fade from top (visible at top, fades to transparent) -->
|
|
16
|
+
<div class="mask-t-from-50%">Content fades from top</div>
|
|
17
|
+
|
|
18
|
+
<!-- Fade from right -->
|
|
19
|
+
<div class="mask-r-from-30%">Content fades from right</div>
|
|
20
|
+
|
|
21
|
+
<!-- Fade from bottom -->
|
|
22
|
+
<div class="mask-b-from-20%">Content fades from bottom</div>
|
|
23
|
+
|
|
24
|
+
<!-- Fade from left -->
|
|
25
|
+
<div class="mask-l-from-40%">Content fades from left</div>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The `from-` value sets where the mask starts becoming transparent.
|
|
29
|
+
|
|
30
|
+
## Radial Masks
|
|
31
|
+
|
|
32
|
+
Create circular or elliptical mask effects:
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<!-- Radial mask with from/to values -->
|
|
36
|
+
<div class="mask-radial-from-70% mask-radial-to-85%">
|
|
37
|
+
Circular fade from center
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<!-- Position the radial mask -->
|
|
41
|
+
<div class="mask-radial-from-50% mask-radial-at-top-left">
|
|
42
|
+
Fade from top-left corner
|
|
43
|
+
</div>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Composing Masks
|
|
47
|
+
|
|
48
|
+
Masks can be composed — multiple mask utilities combine:
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<!-- Fade from both right and bottom -->
|
|
52
|
+
<div class="mask-r-from-80% mask-b-from-80%">
|
|
53
|
+
Fades from both edges
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- Radial mask with directional fade -->
|
|
57
|
+
<div class="mask-radial-from-70% mask-radial-to-85% mask-t-from-50%">
|
|
58
|
+
Complex mask composition
|
|
59
|
+
</div>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Common Patterns
|
|
63
|
+
|
|
64
|
+
### Image with fade-out edges
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<div class="mask-b-from-70% overflow-hidden">
|
|
68
|
+
<img src="/photo.jpg" class="w-full" />
|
|
69
|
+
</div>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Spotlight / vignette effect
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<div class="mask-radial-from-60% mask-radial-to-90%">
|
|
76
|
+
<img src="/hero.jpg" class="w-full" />
|
|
77
|
+
</div>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Key Points
|
|
81
|
+
|
|
82
|
+
- Linear mask directions: `mask-t-*`, `mask-r-*`, `mask-b-*`, `mask-l-*`
|
|
83
|
+
- Radial masks: `mask-radial-from-*`, `mask-radial-to-*`, `mask-radial-at-*`
|
|
84
|
+
- Masks are composable — multiple masks combine together
|
|
85
|
+
- Works with all variants: `hover:mask-b-from-50%`
|
|
86
|
+
- The `from-` percentage controls where the fade begins
|
|
87
|
+
|
|
88
|
+
<!--
|
|
89
|
+
Source references:
|
|
90
|
+
- https://tailwindcss.com/blog/tailwindcss-v4-1
|
|
91
|
+
-->
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-scroll-snap
|
|
3
|
+
description: CSS scroll snap for carousels and scroll containers
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Scroll Snap
|
|
7
|
+
|
|
8
|
+
Utilities for scroll snap behavior in overflow containers. Use for carousels, horizontal galleries, or paged scroll.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
### Container
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<!-- Horizontal snap (carousel) -->
|
|
16
|
+
<div class="snap-x snap-mandatory overflow-x-auto flex gap-4">
|
|
17
|
+
<div class="snap-center shrink-0 w-80">Slide 1</div>
|
|
18
|
+
<div class="snap-center shrink-0 w-80">Slide 2</div>
|
|
19
|
+
<div class="snap-center shrink-0 w-80">Slide 3</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<!-- Vertical snap -->
|
|
23
|
+
<div class="snap-y snap-mandatory overflow-y-auto h-screen">
|
|
24
|
+
<div class="snap-start h-screen">Section 1</div>
|
|
25
|
+
<div class="snap-start h-screen">Section 2</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- Both axes -->
|
|
29
|
+
<div class="snap-both overflow-auto">...</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Strictness
|
|
33
|
+
|
|
34
|
+
- `snap-mandatory` - always rest on a snap point
|
|
35
|
+
- `snap-proximity` - snap only when close to a point (default)
|
|
36
|
+
|
|
37
|
+
### Child alignment
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<div class="snap-x overflow-x-auto">
|
|
41
|
+
<div class="snap-center">Center snap</div>
|
|
42
|
+
<div class="snap-start">Start snap</div>
|
|
43
|
+
<div class="snap-end">End snap</div>
|
|
44
|
+
<div class="snap-align-none">No snap</div>
|
|
45
|
+
</div>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Key Points
|
|
49
|
+
|
|
50
|
+
- `snap-x` - horizontal; `snap-y` - vertical; `snap-both` - both; `snap-none` - disable
|
|
51
|
+
- `snap-mandatory` / `snap-proximity` - strictness
|
|
52
|
+
- Child: `snap-center`, `snap-start`, `snap-end`, `snap-align-none`
|
|
53
|
+
- Requires overflow (e.g. `overflow-x-auto`) and scroll on container
|
|
54
|
+
|
|
55
|
+
<!--
|
|
56
|
+
Source references:
|
|
57
|
+
- https://tailwindcss.com/docs/scroll-snap-type
|
|
58
|
+
- https://tailwindcss.com/docs/scroll-snap-align
|
|
59
|
+
-->
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-text-shadow
|
|
3
|
+
description: Text shadow utilities added in Tailwind CSS v4.1 — sizes, colors, and opacity modifiers
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Text Shadow (v4.1+)
|
|
7
|
+
|
|
8
|
+
Text shadow utilities for adding shadows to text content. Added in Tailwind CSS v4.1.
|
|
9
|
+
|
|
10
|
+
## Sizes
|
|
11
|
+
|
|
12
|
+
Five default sizes:
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<p class="text-shadow-2xs">Extra extra small shadow</p>
|
|
16
|
+
<p class="text-shadow-xs">Extra small shadow</p>
|
|
17
|
+
<p class="text-shadow-sm">Small shadow</p>
|
|
18
|
+
<p class="text-shadow-md">Medium shadow</p>
|
|
19
|
+
<p class="text-shadow-lg">Large shadow</p>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Remove text shadow:
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<p class="text-shadow-none">No shadow</p>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Colors
|
|
29
|
+
|
|
30
|
+
Apply a color to the text shadow:
|
|
31
|
+
|
|
32
|
+
```html
|
|
33
|
+
<p class="text-shadow-lg text-shadow-blue-500">Blue shadow</p>
|
|
34
|
+
<p class="text-shadow-md text-shadow-gray-900">Dark shadow</p>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Opacity Modifiers
|
|
38
|
+
|
|
39
|
+
Control shadow opacity with the slash modifier:
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<p class="text-shadow-lg/50">50% opacity shadow</p>
|
|
43
|
+
<p class="text-shadow-md text-shadow-sky-300/25">Sky shadow at 25%</p>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Common Patterns
|
|
47
|
+
|
|
48
|
+
### Readable text over images
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<div class="relative">
|
|
52
|
+
<img src="/hero.jpg" class="w-full" />
|
|
53
|
+
<h1 class="absolute text-white text-shadow-lg text-shadow-black/50">
|
|
54
|
+
Hero Title
|
|
55
|
+
</h1>
|
|
56
|
+
</div>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Subtle heading enhancement
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<h2 class="text-4xl font-bold text-shadow-sm text-shadow-gray-300">
|
|
63
|
+
Section Title
|
|
64
|
+
</h2>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Key Points
|
|
68
|
+
|
|
69
|
+
- Text shadows are separate from box shadows (`shadow-*`)
|
|
70
|
+
- Size and color are independent utilities that combine
|
|
71
|
+
- Opacity modifier goes on the size: `text-shadow-lg/50`
|
|
72
|
+
- Use `text-shadow-none` to remove shadows
|
|
73
|
+
- Works with all variants: `hover:text-shadow-lg`, `dark:text-shadow-md`
|
|
74
|
+
|
|
75
|
+
<!--
|
|
76
|
+
Source references:
|
|
77
|
+
- https://tailwindcss.com/blog/tailwindcss-v4-1
|
|
78
|
+
-->
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-transition-animation
|
|
3
|
+
description: CSS transitions, animation keyframes, and reduced motion support
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Transition & Animation
|
|
7
|
+
|
|
8
|
+
Utilities for CSS transitions and animations.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
### Transition property
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<button class="transition hover:bg-blue-600">Transitions common properties</button>
|
|
16
|
+
<button class="transition-all hover:scale-110">All properties</button>
|
|
17
|
+
<button class="transition-colors hover:bg-indigo-500">Colors only</button>
|
|
18
|
+
<button class="transition-opacity hover:opacity-75">Opacity only</button>
|
|
19
|
+
<button class="transition-transform hover:translate-y-1">Transform only</button>
|
|
20
|
+
<button class="transition-none">No transition</button>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Transition duration and delay
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<button class="transition duration-150">150ms (default)</button>
|
|
27
|
+
<button class="transition duration-300">300ms</button>
|
|
28
|
+
<button class="transition duration-500">500ms</button>
|
|
29
|
+
<button class="transition delay-150">Delay 150ms</button>
|
|
30
|
+
<button class="transition duration-300 delay-100">Both</button>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Transition timing
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<button class="transition ease-linear">Linear</button>
|
|
37
|
+
<button class="transition ease-in">Ease in</button>
|
|
38
|
+
<button class="transition ease-out">Ease out</button>
|
|
39
|
+
<button class="transition ease-in-out">Ease in-out (default)</button>
|
|
40
|
+
<button class="transition ease-[cubic-bezier(0.4,0,0.2,1)]">Arbitrary</button>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Animation keyframes
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<div class="animate-spin">Spinning</div>
|
|
47
|
+
<div class="animate-ping">Ping effect</div>
|
|
48
|
+
<div class="animate-pulse">Pulse</div>
|
|
49
|
+
<div class="animate-bounce">Bounce</div>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Built-in: `animate-spin`, `animate-ping`, `animate-pulse`, `animate-bounce`. Use `@keyframes` in custom CSS for more.
|
|
53
|
+
|
|
54
|
+
### Reduced motion
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<button class="transition hover:-translate-y-1 motion-reduce:transition-none motion-reduce:hover:translate-y-0">
|
|
58
|
+
Respects prefers-reduced-motion
|
|
59
|
+
</button>
|
|
60
|
+
<div class="animate-spin motion-reduce:animate-none">Spinner hidden when reduced motion</div>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Use `motion-reduce:` to disable or simplify animations when user prefers reduced motion.
|
|
64
|
+
|
|
65
|
+
## Key Points
|
|
66
|
+
|
|
67
|
+
- Transition: `transition`, `transition-all`, `transition-colors`, `transition-opacity`, `transition-transform`
|
|
68
|
+
- Duration: `duration-{75,100,150,200,300,500,700,1000}`
|
|
69
|
+
- Delay: `delay-{75,100,150,200,300,500,700,1000}`
|
|
70
|
+
- Timing: `ease-{linear,in,in-out,out}`
|
|
71
|
+
- Animation: `animate-spin`, `animate-ping`, `animate-pulse`, `animate-bounce`
|
|
72
|
+
- Always consider `motion-reduce:` for accessibility
|
|
73
|
+
|
|
74
|
+
<!--
|
|
75
|
+
Source references:
|
|
76
|
+
- https://tailwindcss.com/docs/transition-property
|
|
77
|
+
- https://tailwindcss.com/docs/transition-duration
|
|
78
|
+
- https://tailwindcss.com/docs/transition-timing-function
|
|
79
|
+
- https://tailwindcss.com/docs/animation
|
|
80
|
+
-->
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: effects-visibility-interactivity
|
|
3
|
+
description: Visibility, cursor, pointer-events, user-select, and z-index
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Visibility & Interactivity
|
|
7
|
+
|
|
8
|
+
Utilities for visibility, cursor, pointer-events, user-select, and stacking.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
### Visibility
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<div class="visible">Visible (default)</div>
|
|
16
|
+
<div class="invisible">Hidden but in layout</div>
|
|
17
|
+
<div class="collapse">Table collapse</div>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Use `invisible` when you need to keep layout space; use `hidden` (display:none) to remove from flow.
|
|
21
|
+
|
|
22
|
+
### Cursor
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<button class="cursor-pointer">Pointer</button>
|
|
26
|
+
<div class="cursor-not-allowed">Disabled</div>
|
|
27
|
+
<div class="cursor-wait">Loading</div>
|
|
28
|
+
<div class="cursor-move">Draggable</div>
|
|
29
|
+
<div class="cursor-grab">Grab</div>
|
|
30
|
+
<div class="cursor-grabbing">Grabbing</div>
|
|
31
|
+
<div class="cursor-text">Text select</div>
|
|
32
|
+
<div class="cursor-default">Default</div>
|
|
33
|
+
<div class="cursor-none">No cursor</div>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Pointer events
|
|
37
|
+
|
|
38
|
+
```html
|
|
39
|
+
<div class="pointer-events-none">Ignore all pointer events</div>
|
|
40
|
+
<div class="pointer-events-auto">Default behavior</div>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Useful for overlays: make overlay `pointer-events-none` so clicks pass through, or `pointer-events-none` on disabled elements.
|
|
44
|
+
|
|
45
|
+
### User select
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<p class="select-none">Cannot select</p>
|
|
49
|
+
<p class="select-text">Select text (default)</p>
|
|
50
|
+
<p class="select-all">Select all on click</p>
|
|
51
|
+
<p class="select-auto">Browser default</p>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Z-index
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<div class="z-0">0</div>
|
|
58
|
+
<div class="z-10">10</div>
|
|
59
|
+
<div class="z-20">20</div>
|
|
60
|
+
<div class="z-50">50</div>
|
|
61
|
+
<div class="z-auto">Auto</div>
|
|
62
|
+
<div class="z-[100]">Arbitrary</div>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Common: `z-0` (base), `z-10` (dropdowns), `z-20` (fixed nav), `z-50` (modal), `z-40` (overlay).
|
|
66
|
+
|
|
67
|
+
## Key Points
|
|
68
|
+
|
|
69
|
+
- Visibility: `visible`, `invisible`, `collapse`
|
|
70
|
+
- Cursor: `cursor-{pointer,not-allowed,wait,move,grab,text,default,none}`
|
|
71
|
+
- Pointer events: `pointer-events-none`, `pointer-events-auto`
|
|
72
|
+
- User select: `select-none`, `select-text`, `select-all`
|
|
73
|
+
- Z-index: `z-{0,10,20,30,40,50,auto}`, `z-[n]`
|
|
74
|
+
|
|
75
|
+
<!--
|
|
76
|
+
Source references:
|
|
77
|
+
- https://tailwindcss.com/docs/visibility
|
|
78
|
+
- https://tailwindcss.com/docs/cursor
|
|
79
|
+
- https://tailwindcss.com/docs/pointer-events
|
|
80
|
+
- https://tailwindcss.com/docs/user-select
|
|
81
|
+
- https://tailwindcss.com/docs/z-index
|
|
82
|
+
-->
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: features-content-detection
|
|
3
|
+
description: How Tailwind detects classes in source files and how to customize content scanning
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Detecting Classes in Source Files
|
|
7
|
+
|
|
8
|
+
Tailwind scans your project for utility classes and generates CSS based on what you've actually used.
|
|
9
|
+
|
|
10
|
+
## How Classes Are Detected
|
|
11
|
+
|
|
12
|
+
Tailwind treats all source files as plain text and looks for tokens that could be class names:
|
|
13
|
+
|
|
14
|
+
```jsx
|
|
15
|
+
export function Button({ color, children }) {
|
|
16
|
+
const colors = {
|
|
17
|
+
black: "bg-black text-white",
|
|
18
|
+
blue: "bg-blue-500 text-white",
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<button className={`${colors[color]} rounded-full px-2 py-1.5`}>
|
|
23
|
+
{children}
|
|
24
|
+
</button>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Tailwind detects `bg-black`, `text-white`, `bg-blue-500`, `rounded-full`, `px-2`, and `py-1.5` from this file.
|
|
30
|
+
|
|
31
|
+
## Dynamic Class Names
|
|
32
|
+
|
|
33
|
+
Tailwind scans files as plain text, so it can't understand string concatenation or interpolation.
|
|
34
|
+
|
|
35
|
+
### ❌ Don't Construct Classes Dynamically
|
|
36
|
+
|
|
37
|
+
```html
|
|
38
|
+
<div class="text-{{ error ? 'red' : 'green' }}-600"></div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The strings `text-red-600` and `text-green-600` don't exist in the file, so Tailwind won't generate them.
|
|
42
|
+
|
|
43
|
+
### ✅ Use Complete Class Names
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<div class="{{ error ? 'text-red-600' : 'text-green-600' }}">
|
|
47
|
+
Content
|
|
48
|
+
</div>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### ❌ Don't Build Classes from Props
|
|
52
|
+
|
|
53
|
+
```jsx
|
|
54
|
+
function Button({ color, children }) {
|
|
55
|
+
return <button className={`bg-${color}-600 hover:bg-${color}-500`}>{children}</button>;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### ✅ Map Props to Static Classes
|
|
60
|
+
|
|
61
|
+
```jsx
|
|
62
|
+
function Button({ color, children }) {
|
|
63
|
+
const colorVariants = {
|
|
64
|
+
blue: "bg-blue-600 hover:bg-blue-500",
|
|
65
|
+
red: "bg-red-600 hover:bg-red-500",
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return <button className={`${colorVariants[color]} ...`}>{children}</button>;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Which Files Are Scanned
|
|
73
|
+
|
|
74
|
+
Tailwind scans every file in your project except:
|
|
75
|
+
|
|
76
|
+
- Files in `.gitignore`
|
|
77
|
+
- Files in `node_modules`
|
|
78
|
+
- Binary files (images, videos, zip files)
|
|
79
|
+
- CSS files
|
|
80
|
+
- Common package manager lock files
|
|
81
|
+
|
|
82
|
+
## Explicitly Registering Sources
|
|
83
|
+
|
|
84
|
+
Use `@source` to explicitly register source paths:
|
|
85
|
+
|
|
86
|
+
```css
|
|
87
|
+
@import "tailwindcss";
|
|
88
|
+
@source "../node_modules/@acmecorp/ui-lib";
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
This is useful for external libraries built with Tailwind that are in `.gitignore`.
|
|
92
|
+
|
|
93
|
+
## Setting Base Path
|
|
94
|
+
|
|
95
|
+
Set the base path for source detection:
|
|
96
|
+
|
|
97
|
+
```css
|
|
98
|
+
@import "tailwindcss" source("../src");
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Useful in monorepos where build commands run from the root.
|
|
102
|
+
|
|
103
|
+
## Ignoring Specific Paths
|
|
104
|
+
|
|
105
|
+
Use `@source not` to ignore paths:
|
|
106
|
+
|
|
107
|
+
```css
|
|
108
|
+
@import "tailwindcss";
|
|
109
|
+
@source not "../src/components/legacy";
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Disabling Automatic Detection
|
|
113
|
+
|
|
114
|
+
Use `source(none)` to disable automatic detection:
|
|
115
|
+
|
|
116
|
+
```css
|
|
117
|
+
@import "tailwindcss" source(none);
|
|
118
|
+
|
|
119
|
+
@source "../admin";
|
|
120
|
+
@source "../shared";
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Useful for projects with multiple Tailwind stylesheets.
|
|
124
|
+
|
|
125
|
+
## Safelisting Utilities
|
|
126
|
+
|
|
127
|
+
Force Tailwind to generate specific classes with `@source inline()`:
|
|
128
|
+
|
|
129
|
+
```css
|
|
130
|
+
@import "tailwindcss";
|
|
131
|
+
@source inline("underline");
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Safelisting with Variants
|
|
135
|
+
|
|
136
|
+
Generate classes with variants:
|
|
137
|
+
|
|
138
|
+
```css
|
|
139
|
+
@import "tailwindcss";
|
|
140
|
+
@source inline("{hover:,focus:,}underline");
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Safelisting with Ranges
|
|
144
|
+
|
|
145
|
+
Use brace expansion to generate multiple classes:
|
|
146
|
+
|
|
147
|
+
```css
|
|
148
|
+
@import "tailwindcss";
|
|
149
|
+
@source inline("{hover:,}bg-red-{50,{100..900..100},950}");
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
This generates `bg-red-50` through `bg-red-950` with hover variants.
|
|
153
|
+
|
|
154
|
+
## Explicitly Excluding Classes
|
|
155
|
+
|
|
156
|
+
Use `@source not inline()` to prevent specific classes from being generated:
|
|
157
|
+
|
|
158
|
+
```css
|
|
159
|
+
@import "tailwindcss";
|
|
160
|
+
@source not inline("{hover:,focus:,}bg-red-{50,{100..900..100},950}");
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Key Points
|
|
164
|
+
|
|
165
|
+
- Tailwind scans files as plain text
|
|
166
|
+
- Always use complete class names, never construct them dynamically
|
|
167
|
+
- Map props/state to static class names
|
|
168
|
+
- Use `@source` to explicitly register or ignore paths
|
|
169
|
+
- Use `@source inline()` to safelist utilities
|
|
170
|
+
- Brace expansion works in inline sources for ranges
|
|
171
|
+
|
|
172
|
+
<!--
|
|
173
|
+
Source references:
|
|
174
|
+
- https://tailwindcss.com/docs/detecting-classes-in-source-files
|
|
175
|
+
-->
|