@depup/react-email 5.2.10-depup.1 → 6.9.1-depup.0

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 (407) hide show
  1. package/CHANGELOG.md +320 -0
  2. package/README.md +11 -10
  3. package/changes.json +21 -17
  4. package/dev/CHANGELOG.md +2 -0
  5. package/dev/index.js +1 -1
  6. package/dev/package.json +1 -1
  7. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  8. package/dist/cli/index.mjs +7810 -0
  9. package/dist/components/body/body.cjs +39 -0
  10. package/dist/components/body/body.d.cts +7 -0
  11. package/dist/components/body/body.d.mts +7 -0
  12. package/dist/components/body/body.mjs +37 -0
  13. package/dist/components/body/index.d.cts +1 -0
  14. package/dist/components/body/index.d.mts +1 -0
  15. package/dist/components/body/margin-properties.cjs +30 -0
  16. package/dist/components/body/margin-properties.mjs +29 -0
  17. package/dist/components/button/button.cjs +64 -0
  18. package/dist/components/button/button.d.cts +13 -0
  19. package/dist/components/button/button.d.mts +13 -0
  20. package/dist/components/button/button.mjs +62 -0
  21. package/dist/components/button/index.d.cts +1 -0
  22. package/dist/components/button/index.d.mts +1 -0
  23. package/dist/components/button/utils/parse-padding.cjs +90 -0
  24. package/dist/components/button/utils/parse-padding.mjs +90 -0
  25. package/dist/components/button/utils/px-to-pt.cjs +4 -0
  26. package/dist/components/button/utils/px-to-pt.mjs +4 -0
  27. package/dist/components/code-block/code-block.cjs +79 -0
  28. package/dist/components/code-block/code-block.d.cts +20 -0
  29. package/dist/components/code-block/code-block.d.mts +20 -0
  30. package/dist/components/code-block/code-block.mjs +77 -0
  31. package/dist/components/code-block/index.d.cts +3 -0
  32. package/dist/components/code-block/index.d.mts +3 -0
  33. package/dist/components/code-block/languages-available.d.cts +4 -0
  34. package/dist/components/code-block/languages-available.d.mts +4 -0
  35. package/dist/components/code-block/prism.cjs +14564 -0
  36. package/dist/components/code-block/prism.mjs +14562 -0
  37. package/dist/components/code-block/themes.cjs +2578 -0
  38. package/dist/components/code-block/themes.d.cts +4877 -0
  39. package/dist/components/code-block/themes.d.mts +4877 -0
  40. package/dist/components/code-block/themes.mjs +2541 -0
  41. package/dist/components/code-inline/code-inline.cjs +43 -0
  42. package/dist/components/code-inline/code-inline.d.cts +12 -0
  43. package/dist/components/code-inline/code-inline.d.mts +12 -0
  44. package/dist/components/code-inline/code-inline.mjs +41 -0
  45. package/dist/components/code-inline/index.d.cts +1 -0
  46. package/dist/components/code-inline/index.d.mts +1 -0
  47. package/dist/components/column/column.cjs +19 -0
  48. package/dist/components/column/column.d.cts +7 -0
  49. package/dist/components/column/column.d.mts +7 -0
  50. package/dist/components/column/column.mjs +17 -0
  51. package/dist/components/column/index.d.cts +1 -0
  52. package/dist/components/column/index.d.mts +1 -0
  53. package/dist/components/container/container.cjs +42 -0
  54. package/dist/components/container/container.d.cts +7 -0
  55. package/dist/components/container/container.d.mts +7 -0
  56. package/dist/components/container/container.mjs +40 -0
  57. package/dist/components/container/index.d.cts +1 -0
  58. package/dist/components/container/index.d.mts +1 -0
  59. package/dist/components/element-marker.cjs +8 -0
  60. package/dist/components/element-marker.mjs +7 -0
  61. package/dist/components/font/font.cjs +22 -0
  62. package/dist/components/font/font.d.cts +26 -0
  63. package/dist/components/font/font.d.mts +26 -0
  64. package/dist/components/font/font.mjs +21 -0
  65. package/dist/components/font/index.d.cts +1 -0
  66. package/dist/components/font/index.d.mts +1 -0
  67. package/dist/components/head/head.cjs +20 -0
  68. package/dist/components/head/head.d.cts +7 -0
  69. package/dist/components/head/head.d.mts +7 -0
  70. package/dist/components/head/head.mjs +18 -0
  71. package/dist/components/head/index.d.cts +1 -0
  72. package/dist/components/head/index.d.mts +1 -0
  73. package/dist/components/heading/heading.cjs +30 -0
  74. package/dist/components/heading/heading.d.cts +22 -0
  75. package/dist/components/heading/heading.d.mts +22 -0
  76. package/dist/components/heading/heading.mjs +28 -0
  77. package/dist/components/heading/index.d.cts +1 -0
  78. package/dist/components/heading/index.d.mts +1 -0
  79. package/dist/components/heading/utils/as.d.cts +16 -0
  80. package/dist/components/heading/utils/as.d.mts +16 -0
  81. package/dist/components/heading/utils/spaces.cjs +24 -0
  82. package/dist/components/heading/utils/spaces.d.cts +14 -0
  83. package/dist/components/heading/utils/spaces.d.mts +14 -0
  84. package/dist/components/heading/utils/spaces.mjs +24 -0
  85. package/dist/components/hr/hr.cjs +21 -0
  86. package/dist/components/hr/hr.d.cts +7 -0
  87. package/dist/components/hr/hr.d.mts +7 -0
  88. package/dist/components/hr/hr.mjs +19 -0
  89. package/dist/components/hr/index.d.cts +1 -0
  90. package/dist/components/hr/index.d.mts +1 -0
  91. package/dist/components/html/html.cjs +15 -0
  92. package/dist/components/html/html.d.cts +7 -0
  93. package/dist/components/html/html.d.mts +7 -0
  94. package/dist/components/html/html.mjs +13 -0
  95. package/dist/components/html/index.d.cts +1 -0
  96. package/dist/components/html/index.d.mts +1 -0
  97. package/dist/components/img/img.cjs +25 -0
  98. package/dist/components/img/img.d.cts +7 -0
  99. package/dist/components/img/img.d.mts +7 -0
  100. package/dist/components/img/img.mjs +23 -0
  101. package/dist/components/img/index.d.cts +1 -0
  102. package/dist/components/img/index.d.mts +1 -0
  103. package/dist/components/index.d.cts +24 -0
  104. package/dist/components/index.d.mts +24 -0
  105. package/dist/components/link/index.d.cts +1 -0
  106. package/dist/components/link/index.d.mts +1 -0
  107. package/dist/components/link/link.cjs +21 -0
  108. package/dist/components/link/link.d.cts +7 -0
  109. package/dist/components/link/link.d.mts +7 -0
  110. package/dist/components/link/link.mjs +19 -0
  111. package/dist/components/markdown/index.d.cts +1 -0
  112. package/dist/components/markdown/index.d.mts +1 -0
  113. package/dist/components/markdown/markdown.cjs +101 -0
  114. package/dist/components/markdown/markdown.d.cts +16 -0
  115. package/dist/components/markdown/markdown.d.mts +16 -0
  116. package/dist/components/markdown/markdown.mjs +99 -0
  117. package/dist/components/markdown/styles.cjs +92 -0
  118. package/dist/components/markdown/styles.d.cts +31 -0
  119. package/dist/components/markdown/styles.d.mts +31 -0
  120. package/dist/components/markdown/styles.mjs +92 -0
  121. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.cjs +60 -0
  122. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.mjs +60 -0
  123. package/dist/components/preview/index.d.cts +1 -0
  124. package/dist/components/preview/index.d.mts +1 -0
  125. package/dist/components/preview/preview.cjs +34 -0
  126. package/dist/components/preview/preview.d.cts +21 -0
  127. package/dist/components/preview/preview.d.mts +21 -0
  128. package/dist/components/preview/preview.mjs +31 -0
  129. package/dist/components/row/index.d.cts +1 -0
  130. package/dist/components/row/index.d.mts +1 -0
  131. package/dist/components/row/row.cjs +30 -0
  132. package/dist/components/row/row.d.cts +11 -0
  133. package/dist/components/row/row.d.mts +11 -0
  134. package/dist/components/row/row.mjs +28 -0
  135. package/dist/components/section/index.d.cts +1 -0
  136. package/dist/components/section/index.d.mts +1 -0
  137. package/dist/components/section/section.cjs +36 -0
  138. package/dist/components/section/section.d.cts +7 -0
  139. package/dist/components/section/section.d.mts +7 -0
  140. package/dist/components/section/section.mjs +34 -0
  141. package/dist/components/tailwind/hooks/use-suspended-promise.cjs +15 -0
  142. package/dist/components/tailwind/hooks/use-suspended-promise.mjs +15 -0
  143. package/dist/components/tailwind/index.d.cts +4 -0
  144. package/dist/components/tailwind/index.d.mts +4 -0
  145. package/dist/components/tailwind/inline-styles.cjs +11 -0
  146. package/dist/components/tailwind/inline-styles.d.cts +6 -0
  147. package/dist/components/tailwind/inline-styles.d.mts +6 -0
  148. package/dist/components/tailwind/inline-styles.mjs +11 -0
  149. package/dist/components/tailwind/sanitize-stylesheet.cjs +11 -0
  150. package/dist/components/tailwind/sanitize-stylesheet.d.cts +6 -0
  151. package/dist/components/tailwind/sanitize-stylesheet.d.mts +6 -0
  152. package/dist/components/tailwind/sanitize-stylesheet.mjs +11 -0
  153. package/dist/components/tailwind/tailwind.cjs +120 -0
  154. package/dist/components/tailwind/tailwind.d.cts +25 -0
  155. package/dist/components/tailwind/tailwind.d.mts +25 -0
  156. package/dist/components/tailwind/tailwind.mjs +117 -0
  157. package/dist/components/tailwind/utils/compatibility/get-react-property.cjs +10 -0
  158. package/dist/components/tailwind/utils/compatibility/get-react-property.mjs +10 -0
  159. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.cjs +26 -0
  160. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.mjs +26 -0
  161. package/dist/components/tailwind/utils/css/constants.cjs +4 -0
  162. package/dist/components/tailwind/utils/css/constants.mjs +4 -0
  163. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.cjs +127 -0
  164. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.mjs +126 -0
  165. package/dist/components/tailwind/utils/css/extract-rules-per-class.cjs +88 -0
  166. package/dist/components/tailwind/utils/css/extract-rules-per-class.mjs +87 -0
  167. package/dist/components/tailwind/utils/css/get-custom-properties.cjs +35 -0
  168. package/dist/components/tailwind/utils/css/get-custom-properties.mjs +34 -0
  169. package/dist/components/tailwind/utils/css/is-part-inlinable.cjs +10 -0
  170. package/dist/components/tailwind/utils/css/is-part-inlinable.mjs +9 -0
  171. package/dist/components/tailwind/utils/css/is-rule-inlinable.cjs +10 -0
  172. package/dist/components/tailwind/utils/css/is-rule-inlinable.mjs +9 -0
  173. package/dist/components/tailwind/utils/css/make-inline-styles-for.cjs +52 -0
  174. package/dist/components/tailwind/utils/css/make-inline-styles-for.mjs +51 -0
  175. package/dist/components/tailwind/utils/css/resolve-all-css-variables.cjs +89 -0
  176. package/dist/components/tailwind/utils/css/resolve-all-css-variables.mjs +88 -0
  177. package/dist/components/tailwind/utils/css/resolve-calc-expressions.cjs +92 -0
  178. package/dist/components/tailwind/utils/css/resolve-calc-expressions.mjs +91 -0
  179. package/dist/components/tailwind/utils/css/sanitize-declarations.cjs +310 -0
  180. package/dist/components/tailwind/utils/css/sanitize-declarations.mjs +309 -0
  181. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.cjs +46 -0
  182. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.mjs +45 -0
  183. package/dist/components/tailwind/utils/css/split-mixed-rule.cjs +41 -0
  184. package/dist/components/tailwind/utils/css/split-mixed-rule.mjs +40 -0
  185. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.cjs +52 -0
  186. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.mjs +51 -0
  187. package/dist/components/tailwind/utils/css/unwrap-value.cjs +7 -0
  188. package/dist/components/tailwind/utils/css/unwrap-value.mjs +7 -0
  189. package/dist/components/tailwind/utils/react/is-component.cjs +7 -0
  190. package/dist/components/tailwind/utils/react/is-component.mjs +7 -0
  191. package/dist/components/tailwind/utils/react/map-react-tree.cjs +32 -0
  192. package/dist/components/tailwind/utils/react/map-react-tree.mjs +30 -0
  193. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.cjs +37 -0
  194. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.mjs +35 -0
  195. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.cjs +77 -0
  196. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.cts +19 -0
  197. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.mts +19 -0
  198. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.mjs +76 -0
  199. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.cjs +901 -0
  200. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.mjs +901 -0
  201. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.cjs +398 -0
  202. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.mjs +398 -0
  203. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.cjs +467 -0
  204. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.mjs +467 -0
  205. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.cjs +6 -0
  206. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.mjs +6 -0
  207. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.cjs +6 -0
  208. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.mjs +6 -0
  209. package/dist/components/text/index.d.cts +1 -0
  210. package/dist/components/text/index.d.mts +1 -0
  211. package/dist/components/text/text.cjs +43 -0
  212. package/dist/components/text/text.d.cts +7 -0
  213. package/dist/components/text/text.d.mts +7 -0
  214. package/dist/components/text/text.mjs +41 -0
  215. package/dist/components/text/utils/compute-margins.cjs +62 -0
  216. package/dist/components/text/utils/compute-margins.mjs +62 -0
  217. package/dist/index.cjs +95 -0
  218. package/dist/index.d.cts +26 -0
  219. package/dist/index.d.mts +26 -0
  220. package/dist/index.mjs +25 -7326
  221. package/package.json +64 -32
  222. package/src/components/body/__snapshots__/body.spec.tsx.snap +23 -0
  223. package/src/components/body/body.spec.tsx +78 -0
  224. package/src/components/body/body.tsx +62 -0
  225. package/src/components/body/index.ts +1 -0
  226. package/src/components/body/margin-properties.ts +27 -0
  227. package/src/components/button/button.spec.tsx +53 -0
  228. package/src/components/button/button.tsx +114 -0
  229. package/src/components/button/index.ts +1 -0
  230. package/src/components/button/utils/parse-padding.ts +137 -0
  231. package/src/components/button/utils/px-to-pt.ts +4 -0
  232. package/src/components/button/utils/utils.spec.ts +153 -0
  233. package/src/components/code-block/code-block.tsx +136 -0
  234. package/src/components/code-block/index.ts +3 -0
  235. package/src/components/code-block/languages-available.ts +402 -0
  236. package/src/components/code-block/prism.ts +15618 -0
  237. package/src/components/code-block/themes.ts +4929 -0
  238. package/src/components/code-inline/code-inline.tsx +60 -0
  239. package/src/components/code-inline/index.ts +1 -0
  240. package/src/components/column/column.spec.tsx +28 -0
  241. package/src/components/column/column.tsx +17 -0
  242. package/src/components/column/index.ts +1 -0
  243. package/src/components/container/container.spec.tsx +33 -0
  244. package/src/components/container/container.tsx +59 -0
  245. package/src/components/container/index.ts +1 -0
  246. package/src/components/element-marker.ts +5 -0
  247. package/src/components/font/font.spec.tsx +63 -0
  248. package/src/components/font/font.tsx +76 -0
  249. package/src/components/font/index.ts +1 -0
  250. package/src/components/head/head.spec.tsx +34 -0
  251. package/src/components/head/head.tsx +15 -0
  252. package/src/components/head/index.ts +1 -0
  253. package/src/components/heading/heading.spec.tsx +32 -0
  254. package/src/components/heading/heading.tsx +31 -0
  255. package/src/components/heading/index.ts +1 -0
  256. package/src/components/heading/utils/as.ts +26 -0
  257. package/src/components/heading/utils/spaces.ts +64 -0
  258. package/src/components/heading/utils/utils.spec.ts +70 -0
  259. package/src/components/hr/hr.spec.tsx +22 -0
  260. package/src/components/hr/hr.tsx +23 -0
  261. package/src/components/hr/index.ts +1 -0
  262. package/src/components/html/html.spec.tsx +26 -0
  263. package/src/components/html/html.tsx +13 -0
  264. package/src/components/html/index.ts +1 -0
  265. package/src/components/img/img.spec.tsx +30 -0
  266. package/src/components/img/img.tsx +27 -0
  267. package/src/components/img/index.ts +1 -0
  268. package/src/components/index.ts +19 -0
  269. package/src/components/link/index.ts +1 -0
  270. package/src/components/link/link.spec.tsx +37 -0
  271. package/src/components/link/link.tsx +24 -0
  272. package/src/components/markdown/index.ts +1 -0
  273. package/src/components/markdown/markdown.spec.tsx +221 -0
  274. package/src/components/markdown/markdown.tsx +239 -0
  275. package/src/components/markdown/styles.ts +130 -0
  276. package/src/components/markdown/utils/parse-css-in-js-to-inline-css.spec.ts +42 -0
  277. package/src/components/markdown/utils/parse-css-in-js-to-inline-css.ts +73 -0
  278. package/src/components/preview/index.ts +1 -0
  279. package/src/components/preview/preview.spec.tsx +49 -0
  280. package/src/components/preview/preview.tsx +56 -0
  281. package/src/components/row/index.ts +1 -0
  282. package/src/components/row/row.spec.tsx +28 -0
  283. package/src/components/row/row.tsx +33 -0
  284. package/src/components/section/index.ts +1 -0
  285. package/src/components/section/section.spec.tsx +58 -0
  286. package/src/components/section/section.tsx +59 -0
  287. package/src/components/tailwind/e2e/integrations.spec.ts +44 -0
  288. package/src/components/tailwind/e2e/nextjs/README.md +9 -0
  289. package/src/components/tailwind/e2e/nextjs/emails/vercel-invite-user.tsx +151 -0
  290. package/src/components/tailwind/e2e/nextjs/next.config.mjs +6 -0
  291. package/src/components/tailwind/e2e/nextjs/package.json +24 -0
  292. package/src/components/tailwind/e2e/nextjs/src/app/favicon.ico +0 -0
  293. package/src/components/tailwind/e2e/nextjs/src/app/layout.tsx +23 -0
  294. package/src/components/tailwind/e2e/nextjs/src/app/page.tsx +7 -0
  295. package/src/components/tailwind/e2e/nextjs/tsconfig.json +27 -0
  296. package/src/components/tailwind/e2e/vite/README.md +9 -0
  297. package/src/components/tailwind/e2e/vite/emails/vercel-invite-user.tsx +151 -0
  298. package/src/components/tailwind/e2e/vite/index.html +13 -0
  299. package/src/components/tailwind/e2e/vite/package.json +25 -0
  300. package/src/components/tailwind/e2e/vite/public/vite.svg +1 -0
  301. package/src/components/tailwind/e2e/vite/src/App.tsx +10 -0
  302. package/src/components/tailwind/e2e/vite/src/main.tsx +9 -0
  303. package/src/components/tailwind/e2e/vite/src/vite-env.d.ts +1 -0
  304. package/src/components/tailwind/e2e/vite/tsconfig.json +25 -0
  305. package/src/components/tailwind/e2e/vite/tsconfig.node.json +11 -0
  306. package/src/components/tailwind/e2e/vite/vite.config.ts +7 -0
  307. package/src/components/tailwind/hooks/use-suspended-promise.ts +34 -0
  308. package/src/components/tailwind/hooks/use-suspensed-promise.spec.ts +263 -0
  309. package/src/components/tailwind/index.ts +4 -0
  310. package/src/components/tailwind/inline-styles.spec.ts +49 -0
  311. package/src/components/tailwind/inline-styles.ts +21 -0
  312. package/src/components/tailwind/sanitize-stylesheet.ts +10 -0
  313. package/src/components/tailwind/tailwind.spec.tsx +1390 -0
  314. package/src/components/tailwind/tailwind.tsx +178 -0
  315. package/src/components/tailwind/utils/__snapshots__/quick-safe-render-to-string.spec.tsx.snap +3 -0
  316. package/src/components/tailwind/utils/compatibility/escape-class-name.spec.ts +17 -0
  317. package/src/components/tailwind/utils/compatibility/escape-class-name.ts +18 -0
  318. package/src/components/tailwind/utils/compatibility/get-react-property.ts +15 -0
  319. package/src/components/tailwind/utils/compatibility/sanitize-class-name.spec.ts +7 -0
  320. package/src/components/tailwind/utils/compatibility/sanitize-class-name.ts +36 -0
  321. package/src/components/tailwind/utils/compatibility/unescape-class.ts +3 -0
  322. package/src/components/tailwind/utils/css/__snapshots__/extract-rules-matching-classes.spec.ts.snap +23 -0
  323. package/src/components/tailwind/utils/css/__snapshots__/remove-rule-duplicates-from-root.spec.ts.snap +3 -0
  324. package/src/components/tailwind/utils/css/__snapshots__/sanitize-non-inlinable-classes.spec.ts.snap +7 -0
  325. package/src/components/tailwind/utils/css/constants.ts +5 -0
  326. package/src/components/tailwind/utils/css/downlevel-for-email-clients.spec.ts +119 -0
  327. package/src/components/tailwind/utils/css/downlevel-for-email-clients.ts +245 -0
  328. package/src/components/tailwind/utils/css/extract-rules-per-class.spec.ts +324 -0
  329. package/src/components/tailwind/utils/css/extract-rules-per-class.ts +152 -0
  330. package/src/components/tailwind/utils/css/get-custom-properties.ts +49 -0
  331. package/src/components/tailwind/utils/css/is-part-inlinable.ts +15 -0
  332. package/src/components/tailwind/utils/css/is-rule-inlinable.ts +15 -0
  333. package/src/components/tailwind/utils/css/make-inline-styles-for.spec.ts +124 -0
  334. package/src/components/tailwind/utils/css/make-inline-styles-for.ts +73 -0
  335. package/src/components/tailwind/utils/css/resolve-all-css-variables.spec.ts +296 -0
  336. package/src/components/tailwind/utils/css/resolve-all-css-variables.ts +236 -0
  337. package/src/components/tailwind/utils/css/resolve-calc-expressions.spec.ts +36 -0
  338. package/src/components/tailwind/utils/css/resolve-calc-expressions.ts +147 -0
  339. package/src/components/tailwind/utils/css/sanitize-declarations.spec.ts +491 -0
  340. package/src/components/tailwind/utils/css/sanitize-declarations.ts +443 -0
  341. package/src/components/tailwind/utils/css/sanitize-non-inlinable-rules.spec.ts +72 -0
  342. package/src/components/tailwind/utils/css/sanitize-non-inlinable-rules.ts +48 -0
  343. package/src/components/tailwind/utils/css/split-mixed-rule.ts +68 -0
  344. package/src/components/tailwind/utils/css/strip-empty-tailwind-vars.spec.ts +128 -0
  345. package/src/components/tailwind/utils/css/strip-empty-tailwind-vars.ts +70 -0
  346. package/src/components/tailwind/utils/css/unwrap-value.ts +9 -0
  347. package/src/components/tailwind/utils/react/is-component.ts +12 -0
  348. package/src/components/tailwind/utils/react/map-react-tree.spec.tsx +58 -0
  349. package/src/components/tailwind/utils/react/map-react-tree.ts +58 -0
  350. package/src/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.ts +61 -0
  351. package/src/components/tailwind/utils/tailwindcss/setup-tailwind.spec.ts +25 -0
  352. package/src/components/tailwind/utils/tailwindcss/setup-tailwind.ts +121 -0
  353. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.ts +900 -0
  354. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.ts +397 -0
  355. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.ts +466 -0
  356. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.ts +5 -0
  357. package/src/components/tailwind/utils/text/from-dash-case-to-camel-case.ts +3 -0
  358. package/src/components/text/index.ts +1 -0
  359. package/src/components/text/text.spec.tsx +35 -0
  360. package/src/components/text/text.tsx +50 -0
  361. package/src/components/text/utils/compute-margins.spec.ts +67 -0
  362. package/src/components/text/utils/compute-margins.ts +102 -0
  363. package/src/index.ts +2 -110
  364. package/tsconfig.json +9 -4
  365. package/tsdown.config.ts +51 -6
  366. package/vitest.config.ts +1 -0
  367. package/vitest.e2e.config.ts +17 -0
  368. package/src/commands/build.ts +0 -269
  369. package/src/commands/dev.ts +0 -27
  370. package/src/commands/export.ts +0 -204
  371. package/src/commands/resend/reset.ts +0 -8
  372. package/src/commands/resend/setup.ts +0 -29
  373. package/src/commands/start.ts +0 -38
  374. package/src/utils/conf.ts +0 -9
  375. package/src/utils/esbuild/escape-string-for-regex.ts +0 -3
  376. package/src/utils/esbuild/renderring-utilities-exporter.ts +0 -63
  377. package/src/utils/get-emails-directory-metadata.spec.ts +0 -82
  378. package/src/utils/get-emails-directory-metadata.ts +0 -140
  379. package/src/utils/get-preview-server-location.ts +0 -50
  380. package/src/utils/index.ts +0 -2
  381. package/src/utils/packageJson.ts +0 -4
  382. package/src/utils/preview/get-env-variables-for-preview-app.ts +0 -20
  383. package/src/utils/preview/hot-reloading/create-dependency-graph.spec.ts +0 -226
  384. package/src/utils/preview/hot-reloading/create-dependency-graph.ts +0 -343
  385. package/src/utils/preview/hot-reloading/get-imported-modules.spec.ts +0 -151
  386. package/src/utils/preview/hot-reloading/get-imported-modules.ts +0 -49
  387. package/src/utils/preview/hot-reloading/resolve-path-aliases.spec.ts +0 -11
  388. package/src/utils/preview/hot-reloading/resolve-path-aliases.ts +0 -32
  389. package/src/utils/preview/hot-reloading/setup-hot-reloading.ts +0 -121
  390. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/data-to-import.json +0 -1
  391. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/file-a.ts +0 -5
  392. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/file-b.ts +0 -5
  393. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/general-importing-file.ts +0 -9
  394. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/outer-dependency.ts +0 -3
  395. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/path-aliases.ts +0 -1
  396. package/src/utils/preview/hot-reloading/test/dependency-graph/outer.ts +0 -5
  397. package/src/utils/preview/hot-reloading/test/some-file.ts +0 -0
  398. package/src/utils/preview/hot-reloading/test/tsconfig.json +0 -8
  399. package/src/utils/preview/index.ts +0 -2
  400. package/src/utils/preview/serve-static-file.ts +0 -51
  401. package/src/utils/preview/start-dev-server.ts +0 -252
  402. package/src/utils/register-spinner-autostopping.ts +0 -28
  403. package/src/utils/style-text.ts +0 -11
  404. package/src/utils/tree.spec.ts +0 -29
  405. package/src/utils/tree.ts +0 -76
  406. package/src/utils/types/hot-reload-change.ts +0 -6
  407. package/src/utils/types/hot-reload-event.ts +0 -3
@@ -0,0 +1,127 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_constants = require("./constants.cjs");
3
+ let css_tree = require("css-tree");
4
+ //#region src/components/tailwind/utils/css/downlevel-for-email-clients.ts
5
+ /**
6
+ * Downlevels modern CSS features that email clients don't support,
7
+ * operating on a css-tree StyleSheet AST.
8
+ *
9
+ * 1. CSS Nesting: unnests @media rules from inside selectors
10
+ * `.sm_p-4{@media (min-width:40rem){padding:1rem!important}}`
11
+ * → `@media (min-width:40rem){.sm_p-4{padding:1rem!important}}`
12
+ *
13
+ * 2. Media Queries Level 4 range syntax → legacy min-width/max-width
14
+ * `(width>=40rem)` → `(min-width:40rem)`
15
+ *
16
+ * Gmail, Outlook, Yahoo, and most email clients don't support either feature.
17
+ * See: https://www.caniemail.com/features/css-at-media/
18
+ * https://www.caniemail.com/features/css-nesting/
19
+ */
20
+ /**
21
+ * Unnest @media at-rules from inside regular rules, and downlevel
22
+ * range media query syntax to legacy min-width/max-width.
23
+ *
24
+ * Mutates the stylesheet in place.
25
+ */
26
+ function downlevelForEmailClients(styleSheet) {
27
+ unnestMediaQueries(styleSheet);
28
+ downlevelRangeMediaQueries(styleSheet);
29
+ }
30
+ /**
31
+ * Walk the stylesheet and unnest any @media/@supports rules that are nested
32
+ * inside regular rules. For each, the parent Rule's selector wraps the
33
+ * at-rule's body.
34
+ *
35
+ * Before: `.sm_p-4 { @media (...) { padding: 1rem } }`
36
+ * After: `@media (...) { .sm_p-4 { padding: 1rem } }`
37
+ */
38
+ function unnestMediaQueries(styleSheet) {
39
+ const transforms = [];
40
+ (0, css_tree.walk)(styleSheet, {
41
+ visit: "Rule",
42
+ enter(rule, item, list) {
43
+ if (!rule.block || !item) return;
44
+ const nestedAtrules = [];
45
+ const remainingChildren = [];
46
+ rule.block.children.forEach((child) => {
47
+ if (child.type === "Atrule" && require_constants.NON_INLINABLE_ATRULES.has(child.name.toLowerCase())) nestedAtrules.push(child);
48
+ else remainingChildren.push(child);
49
+ });
50
+ if (nestedAtrules.length > 0) transforms.push({
51
+ parentRule: rule,
52
+ parentItem: item,
53
+ parentList: list,
54
+ nestedAtrules,
55
+ remainingChildren
56
+ });
57
+ }
58
+ });
59
+ for (let i = transforms.length - 1; i >= 0; i--) {
60
+ const { parentRule, parentItem, parentList, nestedAtrules, remainingChildren } = transforms[i];
61
+ const replacements = new css_tree.List();
62
+ if (remainingChildren.length > 0) {
63
+ parentRule.block.children = new css_tree.List().fromArray(remainingChildren);
64
+ replacements.appendData(parentRule);
65
+ }
66
+ for (const atrule of nestedAtrules) {
67
+ const wrappedRule = {
68
+ type: "Rule",
69
+ prelude: (0, css_tree.clone)(parentRule.prelude),
70
+ block: {
71
+ type: "Block",
72
+ children: atrule.block ? atrule.block.children : new css_tree.List()
73
+ }
74
+ };
75
+ const newAtrule = {
76
+ type: "Atrule",
77
+ name: atrule.name,
78
+ prelude: atrule.prelude,
79
+ block: {
80
+ type: "Block",
81
+ children: new css_tree.List().fromArray([wrappedRule])
82
+ }
83
+ };
84
+ replacements.appendData(newAtrule);
85
+ }
86
+ parentList.replace(parentItem, replacements);
87
+ }
88
+ }
89
+ /**
90
+ * Walk all nodes and downlevel range syntax (`FeatureRange`) inside @media
91
+ * preludes to legacy `Feature` nodes (`min-width` / `max-width`).
92
+ */
93
+ function downlevelRangeMediaQueries(styleSheet) {
94
+ const replacements = [];
95
+ (0, css_tree.walk)(styleSheet, { enter(originalNode, item) {
96
+ const node = originalNode;
97
+ if (item && node.type === "FeatureRange") {
98
+ const replacement = downlevelFeatureRange(node);
99
+ if (replacement) replacements.push({
100
+ item,
101
+ replacement
102
+ });
103
+ }
104
+ } });
105
+ for (const { item, replacement } of replacements) item.data = replacement;
106
+ }
107
+ /**
108
+ * Convert a `FeatureRange` node to a `Feature` node (legacy min-/max- syntax).
109
+ *
110
+ * For `width >= 40rem`: left=Identifier("width"), leftComparison=">=", middle=Dimension("40","rem")
111
+ * Result: { type: "Feature", name: "min-width", value: Dimension("40","rem") }
112
+ */
113
+ function downlevelFeatureRange(range) {
114
+ if (range.left.type !== "Identifier") return null;
115
+ let prefix;
116
+ if (range.leftComparison === ">=" || range.leftComparison === ">") prefix = "min-";
117
+ else if (range.leftComparison === "<=" || range.leftComparison === "<") prefix = "max-";
118
+ else return null;
119
+ return {
120
+ type: "Feature",
121
+ kind: "media",
122
+ name: `${prefix}${range.left.name}`,
123
+ value: range.middle
124
+ };
125
+ }
126
+ //#endregion
127
+ exports.downlevelForEmailClients = downlevelForEmailClients;
@@ -0,0 +1,126 @@
1
+ import { NON_INLINABLE_ATRULES } from "./constants.mjs";
2
+ import { List, clone, walk } from "css-tree/dist/csstree.esm";
3
+ //#region src/components/tailwind/utils/css/downlevel-for-email-clients.ts
4
+ /**
5
+ * Downlevels modern CSS features that email clients don't support,
6
+ * operating on a css-tree StyleSheet AST.
7
+ *
8
+ * 1. CSS Nesting: unnests @media rules from inside selectors
9
+ * `.sm_p-4{@media (min-width:40rem){padding:1rem!important}}`
10
+ * → `@media (min-width:40rem){.sm_p-4{padding:1rem!important}}`
11
+ *
12
+ * 2. Media Queries Level 4 range syntax → legacy min-width/max-width
13
+ * `(width>=40rem)` → `(min-width:40rem)`
14
+ *
15
+ * Gmail, Outlook, Yahoo, and most email clients don't support either feature.
16
+ * See: https://www.caniemail.com/features/css-at-media/
17
+ * https://www.caniemail.com/features/css-nesting/
18
+ */
19
+ /**
20
+ * Unnest @media at-rules from inside regular rules, and downlevel
21
+ * range media query syntax to legacy min-width/max-width.
22
+ *
23
+ * Mutates the stylesheet in place.
24
+ */
25
+ function downlevelForEmailClients(styleSheet) {
26
+ unnestMediaQueries(styleSheet);
27
+ downlevelRangeMediaQueries(styleSheet);
28
+ }
29
+ /**
30
+ * Walk the stylesheet and unnest any @media/@supports rules that are nested
31
+ * inside regular rules. For each, the parent Rule's selector wraps the
32
+ * at-rule's body.
33
+ *
34
+ * Before: `.sm_p-4 { @media (...) { padding: 1rem } }`
35
+ * After: `@media (...) { .sm_p-4 { padding: 1rem } }`
36
+ */
37
+ function unnestMediaQueries(styleSheet) {
38
+ const transforms = [];
39
+ walk(styleSheet, {
40
+ visit: "Rule",
41
+ enter(rule, item, list) {
42
+ if (!rule.block || !item) return;
43
+ const nestedAtrules = [];
44
+ const remainingChildren = [];
45
+ rule.block.children.forEach((child) => {
46
+ if (child.type === "Atrule" && NON_INLINABLE_ATRULES.has(child.name.toLowerCase())) nestedAtrules.push(child);
47
+ else remainingChildren.push(child);
48
+ });
49
+ if (nestedAtrules.length > 0) transforms.push({
50
+ parentRule: rule,
51
+ parentItem: item,
52
+ parentList: list,
53
+ nestedAtrules,
54
+ remainingChildren
55
+ });
56
+ }
57
+ });
58
+ for (let i = transforms.length - 1; i >= 0; i--) {
59
+ const { parentRule, parentItem, parentList, nestedAtrules, remainingChildren } = transforms[i];
60
+ const replacements = new List();
61
+ if (remainingChildren.length > 0) {
62
+ parentRule.block.children = new List().fromArray(remainingChildren);
63
+ replacements.appendData(parentRule);
64
+ }
65
+ for (const atrule of nestedAtrules) {
66
+ const wrappedRule = {
67
+ type: "Rule",
68
+ prelude: clone(parentRule.prelude),
69
+ block: {
70
+ type: "Block",
71
+ children: atrule.block ? atrule.block.children : new List()
72
+ }
73
+ };
74
+ const newAtrule = {
75
+ type: "Atrule",
76
+ name: atrule.name,
77
+ prelude: atrule.prelude,
78
+ block: {
79
+ type: "Block",
80
+ children: new List().fromArray([wrappedRule])
81
+ }
82
+ };
83
+ replacements.appendData(newAtrule);
84
+ }
85
+ parentList.replace(parentItem, replacements);
86
+ }
87
+ }
88
+ /**
89
+ * Walk all nodes and downlevel range syntax (`FeatureRange`) inside @media
90
+ * preludes to legacy `Feature` nodes (`min-width` / `max-width`).
91
+ */
92
+ function downlevelRangeMediaQueries(styleSheet) {
93
+ const replacements = [];
94
+ walk(styleSheet, { enter(originalNode, item) {
95
+ const node = originalNode;
96
+ if (item && node.type === "FeatureRange") {
97
+ const replacement = downlevelFeatureRange(node);
98
+ if (replacement) replacements.push({
99
+ item,
100
+ replacement
101
+ });
102
+ }
103
+ } });
104
+ for (const { item, replacement } of replacements) item.data = replacement;
105
+ }
106
+ /**
107
+ * Convert a `FeatureRange` node to a `Feature` node (legacy min-/max- syntax).
108
+ *
109
+ * For `width >= 40rem`: left=Identifier("width"), leftComparison=">=", middle=Dimension("40","rem")
110
+ * Result: { type: "Feature", name: "min-width", value: Dimension("40","rem") }
111
+ */
112
+ function downlevelFeatureRange(range) {
113
+ if (range.left.type !== "Identifier") return null;
114
+ let prefix;
115
+ if (range.leftComparison === ">=" || range.leftComparison === ">") prefix = "min-";
116
+ else if (range.leftComparison === "<=" || range.leftComparison === "<") prefix = "max-";
117
+ else return null;
118
+ return {
119
+ type: "Feature",
120
+ kind: "media",
121
+ name: `${prefix}${range.left.name}`,
122
+ value: range.middle
123
+ };
124
+ }
125
+ //#endregion
126
+ export { downlevelForEmailClients };
@@ -0,0 +1,88 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_constants = require("./constants.cjs");
3
+ const require_is_rule_inlinable = require("./is-rule-inlinable.cjs");
4
+ const require_split_mixed_rule = require("./split-mixed-rule.cjs");
5
+ let css_tree = require("css-tree");
6
+ //#region src/components/tailwind/utils/css/extract-rules-per-class.ts
7
+ /**
8
+ * Re-nest the at-rule(s) back inside the rule so the pipeline stays
9
+ * version-agnostic across Tailwind's variant shape change.
10
+ * See https://github.com/resend/react-email/issues/3662
11
+ */
12
+ function nestAtRulesInsideRule(rule, enclosingAtRules) {
13
+ let children = (0, css_tree.clone)(rule).block.children;
14
+ for (let i = enclosingAtRules.length - 1; i >= 0; i--) {
15
+ const atRule = enclosingAtRules[i];
16
+ const wrapped = {
17
+ type: "Atrule",
18
+ name: atRule.name,
19
+ prelude: atRule.prelude ? (0, css_tree.clone)(atRule.prelude) : null,
20
+ block: {
21
+ type: "Block",
22
+ children
23
+ }
24
+ };
25
+ children = new css_tree.List().fromArray([wrapped]);
26
+ }
27
+ return {
28
+ type: "Rule",
29
+ prelude: (0, css_tree.clone)(rule.prelude),
30
+ block: {
31
+ type: "Block",
32
+ children
33
+ }
34
+ };
35
+ }
36
+ function extractRulesPerClass(root, classes) {
37
+ const classSet = new Set(classes);
38
+ const inlinableRules = /* @__PURE__ */ new Map();
39
+ const nonInlinableRules = /* @__PURE__ */ new Map();
40
+ const appendRule = (map, className, rule) => {
41
+ const existing = map.get(className);
42
+ if (existing) existing.push(rule);
43
+ else map.set(className, [rule]);
44
+ };
45
+ const enclosingAtRules = [];
46
+ const handleRule = (rule) => {
47
+ const firstSelector = rule.prelude.type === "SelectorList" ? rule.prelude.children.first : null;
48
+ if (firstSelector?.type === "Selector" && firstSelector.children.first?.type === "NestingSelector") return;
49
+ const selectorClasses = [];
50
+ (0, css_tree.walk)(rule.prelude, {
51
+ visit: "ClassSelector",
52
+ enter(classSelector) {
53
+ selectorClasses.push(css_tree.string.decode(classSelector.name));
54
+ }
55
+ });
56
+ if (enclosingAtRules.length > 0) {
57
+ const nonInlinablePart = nestAtRulesInsideRule(rule, enclosingAtRules);
58
+ for (const className of selectorClasses) if (classSet.has(className)) appendRule(nonInlinableRules, className, nonInlinablePart);
59
+ return;
60
+ }
61
+ if (require_is_rule_inlinable.isRuleInlinable(rule)) {
62
+ for (const className of selectorClasses) if (classSet.has(className)) appendRule(inlinableRules, className, rule);
63
+ } else {
64
+ const { inlinablePart, nonInlinablePart } = require_split_mixed_rule.splitMixedRule(rule);
65
+ for (const className of selectorClasses) {
66
+ if (!classSet.has(className)) continue;
67
+ if (inlinablePart) appendRule(inlinableRules, className, inlinablePart);
68
+ if (nonInlinablePart) appendRule(nonInlinableRules, className, nonInlinablePart);
69
+ }
70
+ }
71
+ };
72
+ (0, css_tree.walk)(root, {
73
+ enter(node) {
74
+ if (node.type === "Atrule") {
75
+ if (require_constants.NON_INLINABLE_ATRULES.has(node.name.toLowerCase())) enclosingAtRules.push(node);
76
+ } else if (node.type === "Rule") handleRule(node);
77
+ },
78
+ leave(node) {
79
+ if (node.type === "Atrule" && require_constants.NON_INLINABLE_ATRULES.has(node.name.toLowerCase())) enclosingAtRules.pop();
80
+ }
81
+ });
82
+ return {
83
+ inlinable: inlinableRules,
84
+ nonInlinable: nonInlinableRules
85
+ };
86
+ }
87
+ //#endregion
88
+ exports.extractRulesPerClass = extractRulesPerClass;
@@ -0,0 +1,87 @@
1
+ import { NON_INLINABLE_ATRULES } from "./constants.mjs";
2
+ import { isRuleInlinable } from "./is-rule-inlinable.mjs";
3
+ import { splitMixedRule } from "./split-mixed-rule.mjs";
4
+ import { List, clone, string, walk } from "css-tree/dist/csstree.esm";
5
+ //#region src/components/tailwind/utils/css/extract-rules-per-class.ts
6
+ /**
7
+ * Re-nest the at-rule(s) back inside the rule so the pipeline stays
8
+ * version-agnostic across Tailwind's variant shape change.
9
+ * See https://github.com/resend/react-email/issues/3662
10
+ */
11
+ function nestAtRulesInsideRule(rule, enclosingAtRules) {
12
+ let children = clone(rule).block.children;
13
+ for (let i = enclosingAtRules.length - 1; i >= 0; i--) {
14
+ const atRule = enclosingAtRules[i];
15
+ const wrapped = {
16
+ type: "Atrule",
17
+ name: atRule.name,
18
+ prelude: atRule.prelude ? clone(atRule.prelude) : null,
19
+ block: {
20
+ type: "Block",
21
+ children
22
+ }
23
+ };
24
+ children = new List().fromArray([wrapped]);
25
+ }
26
+ return {
27
+ type: "Rule",
28
+ prelude: clone(rule.prelude),
29
+ block: {
30
+ type: "Block",
31
+ children
32
+ }
33
+ };
34
+ }
35
+ function extractRulesPerClass(root, classes) {
36
+ const classSet = new Set(classes);
37
+ const inlinableRules = /* @__PURE__ */ new Map();
38
+ const nonInlinableRules = /* @__PURE__ */ new Map();
39
+ const appendRule = (map, className, rule) => {
40
+ const existing = map.get(className);
41
+ if (existing) existing.push(rule);
42
+ else map.set(className, [rule]);
43
+ };
44
+ const enclosingAtRules = [];
45
+ const handleRule = (rule) => {
46
+ const firstSelector = rule.prelude.type === "SelectorList" ? rule.prelude.children.first : null;
47
+ if (firstSelector?.type === "Selector" && firstSelector.children.first?.type === "NestingSelector") return;
48
+ const selectorClasses = [];
49
+ walk(rule.prelude, {
50
+ visit: "ClassSelector",
51
+ enter(classSelector) {
52
+ selectorClasses.push(string.decode(classSelector.name));
53
+ }
54
+ });
55
+ if (enclosingAtRules.length > 0) {
56
+ const nonInlinablePart = nestAtRulesInsideRule(rule, enclosingAtRules);
57
+ for (const className of selectorClasses) if (classSet.has(className)) appendRule(nonInlinableRules, className, nonInlinablePart);
58
+ return;
59
+ }
60
+ if (isRuleInlinable(rule)) {
61
+ for (const className of selectorClasses) if (classSet.has(className)) appendRule(inlinableRules, className, rule);
62
+ } else {
63
+ const { inlinablePart, nonInlinablePart } = splitMixedRule(rule);
64
+ for (const className of selectorClasses) {
65
+ if (!classSet.has(className)) continue;
66
+ if (inlinablePart) appendRule(inlinableRules, className, inlinablePart);
67
+ if (nonInlinablePart) appendRule(nonInlinableRules, className, nonInlinablePart);
68
+ }
69
+ }
70
+ };
71
+ walk(root, {
72
+ enter(node) {
73
+ if (node.type === "Atrule") {
74
+ if (NON_INLINABLE_ATRULES.has(node.name.toLowerCase())) enclosingAtRules.push(node);
75
+ } else if (node.type === "Rule") handleRule(node);
76
+ },
77
+ leave(node) {
78
+ if (node.type === "Atrule" && NON_INLINABLE_ATRULES.has(node.name.toLowerCase())) enclosingAtRules.pop();
79
+ }
80
+ });
81
+ return {
82
+ inlinable: inlinableRules,
83
+ nonInlinable: nonInlinableRules
84
+ };
85
+ }
86
+ //#endregion
87
+ export { extractRulesPerClass };
@@ -0,0 +1,35 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ let css_tree = require("css-tree");
3
+ //#region src/components/tailwind/utils/css/get-custom-properties.ts
4
+ function getCustomProperties(node) {
5
+ const customProperties = /* @__PURE__ */ new Map();
6
+ (0, css_tree.walk)(node, {
7
+ visit: "Atrule",
8
+ enter(atrule) {
9
+ if (atrule.name === "property" && atrule.prelude) {
10
+ const prelude = (0, css_tree.generate)(atrule.prelude);
11
+ if (prelude.startsWith("--")) {
12
+ let syntax;
13
+ let inherits;
14
+ let initialValue;
15
+ (0, css_tree.walk)(atrule, {
16
+ visit: "Declaration",
17
+ enter(declaration) {
18
+ if (declaration.property === "syntax") syntax = declaration;
19
+ if (declaration.property === "inherits") inherits = declaration;
20
+ if (declaration.property === "initial-value") initialValue = declaration;
21
+ }
22
+ });
23
+ customProperties.set(prelude, {
24
+ syntax,
25
+ inherits,
26
+ initialValue
27
+ });
28
+ }
29
+ }
30
+ }
31
+ });
32
+ return customProperties;
33
+ }
34
+ //#endregion
35
+ exports.getCustomProperties = getCustomProperties;
@@ -0,0 +1,34 @@
1
+ import { generate, walk } from "css-tree/dist/csstree.esm";
2
+ //#region src/components/tailwind/utils/css/get-custom-properties.ts
3
+ function getCustomProperties(node) {
4
+ const customProperties = /* @__PURE__ */ new Map();
5
+ walk(node, {
6
+ visit: "Atrule",
7
+ enter(atrule) {
8
+ if (atrule.name === "property" && atrule.prelude) {
9
+ const prelude = generate(atrule.prelude);
10
+ if (prelude.startsWith("--")) {
11
+ let syntax;
12
+ let inherits;
13
+ let initialValue;
14
+ walk(atrule, {
15
+ visit: "Declaration",
16
+ enter(declaration) {
17
+ if (declaration.property === "syntax") syntax = declaration;
18
+ if (declaration.property === "inherits") inherits = declaration;
19
+ if (declaration.property === "initial-value") initialValue = declaration;
20
+ }
21
+ });
22
+ customProperties.set(prelude, {
23
+ syntax,
24
+ inherits,
25
+ initialValue
26
+ });
27
+ }
28
+ }
29
+ }
30
+ });
31
+ return customProperties;
32
+ }
33
+ //#endregion
34
+ export { getCustomProperties };
@@ -0,0 +1,10 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ let css_tree = require("css-tree");
3
+ //#region src/components/tailwind/utils/css/is-part-inlinable.ts
4
+ function isPartInlinable(part) {
5
+ const hasAtRuleInside = (0, css_tree.find)(part, (node) => node.type === "Atrule") !== null;
6
+ const hasPseudoSelector = (0, css_tree.find)(part, (node) => node.type === "PseudoClassSelector" || node.type === "PseudoElementSelector") !== null;
7
+ return !hasAtRuleInside && !hasPseudoSelector;
8
+ }
9
+ //#endregion
10
+ exports.isPartInlinable = isPartInlinable;
@@ -0,0 +1,9 @@
1
+ import { find } from "css-tree/dist/csstree.esm";
2
+ //#region src/components/tailwind/utils/css/is-part-inlinable.ts
3
+ function isPartInlinable(part) {
4
+ const hasAtRuleInside = find(part, (node) => node.type === "Atrule") !== null;
5
+ const hasPseudoSelector = find(part, (node) => node.type === "PseudoClassSelector" || node.type === "PseudoElementSelector") !== null;
6
+ return !hasAtRuleInside && !hasPseudoSelector;
7
+ }
8
+ //#endregion
9
+ export { isPartInlinable };
@@ -0,0 +1,10 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ let css_tree = require("css-tree");
3
+ //#region src/components/tailwind/utils/css/is-rule-inlinable.ts
4
+ function isRuleInlinable(rule) {
5
+ const hasAtRuleInside = (0, css_tree.find)(rule, (node) => node.type === "Atrule") !== null;
6
+ const hasPseudoSelector = (0, css_tree.find)(rule, (node) => node.type === "PseudoClassSelector" || node.type === "PseudoElementSelector") !== null;
7
+ return !hasAtRuleInside && !hasPseudoSelector;
8
+ }
9
+ //#endregion
10
+ exports.isRuleInlinable = isRuleInlinable;
@@ -0,0 +1,9 @@
1
+ import { find } from "css-tree/dist/csstree.esm";
2
+ //#region src/components/tailwind/utils/css/is-rule-inlinable.ts
3
+ function isRuleInlinable(rule) {
4
+ const hasAtRuleInside = find(rule, (node) => node.type === "Atrule") !== null;
5
+ const hasPseudoSelector = find(rule, (node) => node.type === "PseudoClassSelector" || node.type === "PseudoElementSelector") !== null;
6
+ return !hasAtRuleInside && !hasPseudoSelector;
7
+ }
8
+ //#endregion
9
+ export { isRuleInlinable };
@@ -0,0 +1,52 @@
1
+ require("../../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_get_react_property = require("../compatibility/get-react-property.cjs");
3
+ const require_strip_empty_tailwind_vars = require("./strip-empty-tailwind-vars.cjs");
4
+ const require_unwrap_value = require("./unwrap-value.cjs");
5
+ let css_tree = require("css-tree");
6
+ //#region src/components/tailwind/utils/css/make-inline-styles-for.ts
7
+ function makeInlineStylesFor(inlinableRules, customProperties) {
8
+ const styles = {};
9
+ const localVariableDeclarations = /* @__PURE__ */ new Map();
10
+ for (const rule of inlinableRules) (0, css_tree.walk)(rule, {
11
+ visit: "Declaration",
12
+ enter(declaration) {
13
+ if (declaration.property.startsWith("--")) localVariableDeclarations.set(declaration.property, declaration);
14
+ }
15
+ });
16
+ for (const rule of inlinableRules) {
17
+ (0, css_tree.walk)(rule, {
18
+ visit: "Function",
19
+ enter(func, funcParentListItem) {
20
+ if (func.name === "var") {
21
+ let variableName;
22
+ (0, css_tree.walk)(func, {
23
+ visit: "Identifier",
24
+ enter(identifier) {
25
+ variableName = identifier.name;
26
+ return this.break;
27
+ }
28
+ });
29
+ if (variableName) {
30
+ const definition = localVariableDeclarations.get(variableName);
31
+ if (definition) funcParentListItem.data = require_unwrap_value.unwrapValue(definition.value);
32
+ else {
33
+ const customProperty = customProperties.get(variableName);
34
+ if (customProperty?.initialValue) funcParentListItem.data = require_unwrap_value.unwrapValue(customProperty.initialValue.value);
35
+ }
36
+ }
37
+ }
38
+ }
39
+ });
40
+ (0, css_tree.walk)(rule, {
41
+ visit: "Declaration",
42
+ enter(declaration) {
43
+ if (declaration.property.startsWith("--")) return;
44
+ require_strip_empty_tailwind_vars.stripEmptyTailwindVars(declaration.value);
45
+ styles[require_get_react_property.getReactProperty(declaration.property)] = (0, css_tree.generate)(declaration.value).trim() + (declaration.important ? "!important" : "");
46
+ }
47
+ });
48
+ }
49
+ return styles;
50
+ }
51
+ //#endregion
52
+ exports.makeInlineStylesFor = makeInlineStylesFor;
@@ -0,0 +1,51 @@
1
+ import { getReactProperty } from "../compatibility/get-react-property.mjs";
2
+ import { stripEmptyTailwindVars } from "./strip-empty-tailwind-vars.mjs";
3
+ import { unwrapValue } from "./unwrap-value.mjs";
4
+ import { generate, walk } from "css-tree/dist/csstree.esm";
5
+ //#region src/components/tailwind/utils/css/make-inline-styles-for.ts
6
+ function makeInlineStylesFor(inlinableRules, customProperties) {
7
+ const styles = {};
8
+ const localVariableDeclarations = /* @__PURE__ */ new Map();
9
+ for (const rule of inlinableRules) walk(rule, {
10
+ visit: "Declaration",
11
+ enter(declaration) {
12
+ if (declaration.property.startsWith("--")) localVariableDeclarations.set(declaration.property, declaration);
13
+ }
14
+ });
15
+ for (const rule of inlinableRules) {
16
+ walk(rule, {
17
+ visit: "Function",
18
+ enter(func, funcParentListItem) {
19
+ if (func.name === "var") {
20
+ let variableName;
21
+ walk(func, {
22
+ visit: "Identifier",
23
+ enter(identifier) {
24
+ variableName = identifier.name;
25
+ return this.break;
26
+ }
27
+ });
28
+ if (variableName) {
29
+ const definition = localVariableDeclarations.get(variableName);
30
+ if (definition) funcParentListItem.data = unwrapValue(definition.value);
31
+ else {
32
+ const customProperty = customProperties.get(variableName);
33
+ if (customProperty?.initialValue) funcParentListItem.data = unwrapValue(customProperty.initialValue.value);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ });
39
+ walk(rule, {
40
+ visit: "Declaration",
41
+ enter(declaration) {
42
+ if (declaration.property.startsWith("--")) return;
43
+ stripEmptyTailwindVars(declaration.value);
44
+ styles[getReactProperty(declaration.property)] = generate(declaration.value).trim() + (declaration.important ? "!important" : "");
45
+ }
46
+ });
47
+ }
48
+ return styles;
49
+ }
50
+ //#endregion
51
+ export { makeInlineStylesFor };