@tenphi/tasty 0.0.0-snapshot.c8bdaeb → 0.0.0-snapshot.cae4fee

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 (303) hide show
  1. package/README.md +314 -159
  2. package/dist/async-storage-B7_o6FKt.js +44 -0
  3. package/dist/async-storage-B7_o6FKt.js.map +1 -0
  4. package/dist/collector-C-keQH9m.js +243 -0
  5. package/dist/collector-C-keQH9m.js.map +1 -0
  6. package/dist/collector-osfWTeRd.d.ts +108 -0
  7. package/dist/config-BBiyxMCe.js +10559 -0
  8. package/dist/config-BBiyxMCe.js.map +1 -0
  9. package/dist/config-BoZDUHW5.d.ts +945 -0
  10. package/dist/context-CkSg-kDT.js +24 -0
  11. package/dist/context-CkSg-kDT.js.map +1 -0
  12. package/dist/core/index.d.ts +5 -33
  13. package/dist/core/index.js +6 -26
  14. package/dist/core-BO4319td.js +1598 -0
  15. package/dist/core-BO4319td.js.map +1 -0
  16. package/dist/css-writer-BWvwQzz0.js +351 -0
  17. package/dist/css-writer-BWvwQzz0.js.map +1 -0
  18. package/dist/format-global-rules-Dbc_1tc3.js +22 -0
  19. package/dist/format-global-rules-Dbc_1tc3.js.map +1 -0
  20. package/dist/format-rules-BSjeH4Z7.js +143 -0
  21. package/dist/format-rules-BSjeH4Z7.js.map +1 -0
  22. package/dist/hydrate-CcvrP4qJ.js +45 -0
  23. package/dist/hydrate-CcvrP4qJ.js.map +1 -0
  24. package/dist/index-B_k47mc_.d.ts +1655 -0
  25. package/dist/index-tcHuMPFt.d.ts +1286 -0
  26. package/dist/index.d.ts +5 -48
  27. package/dist/index.js +731 -32
  28. package/dist/index.js.map +1 -0
  29. package/dist/keyframes-BUQhdOSJ.js +588 -0
  30. package/dist/keyframes-BUQhdOSJ.js.map +1 -0
  31. package/dist/{utils/merge-styles.d.ts → merge-styles-BMWcH6MF.d.ts} +3 -3
  32. package/dist/{utils/merge-styles.js → merge-styles-Cd2vBl9b.js} +4 -6
  33. package/dist/merge-styles-Cd2vBl9b.js.map +1 -0
  34. package/dist/{utils/resolve-recipes.js → resolve-recipes-C1nrvnYh.js} +5 -8
  35. package/dist/resolve-recipes-C1nrvnYh.js.map +1 -0
  36. package/dist/ssr/astro-client.d.ts +1 -0
  37. package/dist/ssr/astro-client.js +19 -0
  38. package/dist/ssr/astro-client.js.map +1 -0
  39. package/dist/ssr/astro-middleware.d.ts +15 -0
  40. package/dist/ssr/astro-middleware.js +19 -0
  41. package/dist/ssr/astro-middleware.js.map +1 -0
  42. package/dist/ssr/astro.d.ts +97 -0
  43. package/dist/ssr/astro.js +149 -0
  44. package/dist/ssr/astro.js.map +1 -0
  45. package/dist/ssr/index.d.ts +44 -0
  46. package/dist/ssr/index.js +10 -0
  47. package/dist/ssr/index.js.map +1 -0
  48. package/dist/ssr/next.d.ts +46 -0
  49. package/dist/ssr/next.js +75 -0
  50. package/dist/ssr/next.js.map +1 -0
  51. package/dist/static/index.d.ts +91 -5
  52. package/dist/static/index.js +49 -4
  53. package/dist/static/index.js.map +1 -0
  54. package/dist/static/inject.d.ts +5 -0
  55. package/dist/static/inject.js +17 -0
  56. package/dist/static/inject.js.map +1 -0
  57. package/dist/zero/babel.d.ts +57 -84
  58. package/dist/zero/babel.js +232 -40
  59. package/dist/zero/babel.js.map +1 -1
  60. package/dist/zero/index.d.ts +67 -3
  61. package/dist/zero/index.js +2 -4
  62. package/dist/zero/next.d.ts +56 -30
  63. package/dist/zero/next.js +105 -40
  64. package/dist/zero/next.js.map +1 -1
  65. package/docs/README.md +31 -0
  66. package/docs/adoption.md +298 -0
  67. package/docs/comparison.md +419 -0
  68. package/docs/configuration.md +438 -0
  69. package/docs/debug.md +320 -0
  70. package/docs/design-system.md +436 -0
  71. package/docs/dsl.md +690 -0
  72. package/docs/getting-started.md +217 -0
  73. package/docs/injector.md +544 -0
  74. package/docs/methodology.md +642 -0
  75. package/docs/pipeline.md +699 -0
  76. package/docs/react-api.md +581 -0
  77. package/docs/ssr.md +444 -0
  78. package/docs/styles.md +598 -0
  79. package/docs/tasty-static.md +547 -0
  80. package/package.json +70 -37
  81. package/tasty.config.ts +1 -0
  82. package/dist/_virtual/_rolldown/runtime.js +0 -8
  83. package/dist/chunks/cacheKey.js +0 -70
  84. package/dist/chunks/cacheKey.js.map +0 -1
  85. package/dist/chunks/definitions.d.ts +0 -37
  86. package/dist/chunks/definitions.js +0 -260
  87. package/dist/chunks/definitions.js.map +0 -1
  88. package/dist/chunks/renderChunk.js +0 -61
  89. package/dist/chunks/renderChunk.js.map +0 -1
  90. package/dist/config.d.ts +0 -280
  91. package/dist/config.js +0 -403
  92. package/dist/config.js.map +0 -1
  93. package/dist/debug.d.ts +0 -204
  94. package/dist/debug.js +0 -733
  95. package/dist/debug.js.map +0 -1
  96. package/dist/hooks/useGlobalStyles.d.ts +0 -27
  97. package/dist/hooks/useGlobalStyles.js +0 -56
  98. package/dist/hooks/useGlobalStyles.js.map +0 -1
  99. package/dist/hooks/useKeyframes.d.ts +0 -56
  100. package/dist/hooks/useKeyframes.js +0 -54
  101. package/dist/hooks/useKeyframes.js.map +0 -1
  102. package/dist/hooks/useProperty.d.ts +0 -79
  103. package/dist/hooks/useProperty.js +0 -91
  104. package/dist/hooks/useProperty.js.map +0 -1
  105. package/dist/hooks/useRawCSS.d.ts +0 -53
  106. package/dist/hooks/useRawCSS.js +0 -28
  107. package/dist/hooks/useRawCSS.js.map +0 -1
  108. package/dist/hooks/useStyles.d.ts +0 -40
  109. package/dist/hooks/useStyles.js +0 -169
  110. package/dist/hooks/useStyles.js.map +0 -1
  111. package/dist/injector/index.d.ts +0 -157
  112. package/dist/injector/index.js +0 -154
  113. package/dist/injector/index.js.map +0 -1
  114. package/dist/injector/injector.d.ts +0 -139
  115. package/dist/injector/injector.js +0 -404
  116. package/dist/injector/injector.js.map +0 -1
  117. package/dist/injector/sheet-manager.d.ts +0 -127
  118. package/dist/injector/sheet-manager.js +0 -714
  119. package/dist/injector/sheet-manager.js.map +0 -1
  120. package/dist/injector/types.d.ts +0 -135
  121. package/dist/keyframes/index.js +0 -206
  122. package/dist/keyframes/index.js.map +0 -1
  123. package/dist/parser/classify.js +0 -319
  124. package/dist/parser/classify.js.map +0 -1
  125. package/dist/parser/const.js +0 -33
  126. package/dist/parser/const.js.map +0 -1
  127. package/dist/parser/lru.js +0 -109
  128. package/dist/parser/lru.js.map +0 -1
  129. package/dist/parser/parser.d.ts +0 -25
  130. package/dist/parser/parser.js +0 -116
  131. package/dist/parser/parser.js.map +0 -1
  132. package/dist/parser/tokenizer.js +0 -69
  133. package/dist/parser/tokenizer.js.map +0 -1
  134. package/dist/parser/types.d.ts +0 -51
  135. package/dist/parser/types.js +0 -46
  136. package/dist/parser/types.js.map +0 -1
  137. package/dist/pipeline/conditions.d.ts +0 -134
  138. package/dist/pipeline/conditions.js +0 -406
  139. package/dist/pipeline/conditions.js.map +0 -1
  140. package/dist/pipeline/exclusive.js +0 -231
  141. package/dist/pipeline/exclusive.js.map +0 -1
  142. package/dist/pipeline/index.d.ts +0 -53
  143. package/dist/pipeline/index.js +0 -660
  144. package/dist/pipeline/index.js.map +0 -1
  145. package/dist/pipeline/materialize.js +0 -844
  146. package/dist/pipeline/materialize.js.map +0 -1
  147. package/dist/pipeline/parseStateKey.d.ts +0 -15
  148. package/dist/pipeline/parseStateKey.js +0 -438
  149. package/dist/pipeline/parseStateKey.js.map +0 -1
  150. package/dist/pipeline/simplify.js +0 -516
  151. package/dist/pipeline/simplify.js.map +0 -1
  152. package/dist/pipeline/warnings.js +0 -18
  153. package/dist/pipeline/warnings.js.map +0 -1
  154. package/dist/plugins/okhsl-plugin.d.ts +0 -35
  155. package/dist/plugins/okhsl-plugin.js +0 -371
  156. package/dist/plugins/okhsl-plugin.js.map +0 -1
  157. package/dist/plugins/types.d.ts +0 -69
  158. package/dist/properties/index.js +0 -158
  159. package/dist/properties/index.js.map +0 -1
  160. package/dist/states/index.d.ts +0 -49
  161. package/dist/states/index.js +0 -416
  162. package/dist/states/index.js.map +0 -1
  163. package/dist/static/tastyStatic.d.ts +0 -46
  164. package/dist/static/tastyStatic.js +0 -31
  165. package/dist/static/tastyStatic.js.map +0 -1
  166. package/dist/static/types.d.ts +0 -49
  167. package/dist/static/types.js +0 -24
  168. package/dist/static/types.js.map +0 -1
  169. package/dist/styles/align.d.ts +0 -15
  170. package/dist/styles/align.js +0 -14
  171. package/dist/styles/align.js.map +0 -1
  172. package/dist/styles/border.d.ts +0 -25
  173. package/dist/styles/border.js +0 -114
  174. package/dist/styles/border.js.map +0 -1
  175. package/dist/styles/color.d.ts +0 -14
  176. package/dist/styles/color.js +0 -23
  177. package/dist/styles/color.js.map +0 -1
  178. package/dist/styles/createStyle.js +0 -77
  179. package/dist/styles/createStyle.js.map +0 -1
  180. package/dist/styles/dimension.js +0 -97
  181. package/dist/styles/dimension.js.map +0 -1
  182. package/dist/styles/display.d.ts +0 -37
  183. package/dist/styles/display.js +0 -67
  184. package/dist/styles/display.js.map +0 -1
  185. package/dist/styles/fade.d.ts +0 -15
  186. package/dist/styles/fade.js +0 -58
  187. package/dist/styles/fade.js.map +0 -1
  188. package/dist/styles/fill.d.ts +0 -42
  189. package/dist/styles/fill.js +0 -51
  190. package/dist/styles/fill.js.map +0 -1
  191. package/dist/styles/flow.d.ts +0 -16
  192. package/dist/styles/flow.js +0 -12
  193. package/dist/styles/flow.js.map +0 -1
  194. package/dist/styles/gap.d.ts +0 -31
  195. package/dist/styles/gap.js +0 -37
  196. package/dist/styles/gap.js.map +0 -1
  197. package/dist/styles/height.d.ts +0 -17
  198. package/dist/styles/height.js +0 -20
  199. package/dist/styles/height.js.map +0 -1
  200. package/dist/styles/index.d.ts +0 -2
  201. package/dist/styles/index.js +0 -9
  202. package/dist/styles/index.js.map +0 -1
  203. package/dist/styles/inset.d.ts +0 -52
  204. package/dist/styles/inset.js +0 -150
  205. package/dist/styles/inset.js.map +0 -1
  206. package/dist/styles/justify.d.ts +0 -15
  207. package/dist/styles/justify.js +0 -14
  208. package/dist/styles/justify.js.map +0 -1
  209. package/dist/styles/list.d.ts +0 -16
  210. package/dist/styles/list.js +0 -98
  211. package/dist/styles/list.js.map +0 -1
  212. package/dist/styles/margin.d.ts +0 -24
  213. package/dist/styles/margin.js +0 -104
  214. package/dist/styles/margin.js.map +0 -1
  215. package/dist/styles/outline.d.ts +0 -29
  216. package/dist/styles/outline.js +0 -65
  217. package/dist/styles/outline.js.map +0 -1
  218. package/dist/styles/padding.d.ts +0 -24
  219. package/dist/styles/padding.js +0 -104
  220. package/dist/styles/padding.js.map +0 -1
  221. package/dist/styles/predefined.d.ts +0 -73
  222. package/dist/styles/predefined.js +0 -241
  223. package/dist/styles/predefined.js.map +0 -1
  224. package/dist/styles/preset.d.ts +0 -47
  225. package/dist/styles/preset.js +0 -126
  226. package/dist/styles/preset.js.map +0 -1
  227. package/dist/styles/radius.d.ts +0 -14
  228. package/dist/styles/radius.js +0 -51
  229. package/dist/styles/radius.js.map +0 -1
  230. package/dist/styles/scrollbar.d.ts +0 -21
  231. package/dist/styles/scrollbar.js +0 -112
  232. package/dist/styles/scrollbar.js.map +0 -1
  233. package/dist/styles/shadow.d.ts +0 -14
  234. package/dist/styles/shadow.js +0 -24
  235. package/dist/styles/shadow.js.map +0 -1
  236. package/dist/styles/styledScrollbar.d.ts +0 -47
  237. package/dist/styles/styledScrollbar.js +0 -38
  238. package/dist/styles/styledScrollbar.js.map +0 -1
  239. package/dist/styles/transition.d.ts +0 -14
  240. package/dist/styles/transition.js +0 -158
  241. package/dist/styles/transition.js.map +0 -1
  242. package/dist/styles/types.d.ts +0 -498
  243. package/dist/styles/width.d.ts +0 -17
  244. package/dist/styles/width.js +0 -20
  245. package/dist/styles/width.js.map +0 -1
  246. package/dist/tasty.d.ts +0 -982
  247. package/dist/tasty.js +0 -206
  248. package/dist/tasty.js.map +0 -1
  249. package/dist/tokens/typography.d.ts +0 -19
  250. package/dist/tokens/typography.js +0 -237
  251. package/dist/tokens/typography.js.map +0 -1
  252. package/dist/types.d.ts +0 -184
  253. package/dist/utils/cache-wrapper.js +0 -26
  254. package/dist/utils/cache-wrapper.js.map +0 -1
  255. package/dist/utils/case-converter.js +0 -8
  256. package/dist/utils/case-converter.js.map +0 -1
  257. package/dist/utils/colors.d.ts +0 -5
  258. package/dist/utils/colors.js +0 -9
  259. package/dist/utils/colors.js.map +0 -1
  260. package/dist/utils/css-types.d.ts +0 -7
  261. package/dist/utils/dotize.d.ts +0 -26
  262. package/dist/utils/dotize.js +0 -122
  263. package/dist/utils/dotize.js.map +0 -1
  264. package/dist/utils/filter-base-props.d.ts +0 -15
  265. package/dist/utils/filter-base-props.js +0 -45
  266. package/dist/utils/filter-base-props.js.map +0 -1
  267. package/dist/utils/get-display-name.d.ts +0 -7
  268. package/dist/utils/get-display-name.js +0 -10
  269. package/dist/utils/get-display-name.js.map +0 -1
  270. package/dist/utils/hsl-to-rgb.js +0 -38
  271. package/dist/utils/hsl-to-rgb.js.map +0 -1
  272. package/dist/utils/is-dev-env.js +0 -19
  273. package/dist/utils/is-dev-env.js.map +0 -1
  274. package/dist/utils/is-valid-element-type.js +0 -15
  275. package/dist/utils/is-valid-element-type.js.map +0 -1
  276. package/dist/utils/merge-styles.js.map +0 -1
  277. package/dist/utils/mod-attrs.d.ts +0 -8
  278. package/dist/utils/mod-attrs.js +0 -21
  279. package/dist/utils/mod-attrs.js.map +0 -1
  280. package/dist/utils/okhsl-to-rgb.js +0 -296
  281. package/dist/utils/okhsl-to-rgb.js.map +0 -1
  282. package/dist/utils/process-tokens.d.ts +0 -31
  283. package/dist/utils/process-tokens.js +0 -171
  284. package/dist/utils/process-tokens.js.map +0 -1
  285. package/dist/utils/resolve-recipes.d.ts +0 -17
  286. package/dist/utils/resolve-recipes.js.map +0 -1
  287. package/dist/utils/string.js +0 -8
  288. package/dist/utils/string.js.map +0 -1
  289. package/dist/utils/styles.d.ts +0 -178
  290. package/dist/utils/styles.js +0 -590
  291. package/dist/utils/styles.js.map +0 -1
  292. package/dist/utils/typography.d.ts +0 -36
  293. package/dist/utils/typography.js +0 -53
  294. package/dist/utils/typography.js.map +0 -1
  295. package/dist/utils/warnings.d.ts +0 -16
  296. package/dist/utils/warnings.js +0 -16
  297. package/dist/utils/warnings.js.map +0 -1
  298. package/dist/zero/css-writer.d.ts +0 -45
  299. package/dist/zero/css-writer.js +0 -74
  300. package/dist/zero/css-writer.js.map +0 -1
  301. package/dist/zero/extractor.d.ts +0 -24
  302. package/dist/zero/extractor.js +0 -150
  303. package/dist/zero/extractor.js.map +0 -1
package/docs/debug.md ADDED
@@ -0,0 +1,320 @@
1
+ # Tasty Debug Utilities
2
+
3
+ Runtime CSS inspection and diagnostics for the Tasty styling system. Inspect injected styles, measure cache performance, analyze style chunks, and troubleshoot CSS issues — all from the browser console.
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ `tastyDebug` is a diagnostic object that exposes Tasty's runtime CSS state. It is designed for development use but can be manually installed in production for debugging.
10
+
11
+ In development mode (`isDevEnv()` returns `true`), `tastyDebug` is automatically installed on `window.tastyDebug`. In production, install it manually when needed.
12
+
13
+ All methods **log to the console by default**. Pass `{ raw: true }` to suppress logging and only return data.
14
+
15
+ > **Note (2.0.0+):** Class names use a content-addressed base36 hash format (e.g. `t3a5f`) instead of the previous sequential `t{number}` format. Cross-environment hydration reads the rendered class list from `window.__TASTY__` (the legacy `window.__TASTY_SSR_CACHE__` global was removed in 2.0.0).
16
+
17
+ ---
18
+
19
+ ## Quick Start
20
+
21
+ ```typescript
22
+ // Auto-installed in dev mode. Otherwise:
23
+ import { tastyDebug } from '@tenphi/tasty';
24
+ tastyDebug.install();
25
+
26
+ // Print a quick-start guide
27
+ tastyDebug.help();
28
+
29
+ // Get a comprehensive overview (logged automatically)
30
+ tastyDebug.summary();
31
+
32
+ // See all active CSS
33
+ tastyDebug.css('active');
34
+
35
+ // Inspect a specific element
36
+ tastyDebug.inspect('.my-button');
37
+
38
+ // Silent mode — return data only, no console output
39
+ const data = tastyDebug.summary({ raw: true });
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Options
45
+
46
+ All methods accept a shared options object:
47
+
48
+ ```typescript
49
+ interface DebugOptions {
50
+ root?: Document | ShadowRoot; // Target root (default: document)
51
+ raw?: boolean; // Suppress console logging (default: false)
52
+ }
53
+ ```
54
+
55
+ When `raw` is `false` (the default), results are logged to the console **and** returned. When `raw` is `true`, results are returned silently.
56
+
57
+ ---
58
+
59
+ ## API Reference
60
+
61
+ ### `css(target, opts?): string`
62
+
63
+ Retrieves CSS text for a given target. Logs the result with rule count and size.
64
+
65
+ **Targets:**
66
+
67
+ | Target | Description |
68
+ |---|---|
69
+ | `'all'` | All tasty CSS (component + global + raw) |
70
+ | `'active'` | CSS for classes currently in the DOM |
71
+ | `'unused'` | CSS with refCount = 0 (cached but not used) |
72
+ | `'global'` | Only global CSS (from `injectGlobal`) |
73
+ | `'page'` | All CSS on the page (including non-tasty) |
74
+ | `'t3a5f'` | CSS for a specific tasty class (class names are `t` + base36 hash) |
75
+ | `['t3a5f', 't9k2']` | CSS for multiple tasty classes |
76
+ | `'.my-button'` | CSS affecting a DOM element (by selector) |
77
+ | `element` | CSS affecting a DOM element (by reference) |
78
+
79
+ **Extra options:**
80
+
81
+ ```typescript
82
+ interface CssOptions extends DebugOptions {
83
+ prettify?: boolean; // Format output (default: true)
84
+ source?: boolean; // Read original CSS instead of live CSSOM (default: false, dev-mode only)
85
+ }
86
+ ```
87
+
88
+ ```typescript
89
+ // Active CSS with stats
90
+ tastyDebug.css('active');
91
+
92
+ // Specific class, silent
93
+ const css = tastyDebug.css('t3a5f', { raw: true });
94
+
95
+ // Compare original vs browser-parsed CSS (dev mode only)
96
+ tastyDebug.css('t3a5f'); // live CSSOM
97
+ tastyDebug.css('t3a5f', { source: true }); // original output
98
+
99
+ // Shadow DOM
100
+ tastyDebug.css('all', { root: shadowRoot });
101
+ ```
102
+
103
+ The `source` option reads from `RuleInfo.cssText`, which is only populated when `devMode` is active (development environment or `localStorage.TASTY_DEBUG = 'true'`). In production without debug mode, it falls back to the live CSSOM with a warning.
104
+
105
+ ---
106
+
107
+ ### `inspect(target, opts?): InspectResult`
108
+
109
+ Inspects a DOM element and returns detailed information about its tasty styles, including chunk assignments.
110
+
111
+ ```typescript
112
+ interface InspectResult {
113
+ element?: Element | null;
114
+ classes: string[]; // Tasty classes on the element
115
+ chunks: ChunkInfo[]; // Chunk assignment per class
116
+ css: string; // Prettified CSS
117
+ size: number; // CSS size in characters
118
+ rules: number; // Number of CSS rule blocks
119
+ }
120
+
121
+ interface ChunkInfo {
122
+ className: string;
123
+ chunkName: string | null; // e.g., 'appearance', 'font', 'dimension'
124
+ }
125
+ ```
126
+
127
+ ```typescript
128
+ tastyDebug.inspect('.my-card');
129
+ // Logs: inspect div — 3 classes, 5 rules, 1.2KB
130
+ // Chunks: t3a5f→appearance, t9k2→font, tb71→dimension
131
+
132
+ // Silent
133
+ const result = tastyDebug.inspect('.my-card', { raw: true });
134
+ console.log(result.classes); // ['t3a5f', 't9k2', 'tb71']
135
+ console.log(result.rules); // 5
136
+ ```
137
+
138
+ ---
139
+
140
+ ### `summary(opts?): Summary`
141
+
142
+ One-shot overview of the entire Tasty CSS state. Logs a compact report.
143
+
144
+ ```typescript
145
+ interface Summary {
146
+ activeClasses: string[];
147
+ unusedClasses: string[];
148
+ totalStyledClasses: string[];
149
+
150
+ activeCSSSize: number;
151
+ unusedCSSSize: number;
152
+ globalCSSSize: number;
153
+ rawCSSSize: number;
154
+ keyframesCSSSize: number;
155
+ propertyCSSSize: number;
156
+ totalCSSSize: number;
157
+
158
+ activeRuleCount: number;
159
+ unusedRuleCount: number;
160
+ globalRuleCount: number;
161
+ rawRuleCount: number;
162
+ keyframesRuleCount: number;
163
+ propertyRuleCount: number;
164
+ totalRuleCount: number;
165
+
166
+ metrics: CacheMetrics | null;
167
+ definedProperties: string[];
168
+ definedKeyframes: { name: string; refCount: number }[];
169
+ chunkBreakdown: ChunkBreakdown;
170
+ }
171
+ ```
172
+
173
+ ```typescript
174
+ // Logged automatically
175
+ tastyDebug.summary();
176
+ // Output:
177
+ // Active: 42 classes, 186 rules, 12.4KB
178
+ // Unused: 3 classes, 8 rules, 0.5KB
179
+ // Global: 12 rules, 1.1KB
180
+ // Total: 45 classes, 206 rules, 14.0KB
181
+ // Cache: 94.2% hit rate (312 lookups)
182
+
183
+ // Silent
184
+ const s = tastyDebug.summary({ raw: true });
185
+ console.log(s.totalRuleCount); // 206
186
+ ```
187
+
188
+ ---
189
+
190
+ ### `chunks(opts?): ChunkBreakdown`
191
+
192
+ Breakdown of styles by chunk type.
193
+
194
+ ```typescript
195
+ interface ChunkBreakdown {
196
+ byChunk: Record<string, {
197
+ classes: string[];
198
+ cssSize: number;
199
+ ruleCount: number;
200
+ }>;
201
+ totalChunkTypes: number;
202
+ totalClasses: number;
203
+ }
204
+ ```
205
+
206
+ ```typescript
207
+ tastyDebug.chunks();
208
+ // Output:
209
+ // appearance: 24 cls, 48 rules, 3.2KB
210
+ // font: 18 cls, 18 rules, 1.1KB
211
+ // dimension: 31 cls, 45 rules, 2.4KB
212
+ ```
213
+
214
+ Chunk types: `combined`, `appearance`, `font`, `dimension`, `display`, `layout`, `position`, `misc`, `subcomponents`.
215
+
216
+ ---
217
+
218
+ ### `cache(opts?): CacheStatus`
219
+
220
+ Cache state and performance metrics.
221
+
222
+ ```typescript
223
+ interface CacheStatus {
224
+ classes: {
225
+ active: string[];
226
+ unused: string[];
227
+ all: string[];
228
+ };
229
+ metrics: CacheMetrics | null;
230
+ }
231
+ ```
232
+
233
+ ```typescript
234
+ tastyDebug.cache();
235
+ // Output:
236
+ // Active: 42, Unused: 3
237
+ // Hits: 294, Misses: 18, Rate: 94.2%
238
+ ```
239
+
240
+ ---
241
+
242
+ ### `cleanup(opts?): void`
243
+
244
+ Forces immediate cleanup of all unused styles (those with `refCount = 0`).
245
+
246
+ ```typescript
247
+ tastyDebug.cleanup();
248
+ tastyDebug.cleanup({ root: shadowRoot });
249
+ ```
250
+
251
+ ---
252
+
253
+ ### `help(): void`
254
+
255
+ Prints a quick-start guide to the console.
256
+
257
+ ```typescript
258
+ tastyDebug.help();
259
+ ```
260
+
261
+ ---
262
+
263
+ ### `install(): void`
264
+
265
+ Attaches `tastyDebug` to `window.tastyDebug`. Called automatically in development mode.
266
+
267
+ ```typescript
268
+ import { tastyDebug } from '@tenphi/tasty';
269
+ tastyDebug.install();
270
+ ```
271
+
272
+ ---
273
+
274
+ ## Shadow DOM Support
275
+
276
+ All methods accept a `root` option to target a Shadow DOM:
277
+
278
+ ```typescript
279
+ const shadowRoot = host.shadowRoot;
280
+ tastyDebug.css('all', { root: shadowRoot });
281
+ tastyDebug.inspect('.shadow-component', { root: shadowRoot });
282
+ tastyDebug.summary({ root: shadowRoot });
283
+ ```
284
+
285
+ ---
286
+
287
+ ## Common Workflows
288
+
289
+ ### Debugging a component's styles
290
+
291
+ ```typescript
292
+ // 1. Inspect the element
293
+ tastyDebug.inspect('.my-button');
294
+
295
+ // 2. See CSS for a specific class
296
+ tastyDebug.css('t3a5f');
297
+
298
+ // 3. Compare original vs browser-parsed (dev mode)
299
+ tastyDebug.css('t3a5f', { source: true });
300
+ ```
301
+
302
+ ### Checking cache efficiency
303
+
304
+ ```typescript
305
+ const { metrics } = tastyDebug.cache({ raw: true });
306
+ if (metrics) {
307
+ const total = metrics.hits + metrics.misses;
308
+ const rate = total > 0 ? ((metrics.hits / total) * 100).toFixed(1) : 0;
309
+ console.log(`Cache hit rate: ${rate}%`);
310
+ }
311
+ ```
312
+
313
+ ### Monitoring CSS growth
314
+
315
+ ```typescript
316
+ const s = tastyDebug.summary({ raw: true });
317
+ console.log(`Total: ${s.totalRuleCount} rules, ${(s.totalCSSSize / 1024).toFixed(1)}KB`);
318
+ console.log(`Active: ${s.activeRuleCount} rules`);
319
+ console.log(`Unused: ${s.unusedRuleCount} rules`);
320
+ ```