@tenphi/tasty 0.0.0-snapshot.bbd10c7 → 0.0.0-snapshot.bbfcd75

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 (370) hide show
  1. package/README.md +196 -140
  2. package/dist/babel-Zs1Q03qt.d.ts +83 -0
  3. package/dist/chunks/async-storage-CG5HnUT5.js +20 -0
  4. package/dist/chunks/async-storage-CG5HnUT5.js.map +1 -0
  5. package/dist/chunks/build-config-CUQVwdWF.js +42 -0
  6. package/dist/chunks/build-config-CUQVwdWF.js.map +1 -0
  7. package/dist/chunks/collector-B0LTHw6Z.js +208 -0
  8. package/dist/chunks/collector-B0LTHw6Z.js.map +1 -0
  9. package/dist/chunks/config-engine-C3pF9EK9.js +267 -0
  10. package/dist/chunks/config-engine-C3pF9EK9.js.map +1 -0
  11. package/dist/chunks/css-definitions-D_it4XZH.js +875 -0
  12. package/dist/chunks/css-definitions-D_it4XZH.js.map +1 -0
  13. package/dist/chunks/css-resources-BN8apgxt.js +142 -0
  14. package/dist/chunks/css-resources-BN8apgxt.js.map +1 -0
  15. package/dist/{debug.js → chunks/debug-C9LeNVoJ.js} +187 -139
  16. package/dist/chunks/debug-C9LeNVoJ.js.map +1 -0
  17. package/dist/chunks/dsl-C5yuAn41.js +1373 -0
  18. package/dist/chunks/dsl-C5yuAn41.js.map +1 -0
  19. package/dist/chunks/hydration-TRcz5vnk.js +41 -0
  20. package/dist/chunks/hydration-TRcz5vnk.js.map +1 -0
  21. package/dist/chunks/react-runtime-O-OUrKLH.js +557 -0
  22. package/dist/chunks/react-runtime-O-OUrKLH.js.map +1 -0
  23. package/dist/chunks/runtime-engine-DvnE2g-E.js +2437 -0
  24. package/dist/chunks/runtime-engine-DvnE2g-E.js.map +1 -0
  25. package/dist/chunks/runtime-state-BTDqSYBk.js +127 -0
  26. package/dist/chunks/runtime-state-BTDqSYBk.js.map +1 -0
  27. package/dist/{utils/merge-styles.js → chunks/shared-utils-DWA4LjIa.js} +55 -55
  28. package/dist/chunks/shared-utils-DWA4LjIa.js.map +1 -0
  29. package/dist/chunks/style-engine-C1ECBZxR.js +5131 -0
  30. package/dist/chunks/style-engine-C1ECBZxR.js.map +1 -0
  31. package/dist/{zero/extractor.js → chunks/zero-engine-B6EnYcXY.js} +89 -82
  32. package/dist/chunks/zero-engine-B6EnYcXY.js.map +1 -0
  33. package/dist/collector-hl5KNH7k.d.ts +165 -0
  34. package/dist/config-DWL1ZYue.d.ts +1358 -0
  35. package/dist/core/index.d.ts +5 -34
  36. package/dist/core/index.js +9 -27
  37. package/dist/index-D9N9GV24.d.ts +1947 -0
  38. package/dist/index.d.ts +5 -51
  39. package/dist/index.js +11 -36
  40. package/dist/{utils/merge-styles.d.ts → merge-styles-C_oMoJVd.d.ts} +3 -3
  41. package/dist/ssr/astro-client.js +6 -0
  42. package/dist/ssr/astro-client.js.map +1 -0
  43. package/dist/ssr/astro-middleware-extract-static.d.ts +11 -0
  44. package/dist/ssr/astro-middleware-extract-static.js +9 -0
  45. package/dist/ssr/astro-middleware-extract-static.js.map +1 -0
  46. package/dist/ssr/astro-middleware-extract.d.ts +11 -0
  47. package/dist/ssr/astro-middleware-extract.js +9 -0
  48. package/dist/ssr/astro-middleware-extract.js.map +1 -0
  49. package/dist/ssr/astro-middleware-static.d.ts +18 -0
  50. package/dist/ssr/astro-middleware-static.js +7 -0
  51. package/dist/ssr/astro-middleware-static.js.map +1 -0
  52. package/dist/ssr/astro-middleware.d.ts +19 -0
  53. package/dist/ssr/astro-middleware.js +7 -0
  54. package/dist/ssr/astro-middleware.js.map +1 -0
  55. package/dist/ssr/astro.d.ts +117 -11
  56. package/dist/ssr/astro.js +204 -48
  57. package/dist/ssr/astro.js.map +1 -1
  58. package/dist/ssr/index.d.ts +37 -4
  59. package/dist/ssr/index.js +6 -6
  60. package/dist/ssr/index.js.map +1 -1
  61. package/dist/ssr/next-config.d.ts +66 -0
  62. package/dist/ssr/next-config.js +124 -0
  63. package/dist/ssr/next-config.js.map +1 -0
  64. package/dist/ssr/next.d.ts +14 -5
  65. package/dist/ssr/next.js +31 -46
  66. package/dist/ssr/next.js.map +1 -1
  67. package/dist/static/index.d.ts +91 -5
  68. package/dist/static/index.js +31 -3
  69. package/dist/static/index.js.map +1 -0
  70. package/dist/static/inject.js.map +1 -1
  71. package/dist/types-jKZNpias.d.ts +1616 -0
  72. package/dist/zero/babel.d.ts +2 -182
  73. package/dist/zero/babel.js +82 -113
  74. package/dist/zero/babel.js.map +1 -1
  75. package/dist/zero/index.d.ts +81 -3
  76. package/dist/zero/index.js +2 -3
  77. package/dist/zero/next.d.ts +1 -1
  78. package/dist/zero/next.js +0 -31
  79. package/dist/zero/next.js.map +1 -1
  80. package/docs/README.md +20 -12
  81. package/docs/adoption.md +59 -32
  82. package/docs/ai-agents.md +229 -0
  83. package/docs/comparison.md +76 -48
  84. package/docs/configuration.md +566 -69
  85. package/docs/debug.md +37 -23
  86. package/docs/design-system.md +63 -32
  87. package/docs/dsl.md +527 -179
  88. package/docs/getting-started.md +62 -41
  89. package/docs/injector.md +157 -51
  90. package/docs/methodology.md +69 -37
  91. package/docs/migration-v3.md +285 -0
  92. package/docs/pipeline.md +744 -0
  93. package/docs/plugins.md +353 -0
  94. package/docs/{runtime.md → react-api.md} +176 -67
  95. package/docs/runtime-benchmarks.md +377 -0
  96. package/docs/ssr.md +350 -94
  97. package/docs/styles.md +108 -27
  98. package/docs/tasty-static.md +149 -87
  99. package/package.json +121 -23
  100. package/tasty.config.ts +6 -0
  101. package/dist/_virtual/_rolldown/runtime.js +0 -7
  102. package/dist/chunks/cacheKey.js +0 -77
  103. package/dist/chunks/cacheKey.js.map +0 -1
  104. package/dist/chunks/definitions.d.ts +0 -37
  105. package/dist/chunks/definitions.js +0 -258
  106. package/dist/chunks/definitions.js.map +0 -1
  107. package/dist/chunks/index.d.ts +0 -1
  108. package/dist/chunks/renderChunk.d.ts +0 -1
  109. package/dist/chunks/renderChunk.js +0 -59
  110. package/dist/chunks/renderChunk.js.map +0 -1
  111. package/dist/compute-styles.d.ts +0 -31
  112. package/dist/compute-styles.js +0 -356
  113. package/dist/compute-styles.js.map +0 -1
  114. package/dist/config.d.ts +0 -372
  115. package/dist/config.js +0 -507
  116. package/dist/config.js.map +0 -1
  117. package/dist/counter-style/index.js +0 -51
  118. package/dist/counter-style/index.js.map +0 -1
  119. package/dist/debug.d.ts +0 -89
  120. package/dist/debug.js.map +0 -1
  121. package/dist/font-face/index.js +0 -63
  122. package/dist/font-face/index.js.map +0 -1
  123. package/dist/hooks/index.d.ts +0 -7
  124. package/dist/hooks/useCounterStyle.d.ts +0 -50
  125. package/dist/hooks/useCounterStyle.js +0 -45
  126. package/dist/hooks/useCounterStyle.js.map +0 -1
  127. package/dist/hooks/useFontFace.d.ts +0 -43
  128. package/dist/hooks/useFontFace.js +0 -69
  129. package/dist/hooks/useFontFace.js.map +0 -1
  130. package/dist/hooks/useGlobalStyles.d.ts +0 -30
  131. package/dist/hooks/useGlobalStyles.js +0 -77
  132. package/dist/hooks/useGlobalStyles.js.map +0 -1
  133. package/dist/hooks/useKeyframes.d.ts +0 -56
  134. package/dist/hooks/useKeyframes.js +0 -63
  135. package/dist/hooks/useKeyframes.js.map +0 -1
  136. package/dist/hooks/useProperty.d.ts +0 -79
  137. package/dist/hooks/useProperty.js +0 -108
  138. package/dist/hooks/useProperty.js.map +0 -1
  139. package/dist/hooks/useRawCSS.d.ts +0 -53
  140. package/dist/hooks/useRawCSS.js +0 -34
  141. package/dist/hooks/useRawCSS.js.map +0 -1
  142. package/dist/hooks/useStyles.d.ts +0 -40
  143. package/dist/hooks/useStyles.js +0 -29
  144. package/dist/hooks/useStyles.js.map +0 -1
  145. package/dist/injector/index.d.ts +0 -166
  146. package/dist/injector/index.js +0 -166
  147. package/dist/injector/index.js.map +0 -1
  148. package/dist/injector/injector.d.ts +0 -166
  149. package/dist/injector/injector.js +0 -464
  150. package/dist/injector/injector.js.map +0 -1
  151. package/dist/injector/sheet-manager.d.ts +0 -136
  152. package/dist/injector/sheet-manager.js +0 -733
  153. package/dist/injector/sheet-manager.js.map +0 -1
  154. package/dist/injector/types.d.ts +0 -204
  155. package/dist/keyframes/index.js +0 -206
  156. package/dist/keyframes/index.js.map +0 -1
  157. package/dist/parser/classify.js +0 -319
  158. package/dist/parser/classify.js.map +0 -1
  159. package/dist/parser/const.js +0 -60
  160. package/dist/parser/const.js.map +0 -1
  161. package/dist/parser/lru.js +0 -109
  162. package/dist/parser/lru.js.map +0 -1
  163. package/dist/parser/parser.d.ts +0 -25
  164. package/dist/parser/parser.js +0 -115
  165. package/dist/parser/parser.js.map +0 -1
  166. package/dist/parser/tokenizer.js +0 -69
  167. package/dist/parser/tokenizer.js.map +0 -1
  168. package/dist/parser/types.d.ts +0 -51
  169. package/dist/parser/types.js +0 -46
  170. package/dist/parser/types.js.map +0 -1
  171. package/dist/pipeline/conditions.d.ts +0 -134
  172. package/dist/pipeline/conditions.js +0 -406
  173. package/dist/pipeline/conditions.js.map +0 -1
  174. package/dist/pipeline/exclusive.js +0 -230
  175. package/dist/pipeline/exclusive.js.map +0 -1
  176. package/dist/pipeline/index.d.ts +0 -55
  177. package/dist/pipeline/index.js +0 -708
  178. package/dist/pipeline/index.js.map +0 -1
  179. package/dist/pipeline/materialize.js +0 -1103
  180. package/dist/pipeline/materialize.js.map +0 -1
  181. package/dist/pipeline/parseStateKey.d.ts +0 -15
  182. package/dist/pipeline/parseStateKey.js +0 -446
  183. package/dist/pipeline/parseStateKey.js.map +0 -1
  184. package/dist/pipeline/simplify.js +0 -515
  185. package/dist/pipeline/simplify.js.map +0 -1
  186. package/dist/pipeline/warnings.js +0 -18
  187. package/dist/pipeline/warnings.js.map +0 -1
  188. package/dist/plugins/index.d.ts +0 -2
  189. package/dist/plugins/okhsl-plugin.d.ts +0 -35
  190. package/dist/plugins/okhsl-plugin.js +0 -97
  191. package/dist/plugins/okhsl-plugin.js.map +0 -1
  192. package/dist/plugins/types.d.ts +0 -76
  193. package/dist/properties/index.js +0 -222
  194. package/dist/properties/index.js.map +0 -1
  195. package/dist/properties/property-type-resolver.d.ts +0 -24
  196. package/dist/properties/property-type-resolver.js +0 -90
  197. package/dist/properties/property-type-resolver.js.map +0 -1
  198. package/dist/ssr/async-storage.d.ts +0 -17
  199. package/dist/ssr/async-storage.js +0 -34
  200. package/dist/ssr/async-storage.js.map +0 -1
  201. package/dist/ssr/collect-auto-properties.js +0 -39
  202. package/dist/ssr/collect-auto-properties.js.map +0 -1
  203. package/dist/ssr/collector.d.ts +0 -102
  204. package/dist/ssr/collector.js +0 -219
  205. package/dist/ssr/collector.js.map +0 -1
  206. package/dist/ssr/format-global-rules.js +0 -22
  207. package/dist/ssr/format-global-rules.js.map +0 -1
  208. package/dist/ssr/format-keyframes.js +0 -69
  209. package/dist/ssr/format-keyframes.js.map +0 -1
  210. package/dist/ssr/format-property.js +0 -49
  211. package/dist/ssr/format-property.js.map +0 -1
  212. package/dist/ssr/format-rules.js +0 -73
  213. package/dist/ssr/format-rules.js.map +0 -1
  214. package/dist/ssr/hydrate.d.ts +0 -22
  215. package/dist/ssr/hydrate.js +0 -49
  216. package/dist/ssr/hydrate.js.map +0 -1
  217. package/dist/ssr/ssr-collector-ref.js +0 -12
  218. package/dist/ssr/ssr-collector-ref.js.map +0 -1
  219. package/dist/states/index.d.ts +0 -49
  220. package/dist/states/index.js +0 -170
  221. package/dist/states/index.js.map +0 -1
  222. package/dist/static/tastyStatic.d.ts +0 -46
  223. package/dist/static/tastyStatic.js +0 -30
  224. package/dist/static/tastyStatic.js.map +0 -1
  225. package/dist/static/types.d.ts +0 -49
  226. package/dist/static/types.js +0 -24
  227. package/dist/static/types.js.map +0 -1
  228. package/dist/styles/border.d.ts +0 -25
  229. package/dist/styles/border.js +0 -120
  230. package/dist/styles/border.js.map +0 -1
  231. package/dist/styles/color.d.ts +0 -14
  232. package/dist/styles/color.js +0 -26
  233. package/dist/styles/color.js.map +0 -1
  234. package/dist/styles/const.js +0 -17
  235. package/dist/styles/const.js.map +0 -1
  236. package/dist/styles/createStyle.js +0 -79
  237. package/dist/styles/createStyle.js.map +0 -1
  238. package/dist/styles/dimension.js +0 -109
  239. package/dist/styles/dimension.js.map +0 -1
  240. package/dist/styles/directional.js +0 -133
  241. package/dist/styles/directional.js.map +0 -1
  242. package/dist/styles/display.d.ts +0 -30
  243. package/dist/styles/display.js +0 -73
  244. package/dist/styles/display.js.map +0 -1
  245. package/dist/styles/fade.d.ts +0 -15
  246. package/dist/styles/fade.js +0 -62
  247. package/dist/styles/fade.js.map +0 -1
  248. package/dist/styles/fill.d.ts +0 -42
  249. package/dist/styles/fill.js +0 -51
  250. package/dist/styles/fill.js.map +0 -1
  251. package/dist/styles/flow.d.ts +0 -16
  252. package/dist/styles/flow.js +0 -12
  253. package/dist/styles/flow.js.map +0 -1
  254. package/dist/styles/gap.d.ts +0 -31
  255. package/dist/styles/gap.js +0 -38
  256. package/dist/styles/gap.js.map +0 -1
  257. package/dist/styles/height.d.ts +0 -17
  258. package/dist/styles/height.js +0 -19
  259. package/dist/styles/height.js.map +0 -1
  260. package/dist/styles/index.d.ts +0 -1
  261. package/dist/styles/index.js +0 -8
  262. package/dist/styles/index.js.map +0 -1
  263. package/dist/styles/inset.d.ts +0 -24
  264. package/dist/styles/inset.js +0 -34
  265. package/dist/styles/inset.js.map +0 -1
  266. package/dist/styles/list.d.ts +0 -16
  267. package/dist/styles/list.js +0 -100
  268. package/dist/styles/list.js.map +0 -1
  269. package/dist/styles/margin.d.ts +0 -24
  270. package/dist/styles/margin.js +0 -32
  271. package/dist/styles/margin.js.map +0 -1
  272. package/dist/styles/outline.d.ts +0 -29
  273. package/dist/styles/outline.js +0 -55
  274. package/dist/styles/outline.js.map +0 -1
  275. package/dist/styles/padding.d.ts +0 -24
  276. package/dist/styles/padding.js +0 -32
  277. package/dist/styles/padding.js.map +0 -1
  278. package/dist/styles/placement.d.ts +0 -37
  279. package/dist/styles/placement.js +0 -74
  280. package/dist/styles/placement.js.map +0 -1
  281. package/dist/styles/predefined.d.ts +0 -71
  282. package/dist/styles/predefined.js +0 -237
  283. package/dist/styles/predefined.js.map +0 -1
  284. package/dist/styles/preset.d.ts +0 -52
  285. package/dist/styles/preset.js +0 -127
  286. package/dist/styles/preset.js.map +0 -1
  287. package/dist/styles/radius.d.ts +0 -12
  288. package/dist/styles/radius.js +0 -83
  289. package/dist/styles/radius.js.map +0 -1
  290. package/dist/styles/scrollMargin.d.ts +0 -24
  291. package/dist/styles/scrollMargin.js +0 -32
  292. package/dist/styles/scrollMargin.js.map +0 -1
  293. package/dist/styles/scrollbar.d.ts +0 -25
  294. package/dist/styles/scrollbar.js +0 -51
  295. package/dist/styles/scrollbar.js.map +0 -1
  296. package/dist/styles/shadow.d.ts +0 -14
  297. package/dist/styles/shadow.js +0 -25
  298. package/dist/styles/shadow.js.map +0 -1
  299. package/dist/styles/shared.js +0 -17
  300. package/dist/styles/shared.js.map +0 -1
  301. package/dist/styles/transition.d.ts +0 -14
  302. package/dist/styles/transition.js +0 -159
  303. package/dist/styles/transition.js.map +0 -1
  304. package/dist/styles/types.d.ts +0 -564
  305. package/dist/styles/width.d.ts +0 -17
  306. package/dist/styles/width.js +0 -19
  307. package/dist/styles/width.js.map +0 -1
  308. package/dist/tasty.d.ts +0 -134
  309. package/dist/tasty.js +0 -240
  310. package/dist/tasty.js.map +0 -1
  311. package/dist/types.d.ts +0 -184
  312. package/dist/utils/cache-wrapper.js +0 -21
  313. package/dist/utils/cache-wrapper.js.map +0 -1
  314. package/dist/utils/case-converter.js +0 -8
  315. package/dist/utils/case-converter.js.map +0 -1
  316. package/dist/utils/color-math.d.ts +0 -46
  317. package/dist/utils/color-math.js +0 -749
  318. package/dist/utils/color-math.js.map +0 -1
  319. package/dist/utils/color-space.d.ts +0 -5
  320. package/dist/utils/color-space.js +0 -228
  321. package/dist/utils/color-space.js.map +0 -1
  322. package/dist/utils/colors.d.ts +0 -5
  323. package/dist/utils/colors.js +0 -10
  324. package/dist/utils/colors.js.map +0 -1
  325. package/dist/utils/css-types.d.ts +0 -7
  326. package/dist/utils/dotize.d.ts +0 -26
  327. package/dist/utils/dotize.js +0 -122
  328. package/dist/utils/dotize.js.map +0 -1
  329. package/dist/utils/filter-base-props.d.ts +0 -15
  330. package/dist/utils/filter-base-props.js +0 -45
  331. package/dist/utils/filter-base-props.js.map +0 -1
  332. package/dist/utils/get-display-name.d.ts +0 -7
  333. package/dist/utils/get-display-name.js +0 -10
  334. package/dist/utils/get-display-name.js.map +0 -1
  335. package/dist/utils/has-keys.js +0 -13
  336. package/dist/utils/has-keys.js.map +0 -1
  337. package/dist/utils/is-dev-env.js +0 -19
  338. package/dist/utils/is-dev-env.js.map +0 -1
  339. package/dist/utils/is-valid-element-type.js +0 -15
  340. package/dist/utils/is-valid-element-type.js.map +0 -1
  341. package/dist/utils/merge-styles.js.map +0 -1
  342. package/dist/utils/mod-attrs.d.ts +0 -6
  343. package/dist/utils/mod-attrs.js +0 -20
  344. package/dist/utils/mod-attrs.js.map +0 -1
  345. package/dist/utils/process-tokens.d.ts +0 -17
  346. package/dist/utils/process-tokens.js +0 -83
  347. package/dist/utils/process-tokens.js.map +0 -1
  348. package/dist/utils/resolve-recipes.d.ts +0 -17
  349. package/dist/utils/resolve-recipes.js +0 -146
  350. package/dist/utils/resolve-recipes.js.map +0 -1
  351. package/dist/utils/selector-transform.js +0 -32
  352. package/dist/utils/selector-transform.js.map +0 -1
  353. package/dist/utils/string.js +0 -8
  354. package/dist/utils/string.js.map +0 -1
  355. package/dist/utils/styles.d.ts +0 -99
  356. package/dist/utils/styles.js +0 -220
  357. package/dist/utils/styles.js.map +0 -1
  358. package/dist/utils/typography.d.ts +0 -47
  359. package/dist/utils/typography.js +0 -51
  360. package/dist/utils/typography.js.map +0 -1
  361. package/dist/utils/warnings.d.ts +0 -16
  362. package/dist/utils/warnings.js +0 -16
  363. package/dist/utils/warnings.js.map +0 -1
  364. package/dist/zero/css-writer.d.ts +0 -45
  365. package/dist/zero/css-writer.js +0 -73
  366. package/dist/zero/css-writer.js.map +0 -1
  367. package/dist/zero/extractor.d.ts +0 -24
  368. package/dist/zero/extractor.js.map +0 -1
  369. package/docs/PIPELINE.md +0 -519
  370. /package/dist/{chunks/cacheKey.d.ts → ssr/astro-client.d.ts} +0 -0
@@ -1,56 +0,0 @@
1
- import { KeyframesSteps } from "../injector/types.js";
2
-
3
- //#region src/hooks/useKeyframes.d.ts
4
- interface UseKeyframesOptions {
5
- name?: string;
6
- root?: Document | ShadowRoot;
7
- }
8
- /**
9
- * Hook to inject CSS @keyframes and return the generated animation name.
10
- * Handles keyframes injection with proper cleanup on unmount or dependency changes.
11
- *
12
- * @example Basic usage - steps object is the dependency
13
- * ```tsx
14
- * function MyComponent() {
15
- * const bounce = useKeyframes({
16
- * '0%': { transform: 'scale(1)' },
17
- * '50%': { transform: 'scale(1.1)' },
18
- * '100%': { transform: 'scale(1)' },
19
- * });
20
- *
21
- * return <div style={{ animation: `${bounce} 1s infinite` }}>Bouncing</div>;
22
- * }
23
- * ```
24
- *
25
- * @example With custom name
26
- * ```tsx
27
- * function MyComponent() {
28
- * const fadeIn = useKeyframes(
29
- * { from: { opacity: 0 }, to: { opacity: 1 } },
30
- * { name: 'fadeIn' }
31
- * );
32
- *
33
- * return <div style={{ animation: `${fadeIn} 0.3s ease-out` }}>Fading in</div>;
34
- * }
35
- * ```
36
- *
37
- * @example Factory function with dependencies
38
- * ```tsx
39
- * function MyComponent({ scale }: { scale: number }) {
40
- * const pulse = useKeyframes(
41
- * () => ({
42
- * '0%': { transform: 'scale(1)' },
43
- * '100%': { transform: `scale(${scale})` },
44
- * }),
45
- * [scale]
46
- * );
47
- *
48
- * return <div style={{ animation: `${pulse} 1s infinite` }}>Pulsing</div>;
49
- * }
50
- * ```
51
- */
52
- declare function useKeyframes(steps: KeyframesSteps, options?: UseKeyframesOptions): string;
53
- declare function useKeyframes(factory: () => KeyframesSteps, deps: readonly unknown[], options?: UseKeyframesOptions): string;
54
- //#endregion
55
- export { useKeyframes };
56
- //# sourceMappingURL=useKeyframes.d.ts.map
@@ -1,63 +0,0 @@
1
- import { keyframes } from "../injector/index.js";
2
- import { formatKeyframesCSS } from "../ssr/format-keyframes.js";
3
- import { getRegisteredSSRCollector } from "../ssr/ssr-collector-ref.js";
4
- import { useInsertionEffect, useMemo, useRef } from "react";
5
- //#region src/hooks/useKeyframes.ts
6
- function useKeyframes(stepsOrFactory, depsOrOptions, options) {
7
- const ssrCollector = getRegisteredSSRCollector();
8
- const isFactory = typeof stepsOrFactory === "function";
9
- const deps = isFactory && Array.isArray(depsOrOptions) ? depsOrOptions : void 0;
10
- const opts = isFactory ? options : depsOrOptions;
11
- const stepsData = useMemo(() => {
12
- const steps = isFactory ? stepsOrFactory() : stepsOrFactory;
13
- if (!steps || Object.keys(steps).length === 0) return null;
14
- return steps;
15
- }, isFactory ? deps ?? [] : [stepsOrFactory]);
16
- const renderResultRef = useRef(null);
17
- const effectResultRef = useRef(null);
18
- const name = useMemo(() => {
19
- if (!stepsData) return "";
20
- if (ssrCollector) {
21
- const actualName = ssrCollector.allocateKeyframeName(opts?.name);
22
- const css = formatKeyframesCSS(actualName, stepsData);
23
- ssrCollector.collectKeyframes(actualName, css);
24
- return actualName;
25
- }
26
- renderResultRef.current?.dispose();
27
- renderResultRef.current = null;
28
- const result = keyframes(stepsData, {
29
- name: opts?.name,
30
- root: opts?.root
31
- });
32
- renderResultRef.current = result;
33
- return result.toString();
34
- }, [
35
- stepsData,
36
- opts?.name,
37
- opts?.root,
38
- ssrCollector
39
- ]);
40
- useInsertionEffect(() => {
41
- effectResultRef.current?.dispose();
42
- effectResultRef.current = null;
43
- if (stepsData) effectResultRef.current = keyframes(stepsData, {
44
- name: opts?.name,
45
- root: opts?.root
46
- });
47
- return () => {
48
- effectResultRef.current?.dispose();
49
- effectResultRef.current = null;
50
- renderResultRef.current?.dispose();
51
- renderResultRef.current = null;
52
- };
53
- }, [
54
- stepsData,
55
- opts?.name,
56
- opts?.root
57
- ]);
58
- return name;
59
- }
60
- //#endregion
61
- export { useKeyframes };
62
-
63
- //# sourceMappingURL=useKeyframes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useKeyframes.js","names":[],"sources":["../../src/hooks/useKeyframes.ts"],"sourcesContent":["import { useInsertionEffect, useMemo, useRef } from 'react';\n\nimport { keyframes } from '../injector';\nimport type { KeyframesResult, KeyframesSteps } from '../injector/types';\nimport { formatKeyframesCSS } from '../ssr/format-keyframes';\nimport { getRegisteredSSRCollector } from '../ssr/ssr-collector-ref';\n\ninterface UseKeyframesOptions {\n name?: string;\n root?: Document | ShadowRoot;\n}\n\n/**\n * Hook to inject CSS @keyframes and return the generated animation name.\n * Handles keyframes injection with proper cleanup on unmount or dependency changes.\n *\n * @example Basic usage - steps object is the dependency\n * ```tsx\n * function MyComponent() {\n * const bounce = useKeyframes({\n * '0%': { transform: 'scale(1)' },\n * '50%': { transform: 'scale(1.1)' },\n * '100%': { transform: 'scale(1)' },\n * });\n *\n * return <div style={{ animation: `${bounce} 1s infinite` }}>Bouncing</div>;\n * }\n * ```\n *\n * @example With custom name\n * ```tsx\n * function MyComponent() {\n * const fadeIn = useKeyframes(\n * { from: { opacity: 0 }, to: { opacity: 1 } },\n * { name: 'fadeIn' }\n * );\n *\n * return <div style={{ animation: `${fadeIn} 0.3s ease-out` }}>Fading in</div>;\n * }\n * ```\n *\n * @example Factory function with dependencies\n * ```tsx\n * function MyComponent({ scale }: { scale: number }) {\n * const pulse = useKeyframes(\n * () => ({\n * '0%': { transform: 'scale(1)' },\n * '100%': { transform: `scale(${scale})` },\n * }),\n * [scale]\n * );\n *\n * return <div style={{ animation: `${pulse} 1s infinite` }}>Pulsing</div>;\n * }\n * ```\n */\n\n// Overload 1: Static steps object\nexport function useKeyframes(\n steps: KeyframesSteps,\n options?: UseKeyframesOptions,\n): string;\n\n// Overload 2: Factory function with dependencies\nexport function useKeyframes(\n factory: () => KeyframesSteps,\n deps: readonly unknown[],\n options?: UseKeyframesOptions,\n): string;\n\n// Implementation\nexport function useKeyframes(\n stepsOrFactory: KeyframesSteps | (() => KeyframesSteps),\n depsOrOptions?: readonly unknown[] | UseKeyframesOptions,\n options?: UseKeyframesOptions,\n): string {\n const ssrCollector = getRegisteredSSRCollector();\n\n // Detect which overload is being used\n const isFactory = typeof stepsOrFactory === 'function';\n\n // Parse arguments based on overload\n const deps =\n isFactory && Array.isArray(depsOrOptions) ? depsOrOptions : undefined;\n const opts = isFactory\n ? options\n : (depsOrOptions as UseKeyframesOptions | undefined);\n\n // Memoize the keyframes steps to get a stable reference\n const stepsData = useMemo(\n () => {\n const steps = isFactory\n ? (stepsOrFactory as () => KeyframesSteps)()\n : (stepsOrFactory as KeyframesSteps);\n\n if (!steps || Object.keys(steps).length === 0) {\n return null;\n }\n\n return steps;\n },\n\n isFactory ? (deps ?? []) : [stepsOrFactory],\n );\n\n // Store keyframes results for cleanup (client only)\n const renderResultRef = useRef<KeyframesResult | null>(null);\n const effectResultRef = useRef<KeyframesResult | null>(null);\n\n const name = useMemo(() => {\n if (!stepsData) {\n return '';\n }\n\n // SSR path: format and collect, return name without DOM injection\n if (ssrCollector) {\n const actualName = ssrCollector.allocateKeyframeName(opts?.name);\n const css = formatKeyframesCSS(actualName, stepsData);\n ssrCollector.collectKeyframes(actualName, css);\n return actualName;\n }\n\n // Client path: inject keyframes synchronously for immediate name availability\n renderResultRef.current?.dispose();\n renderResultRef.current = null;\n\n const result = keyframes(stepsData, {\n name: opts?.name,\n root: opts?.root,\n });\n\n renderResultRef.current = result;\n\n return result.toString();\n }, [stepsData, opts?.name, opts?.root, ssrCollector]);\n\n // Client path: handle Strict Mode double-invocation and cleanup\n useInsertionEffect(() => {\n effectResultRef.current?.dispose();\n effectResultRef.current = null;\n\n if (stepsData) {\n const result = keyframes(stepsData, {\n name: opts?.name,\n root: opts?.root,\n });\n effectResultRef.current = result;\n }\n\n return () => {\n effectResultRef.current?.dispose();\n effectResultRef.current = null;\n renderResultRef.current?.dispose();\n renderResultRef.current = null;\n };\n }, [stepsData, opts?.name, opts?.root]);\n\n return name;\n}\n"],"mappings":";;;;;AAuEA,SAAgB,aACd,gBACA,eACA,SACQ;CACR,MAAM,eAAe,2BAA2B;CAGhD,MAAM,YAAY,OAAO,mBAAmB;CAG5C,MAAM,OACJ,aAAa,MAAM,QAAQ,cAAc,GAAG,gBAAgB,KAAA;CAC9D,MAAM,OAAO,YACT,UACC;CAGL,MAAM,YAAY,cACV;EACJ,MAAM,QAAQ,YACT,gBAAyC,GACzC;AAEL,MAAI,CAAC,SAAS,OAAO,KAAK,MAAM,CAAC,WAAW,EAC1C,QAAO;AAGT,SAAO;IAGT,YAAa,QAAQ,EAAE,GAAI,CAAC,eAAe,CAC5C;CAGD,MAAM,kBAAkB,OAA+B,KAAK;CAC5D,MAAM,kBAAkB,OAA+B,KAAK;CAE5D,MAAM,OAAO,cAAc;AACzB,MAAI,CAAC,UACH,QAAO;AAIT,MAAI,cAAc;GAChB,MAAM,aAAa,aAAa,qBAAqB,MAAM,KAAK;GAChE,MAAM,MAAM,mBAAmB,YAAY,UAAU;AACrD,gBAAa,iBAAiB,YAAY,IAAI;AAC9C,UAAO;;AAIT,kBAAgB,SAAS,SAAS;AAClC,kBAAgB,UAAU;EAE1B,MAAM,SAAS,UAAU,WAAW;GAClC,MAAM,MAAM;GACZ,MAAM,MAAM;GACb,CAAC;AAEF,kBAAgB,UAAU;AAE1B,SAAO,OAAO,UAAU;IACvB;EAAC;EAAW,MAAM;EAAM,MAAM;EAAM;EAAa,CAAC;AAGrD,0BAAyB;AACvB,kBAAgB,SAAS,SAAS;AAClC,kBAAgB,UAAU;AAE1B,MAAI,UAKF,iBAAgB,UAJD,UAAU,WAAW;GAClC,MAAM,MAAM;GACZ,MAAM,MAAM;GACb,CAAC;AAIJ,eAAa;AACX,mBAAgB,SAAS,SAAS;AAClC,mBAAgB,UAAU;AAC1B,mBAAgB,SAAS,SAAS;AAClC,mBAAgB,UAAU;;IAE3B;EAAC;EAAW,MAAM;EAAM,MAAM;EAAK,CAAC;AAEvC,QAAO"}
@@ -1,79 +0,0 @@
1
- //#region src/hooks/useProperty.d.ts
2
- interface UsePropertyOptions {
3
- /**
4
- * CSS syntax string for the property (e.g., '<color>', '<length>', '<angle>').
5
- * For color tokens (#name), this is auto-set to '<color>' and cannot be overridden.
6
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@property/syntax
7
- */
8
- syntax?: string;
9
- /**
10
- * Whether the property inherits from parent elements
11
- * @default true
12
- */
13
- inherits?: boolean;
14
- /**
15
- * Initial value for the property.
16
- * For color tokens (#name), this defaults to 'transparent' if not specified.
17
- */
18
- initialValue?: string | number;
19
- /**
20
- * Shadow root or document to inject into
21
- */
22
- root?: Document | ShadowRoot;
23
- }
24
- /**
25
- * Hook to register a CSS @property custom property.
26
- * This enables advanced features like animating custom properties.
27
- *
28
- * Note: @property rules are global and persistent once defined.
29
- * The hook ensures the property is only registered once per root.
30
- *
31
- * Accepts tasty token syntax for the property name:
32
- * - `$name` → defines `--name`
33
- * - `#name` → defines `--name-color` (auto-sets syntax: '<color>', defaults initialValue: 'transparent')
34
- * - `--name` → defines `--name` (legacy format)
35
- *
36
- * @param name - The property token ($name, #name) or CSS property name (--name)
37
- * @param options - Property configuration
38
- *
39
- * @example Basic property with token syntax
40
- * ```tsx
41
- * function Spinner() {
42
- * useProperty('$rotation', {
43
- * syntax: '<angle>',
44
- * inherits: false,
45
- * initialValue: '0deg',
46
- * });
47
- *
48
- * return <div className="spinner" />;
49
- * }
50
- * ```
51
- *
52
- * @example Color property with token syntax (auto-sets syntax)
53
- * ```tsx
54
- * function MyComponent() {
55
- * useProperty('#theme', {
56
- * initialValue: 'red', // syntax: '<color>' is auto-set
57
- * });
58
- *
59
- * // Now --theme-color can be animated with CSS transitions
60
- * return <div style={{ '--theme-color': 'blue' } as React.CSSProperties}>Colored</div>;
61
- * }
62
- * ```
63
- *
64
- * @example Legacy format (still supported)
65
- * ```tsx
66
- * function ResizableBox() {
67
- * useProperty('--box-size', {
68
- * syntax: '<length>',
69
- * initialValue: '100px',
70
- * });
71
- *
72
- * return <div style={{ width: 'var(--box-size)' }} />;
73
- * }
74
- * ```
75
- */
76
- declare function useProperty(name: string, options?: UsePropertyOptions): void;
77
- //#endregion
78
- export { UsePropertyOptions, useProperty };
79
- //# sourceMappingURL=useProperty.d.ts.map
@@ -1,108 +0,0 @@
1
- import { getGlobalInjector } from "../config.js";
2
- import { formatPropertyCSS } from "../ssr/format-property.js";
3
- import { getRegisteredSSRCollector } from "../ssr/ssr-collector-ref.js";
4
- import { useInsertionEffect, useMemo } from "react";
5
- //#region src/hooks/useProperty.ts
6
- /**
7
- * Hook to register a CSS @property custom property.
8
- * This enables advanced features like animating custom properties.
9
- *
10
- * Note: @property rules are global and persistent once defined.
11
- * The hook ensures the property is only registered once per root.
12
- *
13
- * Accepts tasty token syntax for the property name:
14
- * - `$name` → defines `--name`
15
- * - `#name` → defines `--name-color` (auto-sets syntax: '<color>', defaults initialValue: 'transparent')
16
- * - `--name` → defines `--name` (legacy format)
17
- *
18
- * @param name - The property token ($name, #name) or CSS property name (--name)
19
- * @param options - Property configuration
20
- *
21
- * @example Basic property with token syntax
22
- * ```tsx
23
- * function Spinner() {
24
- * useProperty('$rotation', {
25
- * syntax: '<angle>',
26
- * inherits: false,
27
- * initialValue: '0deg',
28
- * });
29
- *
30
- * return <div className="spinner" />;
31
- * }
32
- * ```
33
- *
34
- * @example Color property with token syntax (auto-sets syntax)
35
- * ```tsx
36
- * function MyComponent() {
37
- * useProperty('#theme', {
38
- * initialValue: 'red', // syntax: '<color>' is auto-set
39
- * });
40
- *
41
- * // Now --theme-color can be animated with CSS transitions
42
- * return <div style={{ '--theme-color': 'blue' } as React.CSSProperties}>Colored</div>;
43
- * }
44
- * ```
45
- *
46
- * @example Legacy format (still supported)
47
- * ```tsx
48
- * function ResizableBox() {
49
- * useProperty('--box-size', {
50
- * syntax: '<length>',
51
- * initialValue: '100px',
52
- * });
53
- *
54
- * return <div style={{ width: 'var(--box-size)' }} />;
55
- * }
56
- * ```
57
- */
58
- function useProperty(name, options) {
59
- const ssrCollector = getRegisteredSSRCollector();
60
- const optionsKey = useMemo(() => {
61
- if (!options) return "";
62
- return JSON.stringify({
63
- syntax: options.syntax,
64
- inherits: options.inherits,
65
- initialValue: options.initialValue
66
- });
67
- }, [
68
- options?.syntax,
69
- options?.inherits,
70
- options?.initialValue
71
- ]);
72
- useMemo(() => {
73
- if (!ssrCollector || !name) return;
74
- ssrCollector.collectInternals();
75
- const css = formatPropertyCSS(name, {
76
- syntax: options?.syntax,
77
- inherits: options?.inherits,
78
- initialValue: options?.initialValue
79
- });
80
- if (css) ssrCollector.collectProperty(name, css);
81
- }, [
82
- ssrCollector,
83
- name,
84
- optionsKey
85
- ]);
86
- useInsertionEffect(() => {
87
- if (!name) {
88
- console.warn(`[Tasty] useProperty: property name is required`);
89
- return;
90
- }
91
- const injector = getGlobalInjector();
92
- if (injector.isPropertyDefined(name, { root: options?.root })) return;
93
- injector.property(name, {
94
- syntax: options?.syntax,
95
- inherits: options?.inherits,
96
- initialValue: options?.initialValue,
97
- root: options?.root
98
- });
99
- }, [
100
- name,
101
- optionsKey,
102
- options?.root
103
- ]);
104
- }
105
- //#endregion
106
- export { useProperty };
107
-
108
- //# sourceMappingURL=useProperty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useProperty.js","names":[],"sources":["../../src/hooks/useProperty.ts"],"sourcesContent":["import { useInsertionEffect, useMemo } from 'react';\n\nimport { getGlobalInjector } from '../config';\nimport { formatPropertyCSS } from '../ssr/format-property';\nimport { getRegisteredSSRCollector } from '../ssr/ssr-collector-ref';\n\nexport interface UsePropertyOptions {\n /**\n * CSS syntax string for the property (e.g., '<color>', '<length>', '<angle>').\n * For color tokens (#name), this is auto-set to '<color>' and cannot be overridden.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@property/syntax\n */\n syntax?: string;\n /**\n * Whether the property inherits from parent elements\n * @default true\n */\n inherits?: boolean;\n /**\n * Initial value for the property.\n * For color tokens (#name), this defaults to 'transparent' if not specified.\n */\n initialValue?: string | number;\n /**\n * Shadow root or document to inject into\n */\n root?: Document | ShadowRoot;\n}\n\n/**\n * Hook to register a CSS @property custom property.\n * This enables advanced features like animating custom properties.\n *\n * Note: @property rules are global and persistent once defined.\n * The hook ensures the property is only registered once per root.\n *\n * Accepts tasty token syntax for the property name:\n * - `$name` → defines `--name`\n * - `#name` → defines `--name-color` (auto-sets syntax: '<color>', defaults initialValue: 'transparent')\n * - `--name` → defines `--name` (legacy format)\n *\n * @param name - The property token ($name, #name) or CSS property name (--name)\n * @param options - Property configuration\n *\n * @example Basic property with token syntax\n * ```tsx\n * function Spinner() {\n * useProperty('$rotation', {\n * syntax: '<angle>',\n * inherits: false,\n * initialValue: '0deg',\n * });\n *\n * return <div className=\"spinner\" />;\n * }\n * ```\n *\n * @example Color property with token syntax (auto-sets syntax)\n * ```tsx\n * function MyComponent() {\n * useProperty('#theme', {\n * initialValue: 'red', // syntax: '<color>' is auto-set\n * });\n *\n * // Now --theme-color can be animated with CSS transitions\n * return <div style={{ '--theme-color': 'blue' } as React.CSSProperties}>Colored</div>;\n * }\n * ```\n *\n * @example Legacy format (still supported)\n * ```tsx\n * function ResizableBox() {\n * useProperty('--box-size', {\n * syntax: '<length>',\n * initialValue: '100px',\n * });\n *\n * return <div style={{ width: 'var(--box-size)' }} />;\n * }\n * ```\n */\nexport function useProperty(name: string, options?: UsePropertyOptions): void {\n const ssrCollector = getRegisteredSSRCollector();\n\n // Memoize the options to create a stable dependency\n const optionsKey = useMemo(() => {\n if (!options) return '';\n return JSON.stringify({\n syntax: options.syntax,\n inherits: options.inherits,\n initialValue: options.initialValue,\n });\n }, [options?.syntax, options?.inherits, options?.initialValue]);\n\n // SSR path: collect @property CSS during render\n useMemo(() => {\n if (!ssrCollector || !name) return;\n\n ssrCollector.collectInternals();\n\n const css = formatPropertyCSS(name, {\n syntax: options?.syntax,\n inherits: options?.inherits,\n initialValue: options?.initialValue,\n });\n if (css) {\n ssrCollector.collectProperty(name, css);\n }\n }, [ssrCollector, name, optionsKey]);\n\n // Client path: inject via DOM\n useInsertionEffect(() => {\n if (!name) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[Tasty] useProperty: property name is required`);\n }\n return;\n }\n\n const injector = getGlobalInjector();\n\n if (injector.isPropertyDefined(name, { root: options?.root })) {\n return;\n }\n\n injector.property(name, {\n syntax: options?.syntax,\n inherits: options?.inherits,\n initialValue: options?.initialValue,\n root: options?.root,\n });\n }, [name, optionsKey, options?.root]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFA,SAAgB,YAAY,MAAc,SAAoC;CAC5E,MAAM,eAAe,2BAA2B;CAGhD,MAAM,aAAa,cAAc;AAC/B,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,KAAK,UAAU;GACpB,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,cAAc,QAAQ;GACvB,CAAC;IACD;EAAC,SAAS;EAAQ,SAAS;EAAU,SAAS;EAAa,CAAC;AAG/D,eAAc;AACZ,MAAI,CAAC,gBAAgB,CAAC,KAAM;AAE5B,eAAa,kBAAkB;EAE/B,MAAM,MAAM,kBAAkB,MAAM;GAClC,QAAQ,SAAS;GACjB,UAAU,SAAS;GACnB,cAAc,SAAS;GACxB,CAAC;AACF,MAAI,IACF,cAAa,gBAAgB,MAAM,IAAI;IAExC;EAAC;EAAc;EAAM;EAAW,CAAC;AAGpC,0BAAyB;AACvB,MAAI,CAAC,MAAM;AAEP,WAAQ,KAAK,iDAAiD;AAEhE;;EAGF,MAAM,WAAW,mBAAmB;AAEpC,MAAI,SAAS,kBAAkB,MAAM,EAAE,MAAM,SAAS,MAAM,CAAC,CAC3D;AAGF,WAAS,SAAS,MAAM;GACtB,QAAQ,SAAS;GACjB,UAAU,SAAS;GACnB,cAAc,SAAS;GACvB,MAAM,SAAS;GAChB,CAAC;IACD;EAAC;EAAM;EAAY,SAAS;EAAK,CAAC"}
@@ -1,53 +0,0 @@
1
- //#region src/hooks/useRawCSS.d.ts
2
- interface UseRawCSSOptions {
3
- root?: Document | ShadowRoot;
4
- }
5
- /**
6
- * Hook to inject raw CSS text directly without parsing.
7
- * This is a low-overhead alternative for injecting global CSS that doesn't need tasty processing.
8
- *
9
- * The CSS is inserted into a separate style element (data-tasty-raw) to avoid conflicts
10
- * with tasty's chunked style sheets.
11
- *
12
- * @example Static CSS string
13
- * ```tsx
14
- * function GlobalStyles() {
15
- * useRawCSS(`
16
- * body {
17
- * margin: 0;
18
- * padding: 0;
19
- * font-family: sans-serif;
20
- * }
21
- * `);
22
- *
23
- * return null;
24
- * }
25
- * ```
26
- *
27
- * @example Factory function with dependencies (like useMemo)
28
- * ```tsx
29
- * function ThemeStyles({ theme }: { theme: 'light' | 'dark' }) {
30
- * useRawCSS(() => `
31
- * :root {
32
- * --bg-color: ${theme === 'dark' ? '#1a1a1a' : '#ffffff'};
33
- * --text-color: ${theme === 'dark' ? '#ffffff' : '#1a1a1a'};
34
- * }
35
- * `, [theme]);
36
- *
37
- * return null;
38
- * }
39
- * ```
40
- *
41
- * @example With options
42
- * ```tsx
43
- * function ShadowStyles({ shadowRoot }) {
44
- * useRawCSS(() => `.scoped { color: red; }`, [], { root: shadowRoot });
45
- * return null;
46
- * }
47
- * ```
48
- */
49
- declare function useRawCSS(css: string, options?: UseRawCSSOptions): void;
50
- declare function useRawCSS(factory: () => string, deps: readonly unknown[], options?: UseRawCSSOptions): void;
51
- //#endregion
52
- export { useRawCSS };
53
- //# sourceMappingURL=useRawCSS.d.ts.map
@@ -1,34 +0,0 @@
1
- import { injectRawCSS } from "../injector/index.js";
2
- import { getRegisteredSSRCollector } from "../ssr/ssr-collector-ref.js";
3
- import { useInsertionEffect, useMemo, useRef } from "react";
4
- //#region src/hooks/useRawCSS.ts
5
- function useRawCSS(cssOrFactory, depsOrOptions, options) {
6
- const ssrCollector = getRegisteredSSRCollector();
7
- const isFactory = typeof cssOrFactory === "function";
8
- const deps = isFactory && Array.isArray(depsOrOptions) ? depsOrOptions : void 0;
9
- const opts = isFactory ? options : depsOrOptions;
10
- const css = useMemo(() => isFactory ? cssOrFactory() : cssOrFactory, isFactory ? deps ?? [] : [cssOrFactory]);
11
- useMemo(() => {
12
- if (!ssrCollector || !css.trim()) return;
13
- const key = `raw:${css.length}:${css.slice(0, 64)}`;
14
- ssrCollector.collectRawCSS(key, css);
15
- }, [ssrCollector, css]);
16
- const disposeRef = useRef(null);
17
- useInsertionEffect(() => {
18
- disposeRef.current?.();
19
- if (!css.trim()) {
20
- disposeRef.current = null;
21
- return;
22
- }
23
- const { dispose } = injectRawCSS(css, opts);
24
- disposeRef.current = dispose;
25
- return () => {
26
- disposeRef.current?.();
27
- disposeRef.current = null;
28
- };
29
- }, [css, opts?.root]);
30
- }
31
- //#endregion
32
- export { useRawCSS };
33
-
34
- //# sourceMappingURL=useRawCSS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRawCSS.js","names":[],"sources":["../../src/hooks/useRawCSS.ts"],"sourcesContent":["import { useInsertionEffect, useMemo, useRef } from 'react';\n\nimport { injectRawCSS } from '../injector';\nimport { getRegisteredSSRCollector } from '../ssr/ssr-collector-ref';\n\ninterface UseRawCSSOptions {\n root?: Document | ShadowRoot;\n}\n\n/**\n * Hook to inject raw CSS text directly without parsing.\n * This is a low-overhead alternative for injecting global CSS that doesn't need tasty processing.\n *\n * The CSS is inserted into a separate style element (data-tasty-raw) to avoid conflicts\n * with tasty's chunked style sheets.\n *\n * @example Static CSS string\n * ```tsx\n * function GlobalStyles() {\n * useRawCSS(`\n * body {\n * margin: 0;\n * padding: 0;\n * font-family: sans-serif;\n * }\n * `);\n *\n * return null;\n * }\n * ```\n *\n * @example Factory function with dependencies (like useMemo)\n * ```tsx\n * function ThemeStyles({ theme }: { theme: 'light' | 'dark' }) {\n * useRawCSS(() => `\n * :root {\n * --bg-color: ${theme === 'dark' ? '#1a1a1a' : '#ffffff'};\n * --text-color: ${theme === 'dark' ? '#ffffff' : '#1a1a1a'};\n * }\n * `, [theme]);\n *\n * return null;\n * }\n * ```\n *\n * @example With options\n * ```tsx\n * function ShadowStyles({ shadowRoot }) {\n * useRawCSS(() => `.scoped { color: red; }`, [], { root: shadowRoot });\n * return null;\n * }\n * ```\n */\n\n// Overload 1: Static CSS string\nexport function useRawCSS(css: string, options?: UseRawCSSOptions): void;\n\n// Overload 2: Factory function with dependencies\nexport function useRawCSS(\n factory: () => string,\n deps: readonly unknown[],\n options?: UseRawCSSOptions,\n): void;\n\n// Implementation\nexport function useRawCSS(\n cssOrFactory: string | (() => string),\n depsOrOptions?: readonly unknown[] | UseRawCSSOptions,\n options?: UseRawCSSOptions,\n): void {\n const ssrCollector = getRegisteredSSRCollector();\n\n // Detect which overload is being used\n const isFactory = typeof cssOrFactory === 'function';\n\n // Parse arguments based on overload\n const deps =\n isFactory && Array.isArray(depsOrOptions) ? depsOrOptions : undefined;\n const opts = isFactory\n ? options\n : (depsOrOptions as UseRawCSSOptions | undefined);\n\n // Memoize CSS - for factory functions, use provided deps; for strings, use the string itself\n const css = useMemo(\n () =>\n isFactory ? (cssOrFactory as () => string)() : (cssOrFactory as string),\n\n isFactory ? (deps ?? []) : [cssOrFactory],\n );\n\n // SSR path: collect raw CSS during render\n useMemo(() => {\n if (!ssrCollector || !css.trim()) return;\n\n const key = `raw:${css.length}:${css.slice(0, 64)}`;\n ssrCollector.collectRawCSS(key, css);\n }, [ssrCollector, css]);\n\n const disposeRef = useRef<(() => void) | null>(null);\n\n // Client path: inject via DOM\n useInsertionEffect(() => {\n disposeRef.current?.();\n\n if (!css.trim()) {\n disposeRef.current = null;\n return;\n }\n\n const { dispose } = injectRawCSS(css, opts);\n disposeRef.current = dispose;\n\n return () => {\n disposeRef.current?.();\n disposeRef.current = null;\n };\n }, [css, opts?.root]);\n}\n"],"mappings":";;;;AAiEA,SAAgB,UACd,cACA,eACA,SACM;CACN,MAAM,eAAe,2BAA2B;CAGhD,MAAM,YAAY,OAAO,iBAAiB;CAG1C,MAAM,OACJ,aAAa,MAAM,QAAQ,cAAc,GAAG,gBAAgB,KAAA;CAC9D,MAAM,OAAO,YACT,UACC;CAGL,MAAM,MAAM,cAER,YAAa,cAA+B,GAAI,cAElD,YAAa,QAAQ,EAAE,GAAI,CAAC,aAAa,CAC1C;AAGD,eAAc;AACZ,MAAI,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAE;EAElC,MAAM,MAAM,OAAO,IAAI,OAAO,GAAG,IAAI,MAAM,GAAG,GAAG;AACjD,eAAa,cAAc,KAAK,IAAI;IACnC,CAAC,cAAc,IAAI,CAAC;CAEvB,MAAM,aAAa,OAA4B,KAAK;AAGpD,0BAAyB;AACvB,aAAW,WAAW;AAEtB,MAAI,CAAC,IAAI,MAAM,EAAE;AACf,cAAW,UAAU;AACrB;;EAGF,MAAM,EAAE,YAAY,aAAa,KAAK,KAAK;AAC3C,aAAW,UAAU;AAErB,eAAa;AACX,cAAW,WAAW;AACtB,cAAW,UAAU;;IAEtB,CAAC,KAAK,MAAM,KAAK,CAAC"}
@@ -1,40 +0,0 @@
1
- import { Styles } from "../styles/types.js";
2
-
3
- //#region src/hooks/useStyles.d.ts
4
- /**
5
- * Tasty styles object to generate CSS classes for.
6
- * Can be undefined or empty object for no styles.
7
- */
8
- type UseStylesOptions = Styles | undefined;
9
- interface UseStylesResult {
10
- /**
11
- * Generated className(s) to apply to the element.
12
- * Can be empty string if no styles are provided.
13
- * With chunking enabled, may contain multiple space-separated class names.
14
- */
15
- className: string;
16
- }
17
- /**
18
- * Generate CSS classes from Tasty styles.
19
- * Thin re-export of `computeStyles()` kept for backward compatibility.
20
- *
21
- * Unlike a React hook, this is a plain function and can be called
22
- * from both client components and React Server Components.
23
- *
24
- * @example
25
- * ```tsx
26
- * function MyComponent() {
27
- * const { className } = useStyles({
28
- * padding: '2x',
29
- * fill: '#purple',
30
- * radius: '1r',
31
- * });
32
- *
33
- * return <div className={className}>Styled content</div>;
34
- * }
35
- * ```
36
- */
37
- declare function useStyles(styles: UseStylesOptions): UseStylesResult;
38
- //#endregion
39
- export { UseStylesOptions, UseStylesResult, useStyles };
40
- //# sourceMappingURL=useStyles.d.ts.map
@@ -1,29 +0,0 @@
1
- import { computeStyles } from "../compute-styles.js";
2
- //#region src/hooks/useStyles.ts
3
- /**
4
- * Generate CSS classes from Tasty styles.
5
- * Thin re-export of `computeStyles()` kept for backward compatibility.
6
- *
7
- * Unlike a React hook, this is a plain function and can be called
8
- * from both client components and React Server Components.
9
- *
10
- * @example
11
- * ```tsx
12
- * function MyComponent() {
13
- * const { className } = useStyles({
14
- * padding: '2x',
15
- * fill: '#purple',
16
- * radius: '1r',
17
- * });
18
- *
19
- * return <div className={className}>Styled content</div>;
20
- * }
21
- * ```
22
- */
23
- function useStyles(styles) {
24
- return computeStyles(styles);
25
- }
26
- //#endregion
27
- export { useStyles };
28
-
29
- //# sourceMappingURL=useStyles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStyles.js","names":[],"sources":["../../src/hooks/useStyles.ts"],"sourcesContent":["import { computeStyles } from '../compute-styles';\nimport type { Styles } from '../styles/types';\n\n/**\n * Tasty styles object to generate CSS classes for.\n * Can be undefined or empty object for no styles.\n */\nexport type UseStylesOptions = Styles | undefined;\n\nexport interface UseStylesResult {\n /**\n * Generated className(s) to apply to the element.\n * Can be empty string if no styles are provided.\n * With chunking enabled, may contain multiple space-separated class names.\n */\n className: string;\n}\n\n/**\n * Generate CSS classes from Tasty styles.\n * Thin re-export of `computeStyles()` kept for backward compatibility.\n *\n * Unlike a React hook, this is a plain function and can be called\n * from both client components and React Server Components.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { className } = useStyles({\n * padding: '2x',\n * fill: '#purple',\n * radius: '1r',\n * });\n *\n * return <div className={className}>Styled content</div>;\n * }\n * ```\n */\nexport function useStyles(styles: UseStylesOptions): UseStylesResult {\n return computeStyles(styles);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,UAAU,QAA2C;AACnE,QAAO,cAAc,OAAO"}
@@ -1,166 +0,0 @@
1
- import { CacheMetrics, CounterStyleDescriptors, DisposeFunction, FontFaceDescriptors, FontFaceInput, GlobalInjectResult, InjectResult, KeyframesCacheEntry, KeyframesInfo, KeyframesResult, KeyframesSteps, PropertyDefinition, RawCSSResult, RootRegistry, RuleInfo, SheetInfo, StyleInjectorConfig, StyleRule } from "./types.js";
2
- import { StyleResult } from "../pipeline/index.js";
3
- import { SheetManager } from "./sheet-manager.js";
4
- import { StyleInjector } from "./injector.js";
5
-
6
- //#region src/injector/index.d.ts
7
- /**
8
- * Inject styles and return className with dispose function
9
- */
10
- declare function inject(rules: StyleResult[], options?: {
11
- root?: Document | ShadowRoot;
12
- cacheKey?: string;
13
- }): InjectResult;
14
- /**
15
- * Inject global rules that should not reserve tasty class names
16
- */
17
- declare function injectGlobal(rules: StyleResult[], options?: {
18
- root?: Document | ShadowRoot;
19
- }): GlobalInjectResult;
20
- /**
21
- * Inject raw CSS text directly without parsing
22
- * This is a low-overhead method for injecting raw CSS that doesn't need tasty processing.
23
- * The CSS is inserted into a separate style element to avoid conflicts with tasty's chunking.
24
- *
25
- * @example
26
- * ```tsx
27
- * // Inject raw CSS
28
- * const { dispose } = injectRawCSS(`
29
- * body { margin: 0; padding: 0; }
30
- * .my-class { color: red; }
31
- * `);
32
- *
33
- * // Later, remove the injected CSS
34
- * dispose();
35
- * ```
36
- */
37
- declare function injectRawCSS(css: string, options?: {
38
- root?: Document | ShadowRoot;
39
- }): {
40
- dispose: () => void;
41
- };
42
- /**
43
- * Get raw CSS text for SSR
44
- */
45
- declare function getRawCSSText(options?: {
46
- root?: Document | ShadowRoot;
47
- }): string;
48
- /**
49
- * Inject keyframes and return object with toString() and dispose()
50
- */
51
- declare function keyframes(steps: KeyframesSteps, nameOrOptions?: string | {
52
- root?: Document | ShadowRoot;
53
- name?: string;
54
- }): KeyframesResult;
55
- interface PropertyOptions {
56
- /**
57
- * CSS syntax string for the property (e.g., '<color>', '<length>', '<angle>')
58
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@property/syntax
59
- */
60
- syntax?: string;
61
- /**
62
- * Whether the property inherits from parent elements
63
- * @default true
64
- */
65
- inherits?: boolean;
66
- /**
67
- * Initial value for the property
68
- */
69
- initialValue?: string | number;
70
- /**
71
- * Shadow root or document to inject into
72
- */
73
- root?: Document | ShadowRoot;
74
- }
75
- /**
76
- * Define a CSS @property custom property.
77
- * This enables advanced features like animating custom properties.
78
- *
79
- * Note: @property rules are global and persistent once defined.
80
- * Re-registering the same property name is a no-op.
81
- *
82
- * @param name - The custom property name (must start with --)
83
- * @param options - Property configuration
84
- *
85
- * @example
86
- * ```ts
87
- * // Define a color property that can be animated
88
- * property('--my-color', {
89
- * syntax: '<color>',
90
- * initialValue: 'red',
91
- * });
92
- *
93
- * // Define an angle property
94
- * property('--rotation', {
95
- * syntax: '<angle>',
96
- * inherits: false,
97
- * initialValue: '0deg',
98
- * });
99
- * ```
100
- */
101
- declare function property(name: string, options?: PropertyOptions): void;
102
- /**
103
- * Check if a CSS @property has already been defined
104
- *
105
- * @param name - The custom property name to check
106
- * @param options - Options including root
107
- */
108
- declare function isPropertyDefined(name: string, options?: {
109
- root?: Document | ShadowRoot;
110
- }): boolean;
111
- /**
112
- * Inject a CSS @font-face rule.
113
- *
114
- * Permanent and global — no dispose or ref-counting.
115
- * Deduplicates by content hash (family + descriptors).
116
- */
117
- declare function fontFace(family: string, descriptors: FontFaceDescriptors, options?: {
118
- root?: Document | ShadowRoot;
119
- }): void;
120
- /**
121
- * Inject a CSS @counter-style rule.
122
- *
123
- * Permanent and global — no dispose or ref-counting.
124
- * Deduplicates by name (first definition wins).
125
- */
126
- declare function counterStyle(name: string, descriptors: CounterStyleDescriptors, options?: {
127
- root?: Document | ShadowRoot;
128
- }): void;
129
- /**
130
- * Get CSS text from all sheets (for SSR)
131
- */
132
- declare function getCssText(options?: {
133
- root?: Document | ShadowRoot;
134
- }): string;
135
- /**
136
- * Collect only CSS used by a rendered subtree (like jest-styled-components).
137
- * Pass the container returned by render(...).
138
- */
139
- declare function getCssTextForNode(node: ParentNode | Element | DocumentFragment, options?: {
140
- root?: Document | ShadowRoot;
141
- }): string;
142
- /**
143
- * Force cleanup of unused rules
144
- */
145
- declare function cleanup(root?: Document | ShadowRoot): void;
146
- /**
147
- * Check if we're currently running in a test environment
148
- */
149
- declare function getIsTestEnvironment(): boolean;
150
- /**
151
- * Get the global injector instance for debugging
152
- */
153
- declare const injector: {
154
- readonly instance: StyleInjector;
155
- };
156
- /**
157
- * Destroy all resources and clean up
158
- */
159
- declare function destroy(root?: Document | ShadowRoot): void;
160
- /**
161
- * Create a new isolated injector instance
162
- */
163
- declare function createInjector(config?: Partial<StyleInjectorConfig>): StyleInjector;
164
- //#endregion
165
- export { PropertyOptions, cleanup, counterStyle, createInjector, destroy, fontFace, getCssText, getCssTextForNode, getIsTestEnvironment, getRawCSSText, inject, injectGlobal, injectRawCSS, injector, isPropertyDefined, keyframes, property };
166
- //# sourceMappingURL=index.d.ts.map