react-email 4.1.0-canary.6 → 4.1.0-canary.8

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 (282) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{cli/index.mjs → index.js} +437 -429
  3. package/package.json +10 -45
  4. package/src/commands/build.ts +306 -0
  5. package/src/commands/dev.ts +27 -0
  6. package/src/commands/export.ts +204 -0
  7. package/src/commands/start.ts +38 -0
  8. package/src/index.ts +55 -0
  9. package/src/utils/__snapshots__/tree.spec.ts.snap +27 -0
  10. package/src/utils/esbuild/renderring-utilities-exporter.ts +1 -1
  11. package/src/utils/get-emails-directory-metadata.spec.ts +1 -1
  12. package/src/utils/get-preview-server-location.ts +32 -0
  13. package/src/utils/index.ts +2 -6
  14. package/src/utils/packageJson.ts +4 -0
  15. package/src/utils/preview/get-env-variables-for-preview-app.ts +14 -0
  16. package/src/utils/preview/hot-reloading/create-dependency-graph.spec.ts +281 -0
  17. package/src/utils/preview/hot-reloading/create-dependency-graph.ts +321 -0
  18. package/src/utils/preview/hot-reloading/get-imported-modules.spec.ts +151 -0
  19. package/src/utils/preview/hot-reloading/get-imported-modules.ts +49 -0
  20. package/src/utils/preview/hot-reloading/resolve-path-aliases.spec.ts +11 -0
  21. package/src/utils/preview/hot-reloading/resolve-path-aliases.ts +32 -0
  22. package/src/utils/preview/hot-reloading/setup-hot-reloading.ts +121 -0
  23. package/src/utils/preview/hot-reloading/test/tsconfig.json +8 -0
  24. package/src/utils/preview/index.ts +2 -0
  25. package/src/utils/preview/serve-static-file.ts +51 -0
  26. package/src/utils/preview/start-dev-server.ts +234 -0
  27. package/src/utils/tree.spec.ts +5 -0
  28. package/src/utils/tree.ts +76 -0
  29. package/src/utils/types/hot-reload-change.ts +1 -1
  30. package/src/utils/types/hot-reload-event.ts +1 -1
  31. package/tsconfig.json +4 -10
  32. package/dist/preview/.next/BUILD_ID +0 -1
  33. package/dist/preview/.next/app-build-manifest.json +0 -44
  34. package/dist/preview/.next/app-path-routes-manifest.json +0 -6
  35. package/dist/preview/.next/build-manifest.json +0 -33
  36. package/dist/preview/.next/diagnostics/build-diagnostics.json +0 -6
  37. package/dist/preview/.next/diagnostics/framework.json +0 -1
  38. package/dist/preview/.next/export-marker.json +0 -6
  39. package/dist/preview/.next/images-manifest.json +0 -57
  40. package/dist/preview/.next/next-minimal-server.js.nft.json +0 -1
  41. package/dist/preview/.next/next-server.js.nft.json +0 -1
  42. package/dist/preview/.next/package.json +0 -1
  43. package/dist/preview/.next/prerender-manifest.json +0 -41
  44. package/dist/preview/.next/react-loadable-manifest.json +0 -1
  45. package/dist/preview/.next/required-server-files.json +0 -311
  46. package/dist/preview/.next/routes-manifest.json +0 -64
  47. package/dist/preview/.next/server/app/_not-found/page.js +0 -1
  48. package/dist/preview/.next/server/app/_not-found/page.js.nft.json +0 -1
  49. package/dist/preview/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
  50. package/dist/preview/.next/server/app/favicon.ico/route.js +0 -1
  51. package/dist/preview/.next/server/app/favicon.ico/route.js.nft.json +0 -1
  52. package/dist/preview/.next/server/app/favicon.ico.body +0 -0
  53. package/dist/preview/.next/server/app/favicon.ico.meta +0 -1
  54. package/dist/preview/.next/server/app/page.js +0 -1
  55. package/dist/preview/.next/server/app/page.js.nft.json +0 -1
  56. package/dist/preview/.next/server/app/page_client-reference-manifest.js +0 -1
  57. package/dist/preview/.next/server/app/preview/[...slug]/page.js +0 -321
  58. package/dist/preview/.next/server/app/preview/[...slug]/page.js.nft.json +0 -1
  59. package/dist/preview/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +0 -1
  60. package/dist/preview/.next/server/app-paths-manifest.json +0 -6
  61. package/dist/preview/.next/server/chunks/134.js +0 -6
  62. package/dist/preview/.next/server/chunks/235.js +0 -15
  63. package/dist/preview/.next/server/chunks/315.js +0 -1
  64. package/dist/preview/.next/server/chunks/343.js +0 -20
  65. package/dist/preview/.next/server/chunks/428.js +0 -14
  66. package/dist/preview/.next/server/chunks/963.js +0 -1
  67. package/dist/preview/.next/server/functions-config-manifest.json +0 -4
  68. package/dist/preview/.next/server/interception-route-rewrite-manifest.js +0 -1
  69. package/dist/preview/.next/server/middleware-build-manifest.js +0 -1
  70. package/dist/preview/.next/server/middleware-manifest.json +0 -6
  71. package/dist/preview/.next/server/middleware-react-loadable-manifest.js +0 -1
  72. package/dist/preview/.next/server/next-font-manifest.js +0 -1
  73. package/dist/preview/.next/server/next-font-manifest.json +0 -1
  74. package/dist/preview/.next/server/pages/500.html +0 -1
  75. package/dist/preview/.next/server/pages/_app.js +0 -1
  76. package/dist/preview/.next/server/pages/_app.js.nft.json +0 -1
  77. package/dist/preview/.next/server/pages/_document.js +0 -1
  78. package/dist/preview/.next/server/pages/_document.js.nft.json +0 -1
  79. package/dist/preview/.next/server/pages/_error.js +0 -1
  80. package/dist/preview/.next/server/pages/_error.js.nft.json +0 -1
  81. package/dist/preview/.next/server/pages-manifest.json +0 -5
  82. package/dist/preview/.next/server/server-reference-manifest.js +0 -1
  83. package/dist/preview/.next/server/server-reference-manifest.json +0 -1
  84. package/dist/preview/.next/server/webpack-runtime.js +0 -1
  85. package/dist/preview/.next/static/EYH0WN4--LLC3GZrZIVN8/_buildManifest.js +0 -1
  86. package/dist/preview/.next/static/EYH0WN4--LLC3GZrZIVN8/_ssgManifest.js +0 -1
  87. package/dist/preview/.next/static/chunks/107-3043079e7cb8bcae.js +0 -1
  88. package/dist/preview/.next/static/chunks/293-297b1eb2241f9a70.js +0 -1
  89. package/dist/preview/.next/static/chunks/3bd82e28-cda2c00a924937c5.js +0 -1
  90. package/dist/preview/.next/static/chunks/45-1021fac82f766268.js +0 -1
  91. package/dist/preview/.next/static/chunks/484-a7b30a88a7939680.js +0 -1
  92. package/dist/preview/.next/static/chunks/589-817d8691661d370e.js +0 -1
  93. package/dist/preview/.next/static/chunks/902-c34acb56733e0ce1.js +0 -1
  94. package/dist/preview/.next/static/chunks/app/_not-found/page-4cbc7dce3ad33336.js +0 -1
  95. package/dist/preview/.next/static/chunks/app/layout-46a09d953364e102.js +0 -1
  96. package/dist/preview/.next/static/chunks/app/page-65fd67d48528e2ba.js +0 -1
  97. package/dist/preview/.next/static/chunks/app/preview/[...slug]/page-5e69ffe7506383a0.js +0 -1
  98. package/dist/preview/.next/static/chunks/f33a14d2-ec7c5f0b91818561.js +0 -6
  99. package/dist/preview/.next/static/chunks/framework-b887e9fc751a9906.js +0 -1
  100. package/dist/preview/.next/static/chunks/main-9a03e7ba8acb1900.js +0 -1
  101. package/dist/preview/.next/static/chunks/main-app-dbd8e1ec12eabb66.js +0 -1
  102. package/dist/preview/.next/static/chunks/pages/_app-542a93a5a214e1c0.js +0 -1
  103. package/dist/preview/.next/static/chunks/pages/_error-d5fe1b1612642f76.js +0 -1
  104. package/dist/preview/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  105. package/dist/preview/.next/static/chunks/webpack-31c45daa2bd82a7b.js +0 -1
  106. package/dist/preview/.next/static/css/6f42d128f111d7fa.css +0 -3
  107. package/dist/preview/.next/static/media/05613964ce6c782e-s.p.otf +0 -0
  108. package/dist/preview/.next/static/media/11c6126b9369e85e-s.p.otf +0 -0
  109. package/dist/preview/.next/static/media/26a46d62cd723877-s.woff2 +0 -0
  110. package/dist/preview/.next/static/media/26cb97734d8cb717-s.p.otf +0 -0
  111. package/dist/preview/.next/static/media/55c55f0601d81cf3-s.woff2 +0 -0
  112. package/dist/preview/.next/static/media/581909926a08bbc8-s.woff2 +0 -0
  113. package/dist/preview/.next/static/media/6d93bde91c0c2823-s.woff2 +0 -0
  114. package/dist/preview/.next/static/media/97e0cb1ae144a2a9-s.woff2 +0 -0
  115. package/dist/preview/.next/static/media/a34f9d1faa5f3315-s.p.woff2 +0 -0
  116. package/dist/preview/.next/static/media/bb6462617151f6b7-s.p.otf +0 -0
  117. package/dist/preview/.next/static/media/cf6daef822ab0142-s.p.otf +0 -0
  118. package/dist/preview/.next/static/media/df0a9ae256c0569c-s.woff2 +0 -0
  119. package/dist/preview/.next/static/media/e4051546b3043204-s.p.otf +0 -0
  120. package/dist/preview/.next/static/media/logo.2ce2a759.png +0 -0
  121. package/dist/preview/.next/trace +0 -28
  122. package/dist/preview/.next/types/app/layout.ts +0 -84
  123. package/dist/preview/.next/types/app/page.ts +0 -84
  124. package/dist/preview/.next/types/app/preview/[...slug]/page.ts +0 -84
  125. package/dist/preview/.next/types/cache-life.d.ts +0 -141
  126. package/dist/preview/.next/types/package.json +0 -1
  127. package/module-punycode.d.ts +0 -3
  128. package/next-env.d.ts +0 -5
  129. package/next.config.js +0 -22
  130. package/postcss.config.js +0 -8
  131. package/scripts/build-preview-server.mjs +0 -33
  132. package/scripts/fill-caniemail-data.mjs +0 -36
  133. package/src/actions/email-validation/caniemail-data.ts +0 -85993
  134. package/src/actions/email-validation/check-compatibility.ts +0 -333
  135. package/src/actions/email-validation/check-images.spec.tsx +0 -100
  136. package/src/actions/email-validation/check-images.ts +0 -160
  137. package/src/actions/email-validation/check-links.spec.tsx +0 -113
  138. package/src/actions/email-validation/check-links.ts +0 -113
  139. package/src/actions/email-validation/get-code-location-from-ast-element.ts +0 -18
  140. package/src/actions/email-validation/quick-fetch.ts +0 -14
  141. package/src/actions/get-email-path-from-slug.ts +0 -32
  142. package/src/actions/get-emails-directory-metadata-action.ts +0 -19
  143. package/src/actions/render-email-by-path.tsx +0 -121
  144. package/src/animated-icons-data/help.json +0 -1082
  145. package/src/animated-icons-data/link.json +0 -1309
  146. package/src/animated-icons-data/load.json +0 -443
  147. package/src/animated-icons-data/mail.json +0 -1320
  148. package/src/app/env.ts +0 -15
  149. package/src/app/favicon.ico +0 -0
  150. package/src/app/fonts/SFMono/SFMonoBold.otf +0 -0
  151. package/src/app/fonts/SFMono/SFMonoBoldItalic.otf +0 -0
  152. package/src/app/fonts/SFMono/SFMonoHeavy.otf +0 -0
  153. package/src/app/fonts/SFMono/SFMonoHeavyItalic.otf +0 -0
  154. package/src/app/fonts/SFMono/SFMonoLight.otf +0 -0
  155. package/src/app/fonts/SFMono/SFMonoLightItalic.otf +0 -0
  156. package/src/app/fonts/SFMono/SFMonoMedium.otf +0 -0
  157. package/src/app/fonts/SFMono/SFMonoMediumItalic.otf +0 -0
  158. package/src/app/fonts/SFMono/SFMonoRegular.otf +0 -0
  159. package/src/app/fonts/SFMono/SFMonoRegularItalic.otf +0 -0
  160. package/src/app/fonts/SFMono/SFMonoSemibold.otf +0 -0
  161. package/src/app/fonts/SFMono/SFMonoSemiboldItalic.otf +0 -0
  162. package/src/app/fonts.ts +0 -39
  163. package/src/app/globals.css +0 -15
  164. package/src/app/layout.tsx +0 -45
  165. package/src/app/logo.png +0 -0
  166. package/src/app/page.tsx +0 -46
  167. package/src/app/preview/[...slug]/page.tsx +0 -157
  168. package/src/app/preview/[...slug]/preview.tsx +0 -234
  169. package/src/app/preview/[...slug]/rendering-error.tsx +0 -40
  170. package/src/components/button.tsx +0 -101
  171. package/src/components/code-container.tsx +0 -164
  172. package/src/components/code-snippet.tsx +0 -9
  173. package/src/components/code.tsx +0 -184
  174. package/src/components/heading.tsx +0 -113
  175. package/src/components/icons/icon-arrow-down.tsx +0 -16
  176. package/src/components/icons/icon-base.tsx +0 -26
  177. package/src/components/icons/icon-bug.tsx +0 -19
  178. package/src/components/icons/icon-button.tsx +0 -23
  179. package/src/components/icons/icon-check.tsx +0 -19
  180. package/src/components/icons/icon-clipboard.tsx +0 -40
  181. package/src/components/icons/icon-download.tsx +0 -19
  182. package/src/components/icons/icon-email.tsx +0 -18
  183. package/src/components/icons/icon-file.tsx +0 -19
  184. package/src/components/icons/icon-folder-open.tsx +0 -19
  185. package/src/components/icons/icon-folder.tsx +0 -18
  186. package/src/components/icons/icon-hide-sidebar.tsx +0 -23
  187. package/src/components/icons/icon-image.tsx +0 -19
  188. package/src/components/icons/icon-info.tsx +0 -18
  189. package/src/components/icons/icon-link.tsx +0 -14
  190. package/src/components/icons/icon-monitor.tsx +0 -19
  191. package/src/components/icons/icon-moon.tsx +0 -16
  192. package/src/components/icons/icon-phone.tsx +0 -26
  193. package/src/components/icons/icon-reload.tsx +0 -18
  194. package/src/components/icons/icon-source.tsx +0 -19
  195. package/src/components/icons/icon-stamp.tsx +0 -14
  196. package/src/components/icons/icon-sun.tsx +0 -16
  197. package/src/components/icons/icon-warning.tsx +0 -31
  198. package/src/components/index.ts +0 -7
  199. package/src/components/logo.tsx +0 -63
  200. package/src/components/resizable-wrapper.tsx +0 -173
  201. package/src/components/send.tsx +0 -134
  202. package/src/components/shell.tsx +0 -92
  203. package/src/components/sidebar/file-tree-directory-children.tsx +0 -139
  204. package/src/components/sidebar/file-tree-directory.tsx +0 -92
  205. package/src/components/sidebar/file-tree.tsx +0 -31
  206. package/src/components/sidebar/index.ts +0 -1
  207. package/src/components/sidebar/sidebar.tsx +0 -43
  208. package/src/components/text.tsx +0 -99
  209. package/src/components/toolbar/checking-results.tsx +0 -150
  210. package/src/components/toolbar/code-preview-line-link.tsx +0 -40
  211. package/src/components/toolbar/compatibility.tsx +0 -113
  212. package/src/components/toolbar/linter.tsx +0 -278
  213. package/src/components/toolbar/results.tsx +0 -51
  214. package/src/components/toolbar/spam-assassin.tsx +0 -155
  215. package/src/components/toolbar/toolbar-button.tsx +0 -52
  216. package/src/components/toolbar/use-cached-state.ts +0 -33
  217. package/src/components/toolbar.tsx +0 -349
  218. package/src/components/tooltip-content.tsx +0 -31
  219. package/src/components/tooltip.tsx +0 -19
  220. package/src/components/topbar/active-view-toggle-group.tsx +0 -86
  221. package/src/components/topbar/theme-toggle-group.tsx +0 -87
  222. package/src/components/topbar/view-size-controls.tsx +0 -247
  223. package/src/components/topbar.tsx +0 -59
  224. package/src/contexts/emails.tsx +0 -59
  225. package/src/contexts/fragment-identifier.tsx +0 -48
  226. package/src/contexts/preview.tsx +0 -79
  227. package/src/hooks/use-clamped-state.ts +0 -24
  228. package/src/hooks/use-email-rendering-result.ts +0 -58
  229. package/src/hooks/use-fragment-identifier.ts +0 -14
  230. package/src/hooks/use-hot-reload.ts +0 -31
  231. package/src/hooks/use-icon-animation.ts +0 -41
  232. package/src/hooks/use-iframe-color-scheme.ts +0 -35
  233. package/src/hooks/use-rendering-metadata.ts +0 -36
  234. package/src/utils/__snapshots__/get-email-component.spec.ts.snap +0 -3
  235. package/src/utils/caniemail/all-css-properties.ts +0 -358
  236. package/src/utils/caniemail/ast/__snapshots__/get-object-variables.spec.ts.snap +0 -74
  237. package/src/utils/caniemail/ast/__snapshots__/get-used-style-properties.spec.ts.snap +0 -24
  238. package/src/utils/caniemail/ast/get-object-variables.spec.ts +0 -19
  239. package/src/utils/caniemail/ast/get-object-variables.ts +0 -61
  240. package/src/utils/caniemail/ast/get-used-style-properties.spec.ts +0 -23
  241. package/src/utils/caniemail/ast/get-used-style-properties.ts +0 -91
  242. package/src/utils/caniemail/get-compatibility-stats-for-entry.ts +0 -118
  243. package/src/utils/caniemail/get-css-functions.ts +0 -25
  244. package/src/utils/caniemail/get-css-property-names.ts +0 -32
  245. package/src/utils/caniemail/get-css-property-with-value.ts +0 -14
  246. package/src/utils/caniemail/get-css-unit.ts +0 -3
  247. package/src/utils/caniemail/get-element-attributes.ts +0 -7
  248. package/src/utils/caniemail/get-element-names.ts +0 -20
  249. package/src/utils/caniemail/tailwind/generate-tailwind-rules.ts +0 -30
  250. package/src/utils/caniemail/tailwind/get-tailwind-config.ts +0 -187
  251. package/src/utils/caniemail/tailwind/get-tailwind-metadata.spec.ts +0 -25
  252. package/src/utils/caniemail/tailwind/get-tailwind-metadata.ts +0 -45
  253. package/src/utils/caniemail/tailwind/setup-tailwind-context.ts +0 -15
  254. package/src/utils/cn.ts +0 -6
  255. package/src/utils/constants.ts +0 -6
  256. package/src/utils/contains-email-template.spec.ts +0 -107
  257. package/src/utils/contains-email-template.ts +0 -33
  258. package/src/utils/copy-text-to-clipboard.ts +0 -7
  259. package/src/utils/get-email-component.spec.ts +0 -41
  260. package/src/utils/get-email-component.ts +0 -134
  261. package/src/utils/get-line-and-column-from-offset.spec.ts +0 -11
  262. package/src/utils/get-line-and-column-from-offset.ts +0 -11
  263. package/src/utils/improve-error-with-sourcemap.ts +0 -86
  264. package/src/utils/js-email-detection.spec.ts +0 -24
  265. package/src/utils/language-map.ts +0 -7
  266. package/src/utils/linting.ts +0 -60
  267. package/src/utils/load-stream.ts +0 -15
  268. package/src/utils/result.ts +0 -49
  269. package/src/utils/run-bundled-code.ts +0 -64
  270. package/src/utils/sanitize.ts +0 -6
  271. package/src/utils/static-node-modules-for-vm.ts +0 -93
  272. package/src/utils/testing/js-email-export-default.js +0 -17
  273. package/src/utils/testing/js-email-test.js +0 -18
  274. package/src/utils/testing/mdx-email-test.js +0 -128
  275. package/src/utils/testing/request-response-email.tsx +0 -9
  276. package/src/utils/types/as.ts +0 -26
  277. package/src/utils/types/email-template.ts +0 -8
  278. package/src/utils/types/error-object.ts +0 -11
  279. package/src/utils/unreachable.ts +0 -8
  280. package/tailwind-internals.d.ts +0 -133
  281. package/tailwind.config.ts +0 -99
  282. /package/src/{components/toolbar/results-table.tsx → utils/preview/hot-reloading/test/some-file.ts} +0 -0
@@ -1,58 +0,0 @@
1
- import { useState } from 'react';
2
- import { getEmailPathFromSlug } from '../actions/get-email-path-from-slug';
3
- import {
4
- type EmailRenderingResult,
5
- renderEmailByPath,
6
- } from '../actions/render-email-by-path';
7
- import { isBuilding } from '../app/env';
8
- import { useEmails } from '../contexts/emails';
9
- import { containsEmailTemplate } from '../utils/contains-email-template';
10
- import { useHotreload } from './use-hot-reload';
11
-
12
- export const useEmailRenderingResult = (
13
- emailPath: string,
14
- serverEmailRenderedResult: EmailRenderingResult,
15
- ) => {
16
- const [renderingResult, setRenderingResult] = useState(
17
- serverEmailRenderedResult,
18
- );
19
-
20
- const { emailsDirectoryMetadata } = useEmails();
21
-
22
- if (!isBuilding) {
23
- // biome-ignore lint/correctness/useHookAtTopLevel: This is fine since isBuilding does not change at runtime
24
- useHotreload(async (changes) => {
25
- for await (const change of changes) {
26
- const relativePathForChangedFile =
27
- // ex: apple-receipt.tsx
28
- // it will be the path relative to the emails directory, so it is already
29
- // going to be equivalent to the slug
30
- change.filename;
31
-
32
- if (
33
- !containsEmailTemplate(
34
- relativePathForChangedFile,
35
- emailsDirectoryMetadata,
36
- )
37
- ) {
38
- continue;
39
- }
40
-
41
- const pathForChangedEmail = await getEmailPathFromSlug(
42
- relativePathForChangedFile,
43
- );
44
-
45
- const newRenderingResult = await renderEmailByPath(
46
- pathForChangedEmail,
47
- true,
48
- );
49
-
50
- if (pathForChangedEmail === emailPath) {
51
- setRenderingResult(newRenderingResult);
52
- }
53
- }
54
- });
55
- }
56
-
57
- return renderingResult;
58
- };
@@ -1,14 +0,0 @@
1
- import { usePathname, useSearchParams } from 'next/navigation';
2
- import { useEffect, useState } from 'react';
3
-
4
- export const useFragmentIdentifier = () => {
5
- const pathname = usePathname();
6
- const searchParams = useSearchParams();
7
- const [fragmentIdentifier, setFragmentIdentifier] = useState<string>();
8
-
9
- useEffect(() => {
10
- setFragmentIdentifier(global.location?.hash);
11
- }, [pathname, searchParams]);
12
-
13
- return fragmentIdentifier;
14
- };
@@ -1,31 +0,0 @@
1
- 'use client';
2
- import { useEffect, useRef } from 'react';
3
- import { io, type Socket } from 'socket.io-client';
4
- import type { HotReloadChange } from '../utils/types/hot-reload-change';
5
-
6
- /**
7
- * Hook that detects any "reload" event sent from the CLI's web socket
8
- * and calls the received parameter callback
9
- */
10
- export const useHotreload = (
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- onShouldReload: (changes: HotReloadChange[]) => any,
13
- ) => {
14
- const socketRef = useRef<Socket | null>(null);
15
-
16
- useEffect(() => {
17
- if (!socketRef.current) {
18
- socketRef.current = io();
19
- }
20
- const socket = socketRef.current;
21
-
22
- socket.on('reload', (changes: HotReloadChange[]) => {
23
- console.debug('Reloading...');
24
- void onShouldReload(changes);
25
- });
26
-
27
- return () => {
28
- socket.off();
29
- };
30
- }, [onShouldReload]);
31
- };
@@ -1,41 +0,0 @@
1
- import type { DotLottie } from '@lottiefiles/dotlottie-react';
2
- import * as React from 'react';
3
-
4
- const TIMEOUT = 150;
5
- const THRESHOLD_ANIMATION = 0.9;
6
-
7
- export const useIconAnimation = () => {
8
- const ref = React.useRef<DotLottie>(null);
9
- const timer = React.useRef<NodeJS.Timeout | null>(null);
10
-
11
- const onMouseLeave = React.useCallback(() => {
12
- timer.current && clearTimeout(timer.current);
13
- }, []);
14
-
15
- const onMouseEnter = React.useCallback(() => {
16
- if (!ref.current) {
17
- return;
18
- }
19
-
20
- const total = Math.round(ref.current.totalFrames ?? 0);
21
- const current = Math.round((ref.current.currentFrame ?? 0) + 1);
22
-
23
- if (current === 1 || current >= total * THRESHOLD_ANIMATION) {
24
- timer.current = setTimeout(() => {
25
- if (!ref.current) {
26
- return;
27
- }
28
-
29
- ref.current.stop();
30
- ref.current.setSpeed(1);
31
- ref.current.play();
32
- }, TIMEOUT);
33
- }
34
- }, []);
35
-
36
- return {
37
- ref,
38
- onMouseLeave,
39
- onMouseEnter,
40
- };
41
- };
@@ -1,35 +0,0 @@
1
- import * as React from 'react';
2
-
3
- export function useIframeColorScheme(
4
- iframeRef: React.RefObject<HTMLIFrameElement | null>,
5
- theme: string,
6
- ) {
7
- React.useEffect(() => {
8
- const iframe = iframeRef.current;
9
-
10
- if (!iframe) return;
11
-
12
- // Set on iframe element itself
13
- iframe.style.colorScheme = theme;
14
-
15
- // Set on iframe's document if available
16
- if (iframe.contentDocument) {
17
- iframe.contentDocument.documentElement.style.colorScheme = theme;
18
- iframe.contentDocument.body.style.colorScheme = theme;
19
- }
20
-
21
- // Ensure styles are applied after it loads
22
- const handleLoad = () => {
23
- if (iframe.contentDocument) {
24
- iframe.contentDocument.documentElement.style.colorScheme = theme;
25
- iframe.contentDocument.body.style.colorScheme = theme;
26
- }
27
- };
28
-
29
- iframe.addEventListener('load', handleLoad);
30
-
31
- return () => {
32
- iframe.removeEventListener('load', handleLoad);
33
- };
34
- }, [theme, iframeRef]);
35
- }
@@ -1,36 +0,0 @@
1
- import { useEffect } from 'react';
2
- import type {
3
- EmailRenderingResult,
4
- RenderedEmailMetadata,
5
- } from '../actions/render-email-by-path';
6
-
7
- const lastRenderingMetadataPerEmailPath = {} as Record<
8
- string,
9
- RenderedEmailMetadata
10
- >;
11
-
12
- /**
13
- * Returns the rendering metadata if the given `renderingResult`
14
- * does not error. If it does error it returns the last value it had for the hook.
15
- */
16
- export const useRenderingMetadata = (
17
- emailPath: string,
18
- renderingResult: EmailRenderingResult,
19
- serverRenderingMetadata: EmailRenderingResult,
20
- ): RenderedEmailMetadata | undefined => {
21
- useEffect(() => {
22
- if ('markup' in renderingResult) {
23
- lastRenderingMetadataPerEmailPath[emailPath] = renderingResult;
24
- } else if (
25
- typeof serverRenderingMetadata !== 'undefined' &&
26
- 'markup' in serverRenderingMetadata &&
27
- typeof lastRenderingMetadataPerEmailPath[emailPath] === 'undefined'
28
- ) {
29
- lastRenderingMetadataPerEmailPath[emailPath] = serverRenderingMetadata;
30
- }
31
- }, [renderingResult, emailPath, serverRenderingMetadata]);
32
-
33
- return 'error' in renderingResult
34
- ? lastRenderingMetadataPerEmailPath[emailPath]
35
- : renderingResult;
36
- };
@@ -1,3 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`getEmailComponent() > with a demo email template 1`] = `"<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html dir="ltr" lang="en"><head><link rel="preload" as="image" href="/static/vercel-logo.png"/><link rel="preload" as="image" href="/static/vercel-user.png"/><link rel="preload" as="image" href="/static/vercel-arrow.png"/><link rel="preload" as="image" href="/static/vercel-team.png"/><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta name="x-apple-disable-message-reformatting"/><!--$--></head><body style="margin-left:auto;margin-right:auto;margin-top:auto;margin-bottom:auto;background-color:rgb(255,255,255);padding-left:0.5rem;padding-right:0.5rem;font-family:ui-sans-serif, system-ui, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;"><div style="display:none;overflow:hidden;line-height:1px;opacity:0;max-height:0;max-width:0" data-skip-in-text="true">Join Alan on Vercel<div> ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏</div></div><table align="center" width="100%" border="0" cellPadding="0" cellSpacing="0" role="presentation" style="margin-left:auto;margin-right:auto;margin-top:40px;margin-bottom:40px;max-width:465px;border-radius:0.25rem;border-width:1px;border-color:rgb(234,234,234);border-style:solid;padding:20px"><tbody><tr style="width:100%"><td><table align="center" width="100%" border="0" cellPadding="0" cellSpacing="0" role="presentation" style="margin-top:32px"><tbody><tr><td><img alt="Vercel Logo" height="37" src="/static/vercel-logo.png" style="margin-left:auto;margin-right:auto;margin-top:0px;margin-bottom:0px;display:block;outline:none;border:none;text-decoration:none" width="40"/></td></tr></tbody></table><h1 style="margin-left:0px;margin-right:0px;margin-top:30px;margin-bottom:30px;padding:0px;text-align:center;font-weight:400;font-size:24px;color:rgb(0,0,0)">Join <strong>Enigma</strong> on <strong>Vercel</strong></h1><p style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px">Hello <!-- -->alanturing<!-- -->,</p><p style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px"><strong>Alan</strong> (<a href="mailto:alan.turing@example.com" style="color:rgb(37,99,235);text-decoration-line:none" target="_blank">alan.turing@example.com</a>) has invited you to the <strong>Enigma</strong> team on<!-- --> <strong>Vercel</strong>.</p><table align="center" width="100%" border="0" cellPadding="0" cellSpacing="0" role="presentation"><tbody><tr><td><table align="center" width="100%" border="0" cellPadding="0" cellSpacing="0" role="presentation"><tbody style="width:100%"><tr style="width:100%"><td align="right" data-id="__react-email-column"><img alt="alanturing&#x27;s profile picture" height="64" src="/static/vercel-user.png" style="border-radius:9999px;display:block;outline:none;border:none;text-decoration:none" width="64"/></td><td align="center" data-id="__react-email-column"><img alt="Arrow indicating invitation" height="9" src="/static/vercel-arrow.png" style="display:block;outline:none;border:none;text-decoration:none" width="12"/></td><td align="left" data-id="__react-email-column"><img alt="Enigma team logo" height="64" src="/static/vercel-team.png" style="border-radius:9999px;display:block;outline:none;border:none;text-decoration:none" width="64"/></td></tr></tbody></table></td></tr></tbody></table><table align="center" width="100%" border="0" cellPadding="0" cellSpacing="0" role="presentation" style="margin-top:32px;margin-bottom:32px;text-align:center"><tbody><tr><td><a href="https://vercel.com" style="border-radius:0.25rem;background-color:rgb(0,0,0);padding-left:20px;padding-right:20px;padding-top:12px;padding-bottom:12px;text-align:center;font-weight:600;font-size:12px;color:rgb(255,255,255);text-decoration-line:none;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;mso-padding-alt:0px" target="_blank"><span><!--[if mso]><i style="mso-font-width:500%;mso-text-raise:18" hidden>&#8202;&#8202;</i><![endif]--></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:9px">Join the team</span><span><!--[if mso]><i style="mso-font-width:500%" hidden>&#8202;&#8202;&#8203;</i><![endif]--></span></a></td></tr></tbody></table><p style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px">or copy and paste this URL into your browser:<!-- --> <a href="https://vercel.com" style="color:rgb(37,99,235);text-decoration-line:none" target="_blank">https://vercel.com</a></p><hr style="margin-left:0px;margin-right:0px;margin-top:26px;margin-bottom:26px;width:100%;border-width:1px;border-color:rgb(234,234,234);border-style:solid;border:none;border-top:1px solid #eaeaea"/><p style="color:rgb(102,102,102);font-size:12px;line-height:24px;margin-top:16px;margin-bottom:16px">This invitation was intended for<!-- --> <span style="color:rgb(0,0,0)">alanturing</span>. This invite was sent from <span style="color:rgb(0,0,0)">204.13.186.218</span> <!-- -->located in<!-- --> <span style="color:rgb(0,0,0)">São Paulo, Brazil</span>. If you were not expecting this invitation, you can ignore this email. If you are concerned about your account&#x27;s safety, please reply to this email to get in touch with us.</p></td></tr></tbody></table><!--/$--></body></html>"`;
@@ -1,358 +0,0 @@
1
- // taken from https://www.w3schools.com/cssref/index.php
2
- export const allCssProperties = [
3
- 'accent-color',
4
- 'align-content',
5
- 'align-items',
6
- 'align-self',
7
- 'all',
8
- 'animation',
9
- 'animation-delay',
10
- 'animation-direction',
11
- 'animation-duration',
12
- 'animation-fill-mode',
13
- 'animation-iteration-count',
14
- 'animation-name',
15
- 'animation-play-state',
16
- 'animation-timing-function',
17
- 'aspect-ratio',
18
- 'backdrop-filter',
19
- 'backface-visibility',
20
- 'background',
21
- 'background-attachment',
22
- 'background-blend-mode',
23
- 'background-clip',
24
- 'background-color',
25
- 'background-image',
26
- 'background-origin',
27
- 'background-position',
28
- 'background-position-x',
29
- 'background-position-y',
30
- 'background-repeat',
31
- 'background-size',
32
- 'block-size',
33
- 'border',
34
- 'border-block',
35
- 'border-block-color',
36
- 'border-block-end',
37
- 'border-block-end-color',
38
- 'border-block-end-style',
39
- 'border-block-end-width',
40
- 'border-block-start',
41
- 'border-block-start-color',
42
- 'border-block-start-style',
43
- 'border-block-start-width',
44
- 'border-block-style',
45
- 'border-block-width',
46
- 'border-bottom',
47
- 'border-bottom-color',
48
- 'border-bottom-left-radius',
49
- 'border-bottom-right-radius',
50
- 'border-bottom-style',
51
- 'border-bottom-width',
52
- 'border-collapse',
53
- 'border-color',
54
- 'border-end-end-radius',
55
- 'border-end-start-radius',
56
- 'border-image',
57
- 'border-image-outset',
58
- 'border-image-repeat',
59
- 'border-image-slice',
60
- 'border-image-source',
61
- 'border-image-width',
62
- 'border-inline',
63
- 'border-inline-color',
64
- 'border-inline-end',
65
- 'border-inline-end-color',
66
- 'border-inline-end-style',
67
- 'border-inline-end-width',
68
- 'border-inline-start',
69
- 'border-inline-start-color',
70
- 'border-inline-start-style',
71
- 'border-inline-start-width',
72
- 'border-inline-style',
73
- 'border-inline-width',
74
- 'border-left',
75
- 'border-left-color',
76
- 'border-left-style',
77
- 'border-left-width',
78
- 'border-radius',
79
- 'border-right',
80
- 'border-right-color',
81
- 'border-right-style',
82
- 'border-right-width',
83
- 'border-spacing',
84
- 'border-start-end-radius',
85
- 'border-start-start-radius',
86
- 'border-style',
87
- 'border-top',
88
- 'border-top-color',
89
- 'border-top-left-radius',
90
- 'border-top-right-radius',
91
- 'border-top-style',
92
- 'border-top-width',
93
- 'border-width',
94
- 'bottom',
95
- 'box-decoration-break',
96
- 'box-reflect',
97
- 'box-shadow',
98
- 'box-sizing',
99
- 'break-after',
100
- 'break-before',
101
- 'break-inside',
102
- 'caption-side',
103
- 'caret-color',
104
- '@charset',
105
- 'clear',
106
- 'clip',
107
- 'clip-path',
108
- 'color',
109
- 'column-count',
110
- 'column-fill',
111
- 'column-gap',
112
- 'column-rule',
113
- 'column-rule-color',
114
- 'column-rule-style',
115
- 'column-rule-width',
116
- 'column-span',
117
- 'column-width',
118
- 'columns',
119
- 'content',
120
- 'counter-increment',
121
- 'counter-reset',
122
- 'counter-set',
123
- 'cursor',
124
- 'direction',
125
- 'display',
126
- 'empty-cells',
127
- 'filter',
128
- 'flex',
129
- 'flex-basis',
130
- 'flex-direction',
131
- 'flex-flow',
132
- 'flex-grow',
133
- 'flex-shrink',
134
- 'flex-wrap',
135
- 'float',
136
- 'font',
137
- '@font-face',
138
- 'font-family',
139
- 'font-feature-settings',
140
- '@font-feature-values',
141
- 'font-kerning',
142
- 'font-language-override',
143
- 'font-size',
144
- 'font-size-adjust',
145
- 'font-stretch',
146
- 'font-style',
147
- 'font-synthesis',
148
- 'font-variant',
149
- 'font-variant-alternates',
150
- 'font-variant-caps',
151
- 'font-variant-east-asian',
152
- 'font-variant-ligatures',
153
- 'font-variant-numeric',
154
- 'font-variant-position',
155
- 'font-weight',
156
- 'gap',
157
- 'grid',
158
- 'grid-area',
159
- 'grid-auto-columns',
160
- 'grid-auto-flow',
161
- 'grid-auto-rows',
162
- 'grid-column',
163
- 'grid-column-end',
164
- 'grid-column-gap',
165
- 'grid-column-start',
166
- 'grid-gap',
167
- 'grid-row',
168
- 'grid-row-end',
169
- 'grid-row-gap',
170
- 'grid-row-start',
171
- 'grid-template',
172
- 'grid-template-areas',
173
- 'grid-template-columns',
174
- 'grid-template-rows',
175
- 'hanging-punctuation',
176
- 'height',
177
- 'hyphens',
178
- 'hypenate-character',
179
- 'image-rendering',
180
- '@import',
181
- 'inline-size',
182
- 'inset',
183
- 'inset-block',
184
- 'inset-block-end',
185
- 'inset-block-start',
186
- 'inset-inline',
187
- 'inset-inline-end',
188
- 'inset-inline-start',
189
- 'isolation',
190
- 'justify-content',
191
- 'justify-items',
192
- 'justify-self',
193
- '@keyframes',
194
- 'left',
195
- 'letter-spacing',
196
- 'line-break',
197
- 'line-height',
198
- 'list-style',
199
- 'list-style-image',
200
- 'list-style-position',
201
- 'list-style-type',
202
- 'margin',
203
- 'shape-margin',
204
- 'margin-block',
205
- 'margin-block-end',
206
- 'margin-block-start',
207
- 'margin-bottom',
208
- 'margin-inline',
209
- 'margin-inline-end',
210
- 'margin-inline-start',
211
- 'margin-left',
212
- 'margin-right',
213
- 'margin-top',
214
- 'mask',
215
- 'mask-clip',
216
- 'mask-composite',
217
- 'mask-image',
218
- 'mask-mode',
219
- 'mask-origin',
220
- 'mask-position',
221
- 'mask-repeat',
222
- 'mask-size',
223
- 'mask-type',
224
- 'max-height',
225
- 'max-width',
226
- '@media',
227
- 'max-block-size',
228
- 'max-inline-size',
229
- 'min-block-size',
230
- 'min-inline-size',
231
- 'min-height',
232
- 'min-width',
233
- 'mix-blend-mode',
234
- 'object-fit',
235
- 'object-position',
236
- 'offset',
237
- 'offset-anchor',
238
- 'offset-distance',
239
- 'offset-path',
240
- 'offset-rotate',
241
- 'opacity',
242
- 'order',
243
- 'orphans',
244
- 'outline',
245
- 'outline-color',
246
- 'outline-offset',
247
- 'outline-style',
248
- 'outline-width',
249
- 'overflow',
250
- 'overflow-anchor',
251
- 'overflow-wrap',
252
- 'overflow-x',
253
- 'overflow-y',
254
- 'overscroll-behavior',
255
- 'overscroll-behavior-block',
256
- 'overscroll-behavior-inline',
257
- 'overscroll-behavior-x',
258
- 'overscroll-behavior-y',
259
- 'padding',
260
- 'padding-block',
261
- 'padding-block-end',
262
- 'padding-block-start',
263
- 'padding-bottom',
264
- 'padding-inline',
265
- 'padding-inline-end',
266
- 'padding-inline-start',
267
- 'padding-left',
268
- 'padding-right',
269
- 'padding-top',
270
- 'page-break-after',
271
- 'page-break-before',
272
- 'page-break-inside',
273
- 'paint-order',
274
- 'perspective',
275
- 'perspective-origin',
276
- 'place-content',
277
- 'place-items',
278
- 'place-self',
279
- 'pointer-events',
280
- 'position',
281
- 'quotes',
282
- 'resize',
283
- 'right',
284
- 'rotate',
285
- 'row-gap',
286
- 'scale',
287
- 'scroll-behavior',
288
- 'scroll-margin',
289
- 'scroll-margin-block',
290
- 'scroll-margin-block-end',
291
- 'scroll-margin-block-start',
292
- 'scroll-margin-bottom',
293
- 'scroll-margin-inline',
294
- 'scroll-margin-inline-end',
295
- 'scroll-margin-inline-start',
296
- 'scroll-margin-left',
297
- 'scroll-margin-right',
298
- 'scroll-margin-top',
299
- 'scroll-padding',
300
- 'scroll-padding-block',
301
- 'scroll-padding-block-end',
302
- 'scroll-padding-block-start',
303
- 'scroll-padding-bottom',
304
- 'scroll-padding-inline',
305
- 'scroll-padding-inline-end',
306
- 'scroll-padding-inline-start',
307
- 'scroll-padding-left',
308
- 'scroll-padding-right',
309
- 'scroll-padding-top',
310
- 'scroll-snap-align',
311
- 'scroll-snap-stop',
312
- 'scroll-snap-type',
313
- 'scrollbar-color',
314
- 'tab-size',
315
- 'table-layout',
316
- 'text-align',
317
- 'text-align-last',
318
- 'text-combine-upright',
319
- 'text-decoration',
320
- 'text-decoration-color',
321
- 'text-decoration-line',
322
- 'text-decoration-style',
323
- 'text-decoration-thickness',
324
- 'text-emphasis',
325
- 'text-emphasis-color',
326
- 'text-emphasis-position',
327
- 'text-emphasis-style',
328
- 'text-indent',
329
- 'text-justify',
330
- 'text-orientation',
331
- 'text-overflow',
332
- 'text-shadow',
333
- 'text-transform',
334
- 'text-underline-offset',
335
- 'text-underline-position',
336
- 'top',
337
- 'transform',
338
- 'transform-origin',
339
- 'transform-style',
340
- 'transition',
341
- 'transition-delay',
342
- 'transition-duration',
343
- 'transition-property',
344
- 'transition-timing-function',
345
- 'translate',
346
- 'unicode-bidi',
347
- 'user-select',
348
- 'vertical-align',
349
- 'visibility',
350
- 'white-space',
351
- 'widows',
352
- 'width',
353
- 'word-break',
354
- 'word-spacing',
355
- 'word-wrap',
356
- 'writing-mode',
357
- 'z-index',
358
- ];
@@ -1,74 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`getObjectVariables() 1`] = `
4
- {
5
- "buttonStyle": [
6
- Node {
7
- "computed": false,
8
- "end": 91,
9
- "key": Node {
10
- "end": 84,
11
- "loc": SourceLocation {
12
- "end": Position {
13
- "column": 14,
14
- "index": 84,
15
- "line": 5,
16
- },
17
- "filename": undefined,
18
- "identifierName": "borderRadius",
19
- "start": Position {
20
- "column": 2,
21
- "index": 72,
22
- "line": 5,
23
- },
24
- },
25
- "name": "borderRadius",
26
- "start": 72,
27
- "type": "Identifier",
28
- },
29
- "loc": SourceLocation {
30
- "end": Position {
31
- "column": 21,
32
- "index": 91,
33
- "line": 5,
34
- },
35
- "filename": undefined,
36
- "identifierName": undefined,
37
- "start": Position {
38
- "column": 2,
39
- "index": 72,
40
- "line": 5,
41
- },
42
- },
43
- "method": false,
44
- "shorthand": false,
45
- "start": 72,
46
- "type": "ObjectProperty",
47
- "value": Node {
48
- "end": 91,
49
- "extra": {
50
- "raw": "'5px'",
51
- "rawValue": "5px",
52
- },
53
- "loc": SourceLocation {
54
- "end": Position {
55
- "column": 21,
56
- "index": 91,
57
- "line": 5,
58
- },
59
- "filename": undefined,
60
- "identifierName": undefined,
61
- "start": Position {
62
- "column": 16,
63
- "index": 86,
64
- "line": 5,
65
- },
66
- },
67
- "start": 86,
68
- "type": "StringLiteral",
69
- "value": "5px",
70
- },
71
- },
72
- ],
73
- }
74
- `;