tailwind-styled-v4 5.0.8 → 5.0.10

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.
Files changed (140) hide show
  1. package/CHANGELOG.md +204 -416
  2. package/README.md +45 -15
  3. package/dist/{analyzeWorkspace-DuJKh7Ty.d.mts → analyzeWorkspace-BS5O4rhC.d.mts} +47 -2
  4. package/dist/{analyzeWorkspace-Ct_NTAWt.d.ts → analyzeWorkspace-DDOQdzzI.d.ts} +47 -2
  5. package/dist/analyzer.d.mts +5 -3
  6. package/dist/analyzer.d.ts +5 -3
  7. package/dist/analyzer.js +563 -468
  8. package/dist/analyzer.js.map +1 -1
  9. package/dist/analyzer.mjs +562 -467
  10. package/dist/analyzer.mjs.map +1 -1
  11. package/dist/animate.d.mts +4 -7
  12. package/dist/animate.d.ts +4 -7
  13. package/dist/animate.js +171 -265
  14. package/dist/animate.js.map +1 -1
  15. package/dist/animate.mjs +165 -264
  16. package/dist/animate.mjs.map +1 -1
  17. package/dist/atomic.d.mts +22 -1
  18. package/dist/atomic.d.ts +22 -1
  19. package/dist/atomic.js +221 -165
  20. package/dist/atomic.js.map +1 -1
  21. package/dist/atomic.mjs +200 -165
  22. package/dist/atomic.mjs.map +1 -1
  23. package/dist/cli.d.mts +60 -1
  24. package/dist/cli.d.ts +60 -1
  25. package/dist/cli.js +1261 -1517
  26. package/dist/cli.js.map +1 -1
  27. package/dist/cli.mjs +1238 -1513
  28. package/dist/cli.mjs.map +1 -1
  29. package/dist/compiler.d.mts +38 -7
  30. package/dist/compiler.d.ts +38 -7
  31. package/dist/compiler.js +174 -197
  32. package/dist/compiler.js.map +1 -1
  33. package/dist/compiler.mjs +151 -194
  34. package/dist/compiler.mjs.map +1 -1
  35. package/dist/devtools.js +7 -31
  36. package/dist/devtools.js.map +1 -1
  37. package/dist/devtools.mjs +7 -31
  38. package/dist/devtools.mjs.map +1 -1
  39. package/dist/engine.d.mts +134 -63
  40. package/dist/engine.d.ts +134 -63
  41. package/dist/engine.js +2863 -2482
  42. package/dist/engine.js.map +1 -1
  43. package/dist/engine.mjs +2852 -2485
  44. package/dist/engine.mjs.map +1 -1
  45. package/dist/{index-eWAocnD2.d.mts → index-NDINUhLN.d.mts} +3 -1
  46. package/dist/{index-eWAocnD2.d.ts → index-NDINUhLN.d.ts} +3 -1
  47. package/dist/index.d.mts +63 -32
  48. package/dist/index.d.ts +63 -32
  49. package/dist/index.js +335 -169
  50. package/dist/index.js.map +1 -1
  51. package/dist/index.mjs +315 -169
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/{liveTokenEngine-DSUk88P6.d.ts → liveTokenEngine-CN9ian1R.d.ts} +1 -1
  54. package/dist/{liveTokenEngine-CX5_0c4q.d.mts → liveTokenEngine-DKoWRtqH.d.mts} +1 -1
  55. package/dist/next.d.mts +10 -4
  56. package/dist/next.d.ts +10 -4
  57. package/dist/next.js +32 -45
  58. package/dist/next.js.map +1 -1
  59. package/dist/next.mjs +30 -43
  60. package/dist/next.mjs.map +1 -1
  61. package/dist/plugin-api.d.mts +8 -2
  62. package/dist/plugin-api.d.ts +8 -2
  63. package/dist/plugin-api.js +14 -2
  64. package/dist/plugin-api.js.map +1 -1
  65. package/dist/plugin-api.mjs +14 -3
  66. package/dist/plugin-api.mjs.map +1 -1
  67. package/dist/plugin-registry.js +51 -11
  68. package/dist/plugin-registry.js.map +1 -1
  69. package/dist/plugin-registry.mjs +51 -11
  70. package/dist/plugin-registry.mjs.map +1 -1
  71. package/dist/plugin.d.mts +5 -7
  72. package/dist/plugin.d.ts +5 -7
  73. package/dist/plugin.js +16 -15
  74. package/dist/plugin.js.map +1 -1
  75. package/dist/plugin.mjs +16 -16
  76. package/dist/plugin.mjs.map +1 -1
  77. package/dist/rspack.js +17 -38
  78. package/dist/rspack.js.map +1 -1
  79. package/dist/rspack.mjs +15 -36
  80. package/dist/rspack.mjs.map +1 -1
  81. package/dist/runtime.d.mts +2 -2
  82. package/dist/runtime.d.ts +2 -2
  83. package/dist/scanner.d.mts +10 -1
  84. package/dist/scanner.d.ts +10 -1
  85. package/dist/scanner.js +298 -124
  86. package/dist/scanner.js.map +1 -1
  87. package/dist/scanner.mjs +296 -124
  88. package/dist/scanner.mjs.map +1 -1
  89. package/dist/shared.d.mts +1 -1
  90. package/dist/shared.d.ts +1 -1
  91. package/dist/shared.js +104 -176
  92. package/dist/shared.js.map +1 -1
  93. package/dist/shared.mjs +85 -176
  94. package/dist/shared.mjs.map +1 -1
  95. package/dist/storybook-addon.d.mts +1 -1
  96. package/dist/storybook-addon.d.ts +1 -1
  97. package/dist/svelte.d.mts +1 -1
  98. package/dist/svelte.d.ts +1 -1
  99. package/dist/svelte.js +166 -3
  100. package/dist/svelte.js.map +1 -1
  101. package/dist/svelte.mjs +143 -1
  102. package/dist/svelte.mjs.map +1 -1
  103. package/dist/syntax.js +21 -21
  104. package/dist/syntax.js.map +1 -1
  105. package/dist/syntax.mjs +21 -21
  106. package/dist/syntax.mjs.map +1 -1
  107. package/dist/testing.js +9 -1
  108. package/dist/testing.js.map +1 -1
  109. package/dist/testing.mjs +9 -1
  110. package/dist/testing.mjs.map +1 -1
  111. package/dist/theme.d.mts +2 -2
  112. package/dist/theme.d.ts +2 -2
  113. package/dist/theme.js +40 -112
  114. package/dist/theme.js.map +1 -1
  115. package/dist/theme.mjs +37 -110
  116. package/dist/theme.mjs.map +1 -1
  117. package/dist/turbopackLoader.js +84 -126
  118. package/dist/turbopackLoader.js.map +1 -1
  119. package/dist/turbopackLoader.mjs +68 -124
  120. package/dist/turbopackLoader.mjs.map +1 -1
  121. package/dist/tw.js +1256 -1517
  122. package/dist/tw.js.map +1 -1
  123. package/dist/tw.mjs +1236 -1513
  124. package/dist/tw.mjs.map +1 -1
  125. package/dist/vite.js +1783 -823
  126. package/dist/vite.js.map +1 -1
  127. package/dist/vite.mjs +1767 -821
  128. package/dist/vite.mjs.map +1 -1
  129. package/dist/vue.d.mts +1 -1
  130. package/dist/vue.d.ts +1 -1
  131. package/dist/vue.js +165 -4
  132. package/dist/vue.js.map +1 -1
  133. package/dist/vue.mjs +141 -1
  134. package/dist/vue.mjs.map +1 -1
  135. package/dist/webpackLoader.js +69 -108
  136. package/dist/webpackLoader.js.map +1 -1
  137. package/dist/webpackLoader.mjs +49 -104
  138. package/dist/webpackLoader.mjs.map +1 -1
  139. package/native/tailwind-styled-native.node +0 -0
  140. package/package.json +22 -24
package/CHANGELOG.md CHANGED
@@ -1,497 +1,285 @@
1
1
  # Changelog
2
2
 
3
- ## [4.5.0-alpha.1] - 2026-04-18
3
+ Semua perubahan signifikan pada project ini didokumentasikan di file ini.
4
4
 
5
- ### 🚀 Performance (Rust Native)
5
+ ---
6
6
 
7
- - **10x faster** variant resolution via `resolve_variants` in Rust
8
- - **20-50x faster** class deduplication via `normalizeAndDedupClasses` in Rust
9
- - **30x faster** class parsing via `parseClasses` in Rust
7
+ ## [5.0.6-canary] 2026-04-29
10
8
 
11
- ### 🛡️ Reliability System
9
+ > Rilis canary terkini. Versi ini mencerminkan state aktual dari source code.
12
10
 
13
- - Health check monitoring for native bridge
14
- - Auto-fallback with exponential backoff
15
- - Telemetry with Prometheus/JSON/Console exporters
16
- - Clear error messages if native binary missing
11
+ ### ⚠️ Breaking Changes
17
12
 
18
- ### 🧪 Testing & Quality
13
+ ### CI/CD Consolidation
14
+ - **Removed legacy workflows**: `build-matrix.yml`, `compat-matrix.yml`, `example-next-app.yml`, `plugin-registry-benchmark.yml`, `plugin-registry-test.yml`, `publish-benchmark.yml`, `quality.yml`, `release-candidate-gate.yml`, `rust-parser-regression.yml`, `scale-benchmark.yml`, `test-coverage.yml`
15
+ - **New unified CI**: All CI/CD functionality consolidated into `ci.yml`
16
+ - **New release workflow**: `release-candidate.yml` replaces `release-candidate-gate.yml`
17
+ - **Updated workflows**: `benchmark.yml`, `dependencies.yml`, `publish-alpha.yml`, `publish.yml`
18
+
19
+ ### Build Configuration
20
+ - `native/Cargo.lock` is now tracked for reproducible native builds
21
+ - `package-lock.json` added to root for consistent npm dependency management
22
+ - Removed temporary clippy output files (`native/clippy-final.txt`, `native/clippy-warnings.txt`)
23
+ - `examples/next-js-app/package-lock.json` now tracked
24
+
25
+ ### 📦 Packages (26 total)
26
+
27
+ | Domain | Package |
28
+ |---|---|
29
+ | Core | `@tailwind-styled/core`, `@tailwind-styled/runtime`, `@tailwind-styled/shared` |
30
+ | Compiler | `@tailwind-styled/compiler`, `@tailwind-styled/syntax`, `@tailwind-styled/atomic` |
31
+ | Build | `@tailwind-styled/engine`, `@tailwind-styled/scanner`, `@tailwind-styled/analyzer` |
32
+ | Adapters | `@tailwind-styled/next`, `@tailwind-styled/vite`, `@tailwind-styled/rspack` |
33
+ | Styling | `@tailwind-styled/animate`, `@tailwind-styled/theme`, `@tailwind-styled/preset`, `@tailwind-styled/runtime-css` |
34
+ | Plugins | `@tailwind-styled/plugin`, `@tailwind-styled/plugin-api`, `@tailwind-styled/plugin-registry` |
35
+ | Infra | `@tailwind-styled/dashboard`, `@tailwind-styled/devtools`, `@tailwind-styled/studio-desktop` |
36
+ | Framework | `@tailwind-styled/vue`, `@tailwind-styled/svelte` |
37
+ | DX | `@tailwind-styled/testing`, `@tailwind-styled/storybook-addon` |
38
+
39
+ ### 🦀 Rust Native Engine
40
+
41
+ - **92 NAPI functions** tersedia via `napi-rs` — scan, cache, parse, normalize, diff, analyze, minify, lint
42
+ - **137 Rust `pub fn`** di `native/src/` — termasuk internal helpers
43
+ - **LightningCSS** sebagai post-processor: minify, vendor prefix, dead-code strip
44
+ - Pipeline: `Tailwind JS compile()` → `Rust processTailwindCssLightning()` → final CSS
45
+ - Persistent DashMap cache — cold start scan `<10ms`, incremental `~0ms`
46
+ - `callOptional` pattern — native-first, JS fallback jika binary tidak tersedia
47
+
48
+ ### 🧪 Testing
49
+
50
+ - **52 test files**, **675+ test cases** total
51
+ - Coverage: core, compiler, engine, scanner, analyzer, adapter Next/Vite/Rspack, Vue, Svelte, testing utils, storybook-addon, theme, animate, plugin-registry, CLI, devtools, dashboard
52
+ - `packages/domain/testing/` — custom matchers: `expectClasses()`, `expectEngineMetrics()`, `toHaveEngineMetrics()`, `expandVariantMatrix()`
53
+ - Test pipeline: Vitest + `.mjs` integration tests
54
+
55
+ ### ✅ Resolved (vs styled-components)
56
+
57
+ | Kekurangan styled-components | Status |
58
+ |---|---|
59
+ | Runtime overhead ~15KB | ✅ ~4.5KB runtime, CSS di-extract build time |
60
+ | SSR complexity (`ServerStyleSheet`) | ✅ Tidak diperlukan — RSC entries dikecualikan dari loader otomatis |
61
+ | Class name tidak deterministik | ✅ Pakai Tailwind class asli langsung, zero hash |
62
+ | RSC tidak support | ✅ `tw.server.*` namespace + auto RSC boundary detection di loader |
63
+ | TypeScript verbose (`$prop`) | ✅ Variants API di config object, generics otomatis |
64
+ | Tidak tree-shakeable | ✅ DSE (Dead Style Eliminator) terintegrasi di pipeline |
65
+
66
+ ### ⚠️ Catatan
67
+
68
+ - `stateEngine.ts` menggunakan runtime `<style>` injection di dev mode / fallback — tidak aktif di production build
69
+ - `TW_MAP` di `stateEngine.ts` hanya dipakai saat compiler tidak tersedia (`TWS_NO_NATIVE=1`) — tidak relevan di production
70
+ - E2E tests belum ada — 52 test files semuanya unit/integration level
71
+ - HMR belum ada di adapter Next.js (sudah ada di Vite)
19
72
 
20
- - Integration tests for all core functions
21
- - Unit tests for health check & telemetry
22
- - Benchmark suite for performance regression
73
+ ---
23
74
 
24
- ### ⚠️ Breaking Changes
75
+ ## [4.5.0-alpha.1] 2026-04-18
25
76
 
26
- - **JS fallbacks removed** - Native binary is now required
27
- - Run `npx tw setup` after installation
77
+ ### 🚀 Performance (Rust Native)
28
78
 
29
- ### 📊 Benchmark Results
79
+ - **10x** variant resolution via `resolve_variants` di Rust
80
+ - **23x** class deduplication via `normalizeAndDedupClasses` di Rust
81
+ - **30x** class parsing via `parseClasses` di Rust
30
82
 
31
- | Operation | v4.4 (JS) | v4.5 (Rust) | Improvement |
32
- |-----------|-----------|-------------|-------------|
33
- | Variant resolution | 0.52ms | 0.048ms | **10.8x** |
34
- | Class deduplication | 2.1ms | 0.09ms | **23.3x** |
35
- | Class parsing | 3.0ms | 0.10ms | **30x** |
83
+ ### 🛡️ Reliability
36
84
 
37
- ---
85
+ - Health check monitoring untuk native bridge
86
+ - Auto-fallback dengan exponential backoff
87
+ - Telemetry: Prometheus / JSON / Console exporters
88
+ - Error message jelas jika native binary tidak ditemukan
38
89
 
39
- ## v4.5.0 Sprint 6–10 Platform Overhaul (2026-03-21)
90
+ ### 🧪 Testing & Quality
40
91
 
41
- ### Sprint 6 Error Handling & Logging
92
+ - Integration tests untuk semua core functions
93
+ - Unit tests untuk health check & telemetry
94
+ - Benchmark suite untuk performance regression
42
95
 
43
- #### Rust (`native/src/lib.rs`)
44
- - `cache_read` return type diubah dari `CacheReadResult` → `napi::Result<CacheReadResult>` — error file tidak bisa dibaca sekarang dipropagasi ke JS dengan pesan deskriptif
45
- - `scan_workspace` sudah return `napi::Result` — error directory tidak ditemukan langsung dilempar ke JS
96
+ ### ⚠️ Breaking
46
97
 
47
- #### Scanner (`packages/domain/scanner/src/index.ts`)
48
- - Hapus `debugScanner()` dan `isDebugEnabled()` yang tersebar — ganti dengan `createLogger("scanner")` dari `@tailwind-styled/shared`
49
- - Cache HIT/MISS/write-fail sekarang semua melalui `log.debug()` — terkontrol via `TWS_LOG_LEVEL`
98
+ - JS fallbacks dihapus — native binary sekarang required
99
+ - Jalankan `npx tw setup` setelah install
50
100
 
51
- #### Engine (`packages/domain/engine/src/index.ts`)
52
- - Plugin `onError` hook dipanggil sebelum error dipropagasi — plugin tidak bisa crash engine
53
- - `watch()` emit event `{ type: "error" }` saat watcher atau transform gagal
101
+ ### 📊 Benchmark
54
102
 
55
- #### Shared Logger (`packages/domain/shared/src/logger.ts`)
56
- - Sudah support `TWS_LOG_LEVEL=debug|info|warn|error|silent`
57
- - `TWS_DEBUG_SCANNER=1` sebagai shorthand untuk debug scanner
103
+ | Operasi | v4.4 (JS) | v4.5 (Rust) | Peningkatan |
104
+ |---|---|---|---|
105
+ | Variant resolution | 0.52ms | 0.048ms | **10.8×** |
106
+ | Class deduplication | 2.1ms | 0.09ms | **23.3×** |
107
+ | Class parsing | 3.0ms | 0.10ms | **30×** |
58
108
 
59
109
  ---
60
110
 
61
- ### Sprint 7Platform Adapters
111
+ ## [4.5.0] — Sprint 6–10 Platform Overhaul 2026-03-21
62
112
 
63
- #### Next.js (`packages/presentation/next/tsup.config.ts`)
64
- - Hapus `@tailwind-styled/compiler` dan `@tailwind-styled/plugin` dari `external`
65
- - Tambah `noExternal` agar compiler di-bundle inline ke adapter
66
- - `esbuildOptions` skip `*.node` native binaries Tailwind v4
113
+ ### Sprint 6 — Error Handling & Logging
67
114
 
68
- #### Vite (`packages/presentation/vite/tsup.config.ts`, `src/plugin.ts`)
69
- - Hapus `@tailwind-styled/compiler`, `engine`, `scanner` dari `external`
70
- - Tambah `noExternal` untuk semua internal packages
71
- - `preserveImports: true` di `loaderOptions` transform hook
115
+ - `cache_read` dan `scan_workspace` sekarang return `napi::Result` — error dipropagasi ke JS dengan pesan deskriptif
116
+ - Scanner logging terpusat via `createLogger("scanner")` dari `@tailwind-styled/shared`
117
+ - Cache HIT/MISS/write-fail dikontrol via `TWS_LOG_LEVEL`
118
+ - Plugin `onError` hook dipanggil sebelum error propagasi — plugin tidak bisa crash engine
119
+ - `watch()` emit `{ type: "error" }` saat watcher atau transform gagal
120
+ - `TWS_LOG_LEVEL=debug|info|warn|error|silent` + `TWS_DEBUG_SCANNER=1`
72
121
 
73
- #### Rspack (`packages/presentation/rspack/tsup.config.ts`file baru, `src/loader.ts`)
74
- - Buat `tsup.config.ts` dari scratch
75
- - `noExternal: ["@tailwind-styled/compiler"]`
76
- - `preserveImports: true` di `runLoaderTransform` call
122
+ ### Sprint 7Platform Adapters
77
123
 
78
- #### Semua Loaders
79
- - `turbopackLoader.ts`, `webpackLoader.ts`, `plugin.ts`, `loader.ts` semua set `preserveImports: true`
80
- - `cv`, `cx`, `cn` dijamin tidak distrip oleh compiler
81
-
82
- ---
124
+ - Next.js, Vite, Rspack: compiler di-bundle inline — tidak perlu install `@tailwind-styled/compiler` terpisah
125
+ - `preserveImports: true` di semua loaders — `cv`, `cx`, `cn` dijamin tidak distrip
126
+ - Rspack `tsup.config.ts` dibuat dari scratch
127
+ - RSC Auto-inject: `detectRSCBoundary()` dan `autoInjectClientBoundary()` sebagai public API
128
+ - `webpackLoader.ts` dan `turbopackLoader.ts` auto-inject `"use client"` berdasarkan `analyzeFile()`
83
129
 
84
130
  ### Sprint 8 — Developer Tooling
85
131
 
86
- #### CLI (`packages/infrastructure/cli/src/analyze.ts`, `src/stats.ts`)
87
- - Suppress `console.log("Analyzing...")` saat `--json` aktifoutput JSON sekarang clean parseable
88
- - `tw analyze --json` dan `tw stats --json` bisa di-pipe ke tools lain
89
-
90
- #### DevTools (`packages/infrastructure/devtools/src/index.tsx`)
91
- - Hapus tombol "Run Rust Workspace Scan" — tidak bisa jalan di browser environment
92
- - Hapus `getRustAnalyzer()`, `runRustScan`, `rustReport`, `rustScanning`
93
- - Ganti dengan panel **Engine Metrics** yang fetch dari `http://localhost:3000/metrics` (dashboard)
94
- - Fallback message: "Rust analyzer hanya tersedia via CLI atau dashboard — `tw analyze . | tw dashboard`"
95
- - DOM Scan tetap ada dan berfungsi
96
-
97
- #### VSCode Extension (`packages/infrastructure/vscode/src/extension.ts`, `scripts/postbuild.cjs`)
98
- - `startLspServer` cek `dist/lsp.mjs` sebagai kandidat pertama (bundled bersama extension)
99
- - Tambah `packages/infrastructure/vscode/scripts/postbuild.cjs` — copy `scripts/v48/lsp.mjs` ke `dist/lsp.mjs` setiap build
100
- - `package.json` tambah `"postbuild": "node scripts/postbuild.cjs"`
101
-
102
- ---
132
+ - CLI: `tw analyze --json` dan `tw stats --json` output clean parseable (suppress `console.log`)
133
+ - DevTools: hapus "Run Rust Workspace Scan"ganti panel **Engine Metrics** dari `localhost:3000/metrics`
134
+ - VSCode: `startLspServer` cek `dist/lsp.mjs` bundled dulu, `postbuild.cjs` otomatis copy
135
+ - Tambah keybindings (`Ctrl+Shift+T/N/S`), `configuration` settings, `menus` context
103
136
 
104
137
  ### Sprint 9 — Studio Desktop (Electron)
105
138
 
106
- #### Main Process (`packages/infrastructure/studio-desktop/src/main.js`)
107
- - `STUDIO_SCRIPT` sekarang di-resolve via `resolveStudioScript()` — cek `process.resourcesPath` (packaged), `__dirname/../..` (dev), dan `cwd` (fallback)
108
- - Engine IPC handlers baru: `engine-scan`, `engine-build`, `engine-watch-start`, `engine-watch-stop`, `engine-reset`
109
- - `createEngine` dari `@tailwind-styled/engine` di-lazy-load per project
110
- - Engine di-reset otomatis saat `change-project` dipanggil
139
+ - Engine IPC handlers: `engine-scan`, `engine-build`, `engine-watch-start`, `engine-watch-stop`, `engine-reset`
140
+ - `createEngine` lazy-load per project, reset otomatis saat `change-project`
111
141
  - Engine events di-forward ke renderer via `mainWindow.webContents.send("engine-event")`
112
-
113
- #### Preload (`packages/infrastructure/studio-desktop/src/preload.js`)
114
- - Ekspos `engineScan`, `engineBuild`, `engineWatchStart`, `engineWatchStop`, `onEngineEvent` ke renderer via `contextBridge`
115
-
116
- #### Package (`packages/infrastructure/studio-desktop/package.json`)
117
- - Tambah `@tailwind-styled/shared` ke dependencies
118
- - Script `dev` update dengan fallback message jika Electron belum terinstall
119
-
120
- ---
142
+ - `contextBridge` ekspos: `engineScan`, `engineBuild`, `engineWatchStart`, `engineWatchStop`, `onEngineEvent`
143
+ - Studio Desktop: `loading-error.html` fallback dengan auto-retry
144
+ - Auto-updater via `electron-updater` check 10 detik setelah startup, manual via Tools menu
145
+ - Tray icon: toggle window, double-click focus, context menu (Open, Browser, Quit)
121
146
 
122
147
  ### Sprint 10 — Testing & Documentation
123
148
 
124
- #### Testing Package (`packages/domain/testing/src/index.ts`)
125
- - Tambah `EngineMetricsSnapshot` interface
126
- - Tambah `expectEngineMetrics(metrics, expectations)` — assert minFiles, maxBuildTimeMs, minUniqueClasses, cacheHitRateMin
127
- - Tambah `toHaveEngineMetrics(expectations)`Jest/Vitest custom matcher
128
- - Tambah `tailwindMatchersWithMetrics` — combined export semua matchers
129
-
130
- #### Test Suites Baru
131
- - `packages/domain/testing/test/sprint9-platform.test.mjs` — 23 tests: next/vite/rspack adapter configs, preserveImports, studio-desktop engine IPC
132
- - `packages/domain/testing/test/sprint10-integration.test.mjs` — 28 tests: Sprint 6–8 error handling, logging, engine propagation, DevTools safety, VSCode LSP, metrics matchers
133
-
134
- #### Test Results
135
- - Total: **84/86 tests pass**
136
- - 2 failing tests: pre-existing `twMerge/cn` extraction (unrelated to engine changes)
137
-
138
- ---
139
-
140
- ## v4.2.0 — Sprint 1 & 2 Complete (2026-03-15)
141
-
142
- ### New Packages
143
-
144
- - **`@tailwind-styled/vue`** — Vue 3 adapter: `tw()`, `cv()`, `extend()`, `TailwindStyledPlugin`. Full variant/compound variant support with `twMerge` conflict resolution.
145
- - **`@tailwind-styled/svelte`** — Svelte 4/5 adapter: `cv()`, `tw()`, `use:styled` action, `createVariants()` (Svelte 5 runes compatible).
146
-
147
- ### New Features
148
-
149
- #### Parser & Compiler (v4.6)
150
- - `tw parse <file>` — Full AST traversal with 3-tier strategy: `oxc-parser` (Rust) → `@babel/parser` → regex fallback. Extracts classes from JSX `className`, template literals, `twMerge()`, `cn()`, `clsx()` calls.
151
- - Real tree shaking (`tw shake <css>`) — CSS selector analysis against source scan. Removes unused rules based on actual class usage, not sentinel strings. Supports `@layer`, `@media` preservation.
152
-
153
- #### Compiler Optimization (v4.7/v4.9)
154
- - `tw optimize <file>` — Constant folding (`true ? A : B → A`), class deduplication, `twMerge` literal pre-computation.
155
-
156
- #### Parallel & Ecosystem (v4.8)
157
- - `scripts/v48/lint-parallel.mjs` — Multi-threaded linting via `worker_threads`
158
- - LSP server (`tw lsp`) — hover, completion (Tailwind class autocomplete), diagnostics via `vscode-languageserver`
159
-
160
- #### Dashboard & Metrics
161
- - `@tailwind-styled/dashboard` — Live metrics server with file-watch IPC. Reads `.tw-cache/metrics.json` written by engine. Real-time HTML UI with build history chart.
162
- - `packages/domain/engine/src/metricsWriter.ts` — Connects engine build results → `.tw-cache/metrics.json` → dashboard.
163
-
164
- #### Plugin Registry
165
- - `@tailwind-styled/plugin-registry` — `tw-plugin search/install/list` CLI. Registry now includes 4 official + 2 community plugins with docs and install commands.
166
-
167
- #### Testing & Storybook
168
- - `@tailwind-styled/testing` — `expectClasses()`, `expectNoClasses()`, `expandVariantMatrix()`, `testAllVariants()`, `expectClassesEqual()`, Jest/Vitest custom matchers (`tailwindMatchers`).
169
- - `@tailwind-styled/storybook-addon` — `generateArgTypes()`, `withTailwindStyled()` decorator, `getVariantClass()`, `createVariantStoryArgs()`.
170
-
171
- #### AI & Studio (v4.5)
172
- - `tw ai "describe"` — Anthropic API integration for component generation. Fallback to smart static templates (card/nav/button detection) when `ANTHROPIC_API_KEY` not set.
173
- - `tw studio` — Web-based component studio: scans project for `tw()`/`cv()` components, HTML UI with search + AI generator endpoint.
174
- - `tw sync <init|pull|push|diff>` — W3C DTCG design token sync. Push to CSS variables (`--color-primary: #3b82f6`) or Tailwind `@theme {}` block.
175
-
176
- #### Distributed Build (v5.0 preview)
177
- - `tw cluster <init|build|status>` — Real `worker_threads` pool. Distributes file scan across CPU cores. Reports throughput (files/sec).
178
-
179
- ### Tests Added (Sprint 2)
180
- - `packages/domain/scanner/test/parse-v46.test.mjs` — 20 unit tests for parse pipeline
181
- - `packages/domain/compiler/test/shake-v47.test.mjs` — 10 unit tests for tree shaking
182
- - `packages/presentation/vue/test/vue-adapter.test.mjs` — 9 unit tests for Vue cv()
183
- - `packages/presentation/svelte/test/svelte-adapter.test.mjs` — 12 unit tests for Svelte cv()/tw()
184
- - `packages/domain/testing/test/testing-utils.test.mjs` — 18 unit tests for testing utilities
185
- - `examples/integration-test/sprint2.integration.test.mjs` — 9 integration tests (parse→shake pipeline, dashboard HTTP, real-world component patterns)
186
-
187
- ### Benchmark
188
- - `scripts/benchmark/sprint2-bench.mjs` — Measures parse (files/sec), shake (% CSS reduction), cluster (throughput) with memory snapshot. Output: `docs/benchmark/sprint2-results.json`.
189
-
190
- ### Documentation
191
- - `docs/known-limitations/tw-parse.md` — Fallback modes, `.vue`/`.svelte` support gap, dynamic class limitations
192
- - `docs/known-limitations/tw-transform.md` — JSX runtime requirements, hoist behavior, source map availability
193
- - `docs/known-limitations/tw-lint.md` — Worker config, exit codes, missing `--format json`
194
-
195
- ### CI & Quality
196
- - Smoke tests expanded to cover Sprint 1+2 features (Oxide pipeline, plugin registry, sync, AI, cluster)
197
- - All packages bumped to `4.2.0`
198
-
199
- ---
200
-
201
- ## v2.1.0-alpha.1 — Tailwind v4 Upgrade Path
202
-
203
- ### Added
204
- - New workspace packages: `@tailwind-styled/scanner` and `@tailwind-styled/engine`.
205
- - Core Tailwind v4 helpers: parser, CSS-first theme reader, merge layer, styled resolver.
206
- - CLI phase upgrades: `init`, `scan`, `migrate`, and interactive `migrate --wizard`.
207
- - Vite plugin build-end integration with scanner reports and optional engine build call.
208
- - Native parser scaffold (`native/`) plus benchmark script (`benchmarks/native-parser-bench.mjs`).
209
- - Release workflow/docs scaffold: `.github/workflows/publish-alpha.yml`, `RELEASE.md`, `ANNOUNCEMENT.md`.
210
-
211
- ### Notes
212
- - Native parser remains optional and uses fallback strategy until binding is shipped in CI artifacts.
149
+ - `EngineMetricsSnapshot` interface + `expectEngineMetrics()` + `toHaveEngineMetrics()` + `tailwindMatchersWithMetrics`
150
+ - `sprint9-platform.test.mjs` — 23 tests: adapter configs, preserveImports, studio IPC
151
+ - `sprint10-integration.test.mjs` — 28 tests: error handling, logging, DevTools safety, VSCode LSP, metrics
152
+ - **84/86 tests pass** 2 failing pre-existing (unrelated `twMerge/cn`)
213
153
 
214
154
  ---
215
155
 
216
- ## v2.0.0 — Major Upgrade (Compiler-Driven)
156
+ ## [4.3.0–4.5.0]2026-03-16
217
157
 
218
- ### Breaking Changes
219
- - **Removed `styled-components` dependency** — peer dep dihapus.
220
- - **`styledFactory`, `shouldForwardProp`, `blockProp`, `allowProp`** — dihapus.
221
- - **`propEngine`, `responsiveEngine`** — dipindahkan ke compiler.
222
- - **`ThemeContext`** — dihapus.
223
-
224
- ### New Features
225
- - **Zero-runtime output** — `tw.div\`...\`` dikompilasi ke pure `React.forwardRef`.
226
- - **Compiler-driven variants** — Variant config dikompilasi ke static lookup table.
227
- - **RSC-aware** — Auto detect server vs client components.
228
- - **`withTailwindStyled()` plugin** — Next.js plugin dengan Turbopack + Webpack support.
229
- - **`tailwindStyledPlugin()` Vite plugin** — Same compiler pipeline untuk Vite 5+.
158
+ ### Fitur Baru
230
159
 
231
- ---
160
+ - **`tw ai`** — Anthropic API untuk component generation, multi-provider (`anthropic|openai|ollama`), fallback ke static templates
161
+ - **`tw studio`** — Web-based component studio: scan project, search, AI generator endpoint
162
+ - **`tw cluster`** — `worker_threads` pool: distribusi scan ke CPU cores
163
+ - **`tw registry`** — Local/team HTTP registry, npm-compatible packument protocol, tarball publish/install
164
+ - **`tw sync`** — W3C DTCG design token sync: pull/push HTTP/HTTPS, S3 protocol, Figma multi-mode
165
+ - **`tw preflight`** — 8 checks: Node version, bundler, Tailwind config, deprecated patterns, TypeScript, auto-fix
166
+ - **`tw audit`** — Deprecated class scanner, a11y checks, npm audit security, `--scope` dan `--json`
167
+ - **`@tailwind-styled/shared`** — Package baru: `LRUCache` (TTL), `createLogger`, `hashContent/File`, `debounce/throttle`, `parseVersion`
232
168
 
233
- ## v4.3–v4.5 Upgrade (2026-03-16)
169
+ ### tw parse — Multi-format
234
170
 
235
- ### v4.3Command Densification
236
- - `tw studio` sekarang spawn `scripts/v45/studio.mjs` langsung (sebelumnya: `console.log` placeholder)
237
- - `tw dashboard` direct spawn `packages/infrastructure/dashboard/src/server.mjs` tanpa butuh build (sebelumnya: `npm run dev`)
238
- - `tw storybook` tanpa `--variants`launch Storybook dev server via `npx storybook dev`; dengan `--variants` enumerate JSON (CI mode)
171
+ - `.vue/.svelte/.mdx/.html`regex-direct strategy, skip Babel (lebih cepat)
172
+ - `.js/.jsx/.ts/.tsx` — Oxc-first Babel regex
173
+ - Native Rust Tier 0: coba `native/index.mjs` (.node binding) sebelum Oxc
174
+ - Parse chain: **native oxcbabelregex**
239
175
 
240
- ### v4.4 DX & Quality
241
- - `tw preflight [--fix] [--json]` — command baru: 8 checks (Node version, package.json, tailwind-styled, bundler, tailwind-merge, Tailwind config, deprecated patterns, TypeScript), auto-fix sederhana
242
- - `tw audit` — real checks: deprecated class scanner, a11y (img alt, onClick keyboard, div onClick, focus state), npm audit security, class count estimate; `--scope=deprecated|a11y|security|performance` dan `--json`
243
- - `tw deploy` — baca package.json, tulis `.tw-cache/deploy-manifest.json`, `--dry-run` support
244
- - `tw share` — baca manifest yang ada, generate payload dengan installCommand dan importExample
176
+ ### Next.js Route CSS
245
177
 
246
- ### v4.5Platform Mode
247
- - `tw sync figma <pull|push|diff>` — CLI sekarang route subcommand `figma` ke `scripts/v45/figma-sync.mjs`
248
- - `tw ai` — multi-provider: `--provider=anthropic|openai|ollama`, `--model=name`, auto-fallback ke Anthropic static template
249
- - `@tailwind-styled/shared` — package baru: `LRUCache` (TTL support), `createLogger`, `hashContent`/`hashFile`, `debounce`/`throttle`, `parseVersion`/`satisfiesMinVersion`
250
- - `packages/domain/compiler` — migrasi `hashFileContent` ke `@tailwind-styled/shared`
178
+ - `routeCssMiddleware.ts``getRouteCssLinks()`, `injectRouteCssIntoHtml()`
179
+ - `withTailwindStyled` write `css-manifest.json` ke `.next/static/css/tw/`
180
+ - Dynamic route CSS: `[id]`, `[...slug]` dengan cache per params kombinasi
251
181
 
252
182
  ### Tests
253
- - `packages/domain/testing/test/v43-v45.test.mjs` — 28 tests covering shared package, audit, AI provider, preflight
254
183
 
255
- ### v4.2.0 patch (2026-03-16)
256
-
257
- - `scripts/v49/critical-css.mjs` — upgraded: real CSS rule parsing, `--inline`, `--out=file`, id/tag/class extraction, savedPercent metric
258
- - `scripts/v48/lint-parallel.mjs` — `--format=sarif` (SARIF 2.1 untuk GitHub Code Scanning), `--fix` auto-deduplicate duplicate classes
259
- - `scripts/v46/parse.mjs` — bugfix: regex fallback sekarang mengekstrak kelas dari `twMerge()`, `cn()`, `cx()`, `clsx()` calls
260
- - `packages/infrastructure/vscode/package.json` — tambah keybindings (Ctrl+Shift+T/N/S), `configuration` settings, `menus` context
261
- - `packages/domain/shared/tsconfig.json` — tsconfig untuk build
262
- - `.github/workflows/benchmark.yml` — sprint2-bench, plugin-registry SLO, toolchain benchmark
263
- - `scripts/validate/dependency-matrix-check.mjs` — validasi packages baru v4.2
264
- - `packages/infrastructure/cli/src/index.ts` — fix preflight handler (hapus `--input-type=module` orphan)
265
- - `docs/known-limitations/` — update status aktual untuk tw-lint, tw-split-optimize, tw-v50
184
+ - `v43-v45.test.mjs` 28 tests: shared package, audit, AI provider, preflight
185
+ - `sprint7.test.mjs` — 30 tests, semua pass
266
186
 
267
187
  ---
268
188
 
269
- ## v4.3–v6.0 Sprint 6 (2026-03-16)
270
-
271
- ### New Features
189
+ ## [4.2.0] Sprint 1 & 2 — 2026-03-15
272
190
 
273
- #### Registry (`tw registry`)
274
- - `scripts/v45/registry.mjs` — Lightweight local/team HTTP registry server
275
- - `tw deploy --registry=http://localhost:4040` — Real HTTP publish ke registry
276
- - `tw registry serve|list|info` — Manage registry dari CLI
277
- - Token auth via `TW_REGISTRY_TOKEN` env var
191
+ ### Packages Baru
278
192
 
279
- #### Remote build (`tw cluster-server`)
280
- - `scripts/v50/cluster-server.mjs` Remote build worker HTTP server
281
- - `tw cluster build src/ --remote=http://host:7070 --token=secret` Dispatch ke remote workers
282
- - `tw cluster-server [--port=7070] [--workers=N] [--token=secret]`
193
+ - **`@tailwind-styled/vue`** Vue 3: `tw()`, `cv()`, `extend()`, `TailwindStyledPlugin`
194
+ - **`@tailwind-styled/svelte`** — Svelte 4/5: `cv()`, `tw()`, `use:styled`, `createVariants()` (Svelte 5 runes)
195
+ - **`@tailwind-styled/testing`** `expectClasses()`, `expandVariantMatrix()`, `testAllVariants()`, Jest/Vitest matchers
196
+ - **`@tailwind-styled/storybook-addon`** `generateArgTypes()`, `withTailwindStyled()` decorator
197
+ - **`@tailwind-styled/dashboard`** — Live metrics server, file-watch IPC, HTML UI dengan build history chart
198
+ - **`@tailwind-styled/plugin-registry`** — `tw-plugin search/install/list` CLI, 4 official + 2 community plugins
283
199
 
284
- #### Remote token sync
285
- - `tw sync pull --from=https://cdn.example.com/tokens.json` — HTTP/HTTPS URL pull
286
- - `tw sync push --to-url=https://api.example.com/tokens` — HTTP push ke endpoint
287
- - Figma subcommand sekarang tersedia: `tw sync figma pull|push|diff`
200
+ ### Fitur Compiler
288
201
 
289
- #### Next.js route CSS injection
290
- - `packages/presentation/next/src/routeCssMiddleware.ts``getRouteCssLinks(route)`, `injectRouteCssIntoHtml()`
291
- - `withTailwindStyled` sekarang write `css-manifest.json` ke `.next/static/css/tw/`
292
- - Konsumsi di layout: `import { getRouteCssLinks } from 'tailwind-styled-v4/next/route-css'`
202
+ - `tw parse <file>` — 3-tier AST: `oxc-parser` → `@babel/parser` → regex. Extract dari JSX, template literal, `twMerge()`, `cn()`, `clsx()`
203
+ - `tw shake <css>` Real tree shaking berbasis CSS selector analysis, support `@layer`, `@media`
204
+ - `tw optimize <file>` — Constant folding, class deduplication, `twMerge` literal pre-computation
205
+ - LSP server (`tw lsp`) hover, completion (Tailwind autocomplete), diagnostics via `vscode-languageserver`
206
+ - `tw cluster build` — `worker_threads` pool, throughput report (files/sec)
293
207
 
294
- #### Vite plugin route CSS
295
- - `routeCss: true` option di `tailwindStyledPlugin()` — run split-routes + shake per route
296
- - `routeCssDir` — konfigurasi output dir
297
- - `deadStyleElimination: true` — shake setiap route CSS chunk
208
+ ### Tests
298
209
 
299
- #### Studio Desktop
300
- - `packages/infrastructure/studio-desktop/src/loading-error.html` — loading fallback dengan auto-retry + error state
301
- - `packages/infrastructure/studio-desktop/src/updater.js` — electron-updater integration (GitHub Releases)
302
- - Auto-update check 10 detik setelah startup, manual via Tools menu
210
+ - 6 test suites baru, 78 unit tests + 9 integration tests
211
+ - `scripts/benchmark/sprint2-bench.mjs` — parse/shake/cluster metrics ke `docs/benchmark/sprint2-results.json`
303
212
 
304
213
  ---
305
214
 
306
- ## Sprint 7 (2026-03-16)
307
-
308
- ### Tarball Registry (npm-compatible)
309
- - `scripts/v45/registry-tarball.mjs` — `tw registry publish` buat + upload tarball, `tw install <pkg>` download + install, `tw registry versions <pkg>` list versions
310
- - `scripts/v45/registry.mjs` — upgrade: PUT `/packages/:name` endpoint, GET `/packages/:name/versions`, GET `/packages/:name/-/:tarball.tgz`, tarball storage di `tarballs/`, version history di `.versions.json`
311
- - `tw install` shorthand command di CLI
312
-
313
- ### RSC Auto-inject
314
- - `packages/domain/compiler/src/rscAnalyzer.ts` — export `detectRSCBoundary()` dan `autoInjectClientBoundary()` sebagai public API Sprint 7
315
- - `packages/presentation/next/src/webpackLoader.ts` — import rscAnalyzer, auto-inject `"use client"` berdasarkan `analyzeFile()` analysis
316
- - `packages/presentation/next/src/turbopackLoader.ts` — import rscAnalyzer (Sprint 7 alignment)
215
+ ## [4.5.0] Implementation Session — 2026-04
317
216
 
318
- ### Figma Multi-mode
319
- - `scripts/v45/figma-multi.mjs` — pull dari multiple Figma files (`--file=key1,key2`), mode selection (`--mode=dark`), diff antar mode (`diff --from=light --to=dark`), `modes` command untuk list available modes
320
- - `tw sync figma` CLI otomatis route ke `figma-multi.mjs` jika ada `--file=`, `--mode=`, atau `modes` command
217
+ ### Bug Fixes
321
218
 
322
- ### Dynamic Route CSS (Sprint 7)
323
- - `packages/presentation/next/src/routeCssMiddleware.ts` `getDynamicRouteCssPaths()`, `getDynamicRouteCssLinks()`, `resolveDynamicRoute()`, `invalidateDynamicRouteCache()`
324
- - Support `[id]`, `[...slug]` dynamic segments dengan cache per kombinasi params
325
- - Fallback otomatis ke parent route jika tidak ada CSS spesifik
219
+ - VSCode Extension: `extension.ts` pakai `completionProvider.ts` dan `hoverProvider.ts` yang benar (sebelumnya inline hardcoded)
220
+ - CLI scan: flag `--save` menulis `.tailwind-styled/scan-cache.json` format lengkap untuk VSCode EngineService
221
+ - `TWS_DISABLE_NATIVE` env var dikenali di `nativeBridge.ts` dan `nativeBinding.ts`
222
+ - `TwError` upgrade: `fromZod()`, `source`, `originalCause`, `toJSON()`, `toCliMessage()`
223
+ - `ReverseLookup`: `clearCache()`, `pruneCache()`, `MAX_CACHE_BYTES` untuk mencegah memory leak
224
+ - `cssToIr`: `createIdGenerator()` factory — eliminasi race condition
225
+ - DSE: `runDeadStyleElimination()` sekarang memanggil `eliminateDeadCss` + `optimizeCss`
226
+ - `CvFn/TwComponentFactory`: eliminasi `any`, proper generics dengan `InferVariantProps<C>`
227
+ - `extend()`: overload baru support `extend({ classes, variants })` dalam satu call
228
+ - `astTransform`: `mode` option dihapus dari destructuring
326
229
 
327
- ### Oxc Minify Full Pipeline
328
- - `scripts/v47/minify.mjs` — 3-tier: oxc-minify (mangle+dead-code+compress) → esbuild (transform) → regex fallback
329
- - Opsi: `--mangle`, `--dead-code`, `--comments=false`, `--target=`, `--json`, `--write`, `--out=`
330
- - Report: mode, original/minified bytes, reduction%, durationMs
331
-
332
- ### Tests
333
- - `packages/domain/testing/test/sprint7.test.mjs` — 30 tests, semua pass
334
-
335
- ---
336
-
337
- ## Sprint 8 (2026-03-16)
230
+ ### Added
338
231
 
339
- ### adopt Monorepo Detection
340
- - Auto-detect: npm workspaces, pnpm (`pnpm-workspace.yaml`), Nx (`nx.json`), Turborepo (`turbo.json`)
341
- - `--all` flag: jalankan analisis di semua workspace packages sekaligus
342
- - `--project=<dir>` tetap override monorepo detection
343
- - Informational log saat monorepo terdeteksi
232
+ - Zod schemas untuk semua native binding responses (`native-schemas.ts`)
233
+ - Engine facade: `scanWorkspace()`, `analyzeWorkspace()`, `generateSafelist()`, `build()`
234
+ - `CONTRIBUTING.md`: section "Berkontribusi tanpa Rust"
235
+ - `docs/api/engine.md`, `analyzer.md`, `cli.md`
236
+ - `.github/workflows/plugin-registry-test.yml` matrix CI
237
+ - `tsconfig.build.json` + `tsconfig.dev.json` — separation of concerns
344
238
 
345
- ### tw lint — Custom Rules
346
- - `--rules=path/to/rules.json` — load custom rules dari file JSON
347
- - `.tw-lint.json` di CWD auto-loaded tanpa flag
348
- - `--rule="pattern:message"` — inline custom rule (repeatable)
349
- - Rule format: `{ id, pattern, message, severity: "error"|"warning" }`
350
- - Output report: `customRulesLoaded` field
239
+ ### Tests Ditambah
351
240
 
352
- ### tw lint `--no-exit-0` & `--severity`
353
- - `--no-exit-0` exit 0 meski ada issues (CI-safe mode, e.g. untuk warning-only runs)
354
- - `--severity=error|warning` — set minimum severity yang memicu exit code 1
355
- - Output report: `noExit0` dan `severity` fields
241
+ - **39 test files baru**, **318 test cases** baru
242
+ - Coverage: semua domain packages, semua adapters, Vue, Svelte, CLI, infrastructure
356
243
 
357
244
  ---
358
245
 
359
- ## Sprint 9 (2026-03-16)
246
+ ## [2.0.0] Major Upgrade (Compiler-Driven)
360
247
 
361
- ### Studio Desktop — Tray Icon
362
- - `packages/infrastructure/studio-desktop/src/icons/tray.png` + `tray@2x.png` — gradient blue-to-teal PNG icon
363
- - `createTray()` fully implemented: `new Tray(iconPath)`, tooltip, context menu
364
- - Context menu: Open Studio, Open in Browser, separator, project name, Quit
365
- - `tray.on("click")` — toggle window visibility
366
- - `tray.on("double-click")` — focus window
248
+ ### Breaking Changes
367
249
 
368
- ### Plugin Marketplace
369
- - `scripts/v45/marketplace.mjs` publish, search, featured, info, unpublish
370
- - Auto-inference of category (animation/layout/theme/ui/typography/utilities)
371
- - Offline fallback: publish to local `tw registry`, search in `.tw-registry/`
372
- - `tw plugin marketplace` + `tw plugin publish` commands di CLI
250
+ - Hapus dependency `styled-components`
251
+ - Hapus `styledFactory`, `shouldForwardProp`, `blockProp`, `allowProp`
252
+ - Hapus `propEngine`, `responsiveEngine` — dipindahkan ke compiler
253
+ - Hapus `ThemeContext`
373
254
 
374
- ### tw parse — .vue .svelte .mdx
375
- - Hybrid strategy: `.vue/.svelte/.mdx/.html` → regex-direct (skip Babel, faster)
376
- - `extractFromVue()` — extract `<script>` + `class=` from template
377
- - `extractFromSvelte()` — extract `<script>` + `class=` / `class:directive`
378
- - `extractFromMdx()` — extract JSX blocks + imports
379
- - `.js/.jsx/.ts/.tsx` tetap Oxc-first → Babel → regex
255
+ ### Features
380
256
 
381
- ### tw transform — .mdx
382
- - `.mdx` pre-processing: strip markdown prose, keep JSX/imports for transform
383
- - mode: `mdx-extracted`
257
+ - **Zero-runtime output**`tw.div\`...\`` dikompilasi ke pure `React.forwardRef`
258
+ - **Compiler-driven variants** dikompilasi ke static lookup table
259
+ - **RSC-aware** — auto detect server vs client components
260
+ - **`withTailwindStyled()`** — Next.js plugin dengan Turbopack + Webpack support
261
+ - **`tailwindStyledPlugin()`** — Vite 5+ support
384
262
 
385
263
  ---
386
264
 
387
- ## Sprint 10 (2026-03-16)
388
-
389
- ### tw lint — Tailwind config custom rules validation
390
- - `loadTailwindConfigClasses()` — static analysis dari `tailwind.config.js/ts/mjs/cjs`
391
- - Ekstrak: `addUtilities()`, `addComponents()`, `extend:` theme keys
392
- - Config classes suppress false-positive deprecated warnings
393
- - `knownConfigClasses` diteruskan ke worker threads via `workerData`
394
-
395
- ### Registry — npm packument protocol
396
- - `GET /:name` endpoint — returns npm packument format: `dist-tags`, `versions`, `dist.tarball`
397
- - Compatible dengan `npm install --registry=http://localhost:4040`
398
- - `tw registry help` command added
265
+ ## Roadmap
399
266
 
400
- ### VS Code LSP client
401
- - `startLspServer()` / `stopLspServer()` — manage `lsp.mjs` process lifecycle
402
- - Reads `tailwindStyled.lsp.enable` setting (default: true)
403
- - Auto-restart on settings change via `onDidChangeConfiguration`
404
- - Clean shutdown di `deactivate()`
267
+ ### v5 (target: ~8 minggu)
405
268
 
406
- ### tw sync — S3:// protocol
407
- - `tw sync pull --from=s3://bucket/key` — resolve via `AWS_ENDPOINT_URL` → HTTP
408
- - Native `@aws-sdk/client-s3` fallback jika available
409
- - Helpful error message jika tidak ada credentials
269
+ Berdasarkan `compiler-v5-upgrade-plan.md`:
410
270
 
411
- ### tw parseNative Rust tier 0
412
- - Mencoba `native/index.mjs` (.node binding) sebagai Tier 0 sebelum Oxc
413
- - Graceful fallback: native Oxc Babel → regex
414
- - `mode: 'native-rust'` jika compiled binding tersedia
271
+ - [ ] Hapus semua JS fallback — Rust native only wajib
272
+ - [ ] Pangkas 120+ exports compiler ~20 public API
273
+ - [ ] Hapus `mode` option zero-runtime only
274
+ - [ ] Hapus Tailwind v3 support — v4 only
275
+ - [ ] Integrasikan DSE ke pipeline utama (sekarang masih standalone)
276
+ - [ ] Pisahkan atomic CSS ke `@tailwind-styled/atomic` (sudah ada packagenya)
277
+ - [ ] E2E + integration tests
415
278
 
416
- ---
417
-
418
- ## Sprint 10+ (2026-03-16)
419
-
420
- ### Manifest dev mode serving
421
- - `withTailwindStyled({ devManifest: true })` — default aktif di dev mode
422
- - Next.js rewrites: `/__tw/css-manifest.json` → `.next/static/css/tw/css-manifest.json`
423
- - `/__tw/:path*.css` → route CSS chunks di `.next/static/css/tw/`
424
- - `routeCssMiddleware` — tambah `public/__tw/` sebagai path candidate
425
-
426
- ### Plugin registry checksum & auto-update
427
- - `PluginRegistry.verifyIntegrity(name)` — sha256 hash comparison
428
- - `PluginRegistry.checkForUpdate(name)` — semver diff vs installed version
429
- - `PluginRegistry.checkAllUpdates()` — batch update check semua plugins
430
- - CLI: `tw plugin update-check` + `tw plugin verify <name>` (+ `--json`)
431
-
432
- ### CSS generation heading fix (tw-v50.md)
433
- - Heading diupdate: "Output hanya classCount — full CSS generation Sprint 10+" → "CSS Generation — cluster output Sprint 10+"
434
- - Workaround diperjelas: `tw cluster build src/ && tw split src/ artifacts/route-css`
435
-
436
- ## [Implementation Session 2026-04] — Major Test Coverage + Bug Fixes
437
-
438
- ### Fixed
439
- - **VSCode Extension**: `extension.ts` sekarang menggunakan `providers/completionProvider.ts` dan `hoverProvider.ts` yang benar (sebelumnya inline hardcoded)
440
- - **CLI scan**: flag `--save` menulis `.tailwind-styled/scan-cache.json` dengan format lengkap untuk VSCode EngineService
441
- - **RC Gate workflow**: referensi `.mjs` yang broken diganti dengan runner yang benar
442
- - **TWS_DISABLE_NATIVE**: env var sekarang dikenali di `nativeBridge.ts` dan `nativeBinding.ts`
443
- - **TwError**: upgrade dengan `fromZod()`, `source`, `originalCause`, `toJSON()`, `toCliMessage()`
444
- - **ReverseLookup**: `clearCache()`, `pruneCache()`, MAX_CACHE_BYTES untuk mencegah memory leak (QA #33)
445
- - **cssToIr**: `createIdGenerator()` factory pattern — eliminasi race condition (QA #32)
446
- - **DSE**: `runDeadStyleElimination()` sekarang memanggil `eliminateDeadCss` + `optimizeCss` (Phase 3 compiler v5)
447
- - **ImpactTracker**: `analyzeWithBundle()` dan `analyzeAll()` — bundleAnalyzer sekarang digunakan
448
- - **CvFn/TwComponentFactory**: eliminasi `any`, proper generics dengan `InferVariantProps<C>` (CRITIQUE-20 #1)
449
- - **extend()**: overload baru yang support `extend({ classes, variants })` dalam satu call (CRITIQUE-20 #2)
450
- - **CLI prototype commands**: graceful handler dengan info berguna daripada crash
451
- - **CLI docs**: label prototype di help dengan path script
452
- - **test fixtures**: `generate.mjs` ESM rewrite (QA #30)
453
- - **tsconfig**: pisahkan `tsconfig.build.json` (tanpa path aliases) dan `tsconfig.dev.json` (QA #24)
454
- - **astParser**: zero-let — `loadOxcParseSync()` factory
455
- - **astTransform**: `mode` option dihapus dari destructuring
279
+ ### v6 (setelah v5 stabil)
456
280
 
457
- ### Added
458
- - `packages/domain/shared/src/errors.ts`: standalone TwError file
459
- - `packages/domain/shared/src/generated/`: scaffold untuk auto-generated schemas
460
- - `packages/domain/shared/src/native-schemas.ts`: Zod schemas untuk semua native binding responses (QA #19)
461
- - Engine facade: `scanWorkspace()`, `analyzeWorkspace()`, `generateSafelist()`, `build()`
462
- - `CONTRIBUTING.md`: section "Berkontribusi tanpa Rust" (CRITIQUE-20 #20)
463
- - `docs/plugin-registry.md`: complete documentation (Track B Issue 7)
464
- - `docs/api/engine.md`, `analyzer.md`, `cli.md`: English translation
465
- - `artifacts/.gitkeep`: scaffold untuk RC gate artifacts
466
- - `.github/workflows/plugin-registry-test.yml`: matrix CI (Track B Issue 1)
467
- - `tsconfig.build.json`, `tsconfig.dev.json`: separation of concerns (QA #24)
468
-
469
- ### Tests Added (39 test files, 318 test cases)
470
- - `packages/domain/shared/tests/`: errors, hash, cache, nativeBinding, native-schemas
471
- - `packages/domain/compiler/tests/`: transformSource, extractAllClasses, incrementalEngine, variants, dse
472
- - `packages/domain/engine/tests/`: facade functions
473
- - `packages/domain/scanner/tests/`: isScannableFile, scanFile, scanWorkspace
474
- - `packages/domain/analyzer/tests/`: classToCss, analyzeWorkspace
475
- - `packages/domain/atomic/tests/`: parseAtomicClass, generateAtomicCss, toAtomicClasses
476
- - `packages/domain/preset/tests/`: defaultPreset, designTokens, generateTailwindCss
477
- - `packages/domain/plugin-registry/__tests__/`: 20 integration tests
478
- - `packages/domain/plugin-registry/benchmark/`: SLO benchmark
479
- - `packages/presentation/vue/__tests__/`: cv(), tw(), extend()
480
- - `packages/presentation/svelte/__tests__/`: cv(), tw()
481
- - `packages/domain/testing/__tests__/`: all matchers (18 tests)
482
- - `packages/infrastructure/storybook-addon/tests/`: generateArgTypes, enumerateVariantProps (18 tests)
483
- - `packages/domain/theme/tests/`: liveToken, tokenRef, tokenVar, ThemeRegistry
484
- - `packages/domain/runtime-css/tests/`: batchedInjector
485
- - `packages/domain/runtime/tests/`: cx(), createComponent
486
- - `packages/presentation/vite/tests/`: tailwindStyledPlugin
487
- - `packages/presentation/next/tests/`: withTailwindStyled
488
- - `packages/presentation/rspack/tests/`: TailwindStyledRspackPlugin
489
- - `packages/infrastructure/cli/tests/`: scan (--save), preflight, args
490
- - `packages/domain/plugin-api/tests/`: createPluginRegistry, createPluginContext
491
- - `packages/domain/plugin/tests/`: createTwPlugin, registerTransform
492
- - `packages/domain/animate/tests/`: AnimationRegistry, animate, compileAnimation
493
- - `packages/infrastructure/dashboard/tests/`: state, metrics, normalizeMetrics
494
- - `packages/infrastructure/devtools/tests/`: exports
495
- - `packages/domain/core/tests/`: cv(), cx(), cxm()
496
- - `packages/domain/syntax/tests/`: parseClasses(), extractAllClasses()
497
- - `tests/smoke/`: root-imports, pipeline, adapters
281
+ - [ ] Docs website
282
+ - [ ] HMR di adapter Next.js (sudah ada di Vite)
283
+ - [ ] macOS & Windows binary publish ke npm (CI matrix sudah ready)
284
+ - [ ] Plugin starter/codegen
285
+ - [ ] devtools traces lintas tooling