examples.ts 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055
  1. import type { Spec } from "@json-render/core";
  2. export interface Example {
  3. name: string;
  4. label: string;
  5. description: string;
  6. spec: Spec;
  7. }
  8. const staticUrl = "/static";
  9. export const examples: Example[] = [
  10. {
  11. name: "vercel-invite",
  12. label: "Vercel Invite",
  13. description: "Team invitation email with avatars and CTA",
  14. spec: {
  15. root: "html",
  16. elements: {
  17. html: {
  18. type: "Html",
  19. props: { lang: "en", dir: null },
  20. children: ["head", "preview", "body"],
  21. },
  22. head: {
  23. type: "Head",
  24. props: {},
  25. children: [],
  26. },
  27. preview: {
  28. type: "Preview",
  29. props: { text: "Join Alan on Vercel" },
  30. children: [],
  31. },
  32. body: {
  33. type: "Body",
  34. props: {
  35. style: {
  36. backgroundColor: "#ffffff",
  37. fontFamily:
  38. '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Ubuntu, sans-serif',
  39. margin: "0 auto",
  40. padding: "0 8px",
  41. },
  42. },
  43. children: ["container"],
  44. },
  45. container: {
  46. type: "Container",
  47. props: {
  48. style: {
  49. maxWidth: "465px",
  50. margin: "40px auto",
  51. border: "1px solid #eaeaea",
  52. borderRadius: "4px",
  53. padding: "20px",
  54. },
  55. },
  56. children: [
  57. "logo-section",
  58. "heading",
  59. "greeting-text",
  60. "invite-text",
  61. "avatar-section",
  62. "button-section",
  63. "url-text",
  64. "invite-link",
  65. "hr",
  66. "footer-text",
  67. ],
  68. },
  69. "logo-section": {
  70. type: "Section",
  71. props: { style: { marginTop: "32px" } },
  72. children: ["logo"],
  73. },
  74. logo: {
  75. type: "Image",
  76. props: {
  77. src: `${staticUrl}/vercel-logo.png`,
  78. width: 40,
  79. height: 37,
  80. alt: "Vercel",
  81. style: { margin: "0 auto", display: "block" },
  82. },
  83. children: [],
  84. },
  85. heading: {
  86. type: "Heading",
  87. props: {
  88. text: "Join Enigma on Vercel",
  89. as: "h1",
  90. style: {
  91. color: "#000000",
  92. fontSize: "24px",
  93. fontWeight: "normal",
  94. textAlign: "center",
  95. margin: "30px 0",
  96. padding: "0",
  97. },
  98. },
  99. children: [],
  100. },
  101. "greeting-text": {
  102. type: "Text",
  103. props: {
  104. text: "Hello alanturing,",
  105. style: {
  106. color: "#000000",
  107. fontSize: "14px",
  108. lineHeight: "24px",
  109. },
  110. },
  111. children: [],
  112. },
  113. "invite-text": {
  114. type: "Text",
  115. props: {
  116. text: "Alan (alan.turing@example.com) has invited you to the Enigma team on Vercel.",
  117. style: {
  118. color: "#000000",
  119. fontSize: "14px",
  120. lineHeight: "24px",
  121. },
  122. },
  123. children: [],
  124. },
  125. "avatar-section": {
  126. type: "Section",
  127. props: { style: {} },
  128. children: ["avatar-row"],
  129. },
  130. "avatar-row": {
  131. type: "Row",
  132. props: { style: {} },
  133. children: ["user-avatar-col", "arrow-col", "team-avatar-col"],
  134. },
  135. "user-avatar-col": {
  136. type: "Column",
  137. props: { style: {} },
  138. children: ["user-avatar"],
  139. },
  140. "user-avatar": {
  141. type: "Image",
  142. props: {
  143. src: `${staticUrl}/vercel-user.png`,
  144. width: 64,
  145. height: 64,
  146. alt: "alanturing",
  147. style: { borderRadius: "50%", marginLeft: "auto" },
  148. },
  149. children: [],
  150. },
  151. "arrow-col": {
  152. type: "Column",
  153. props: { style: {} },
  154. children: ["arrow-img"],
  155. },
  156. "arrow-img": {
  157. type: "Image",
  158. props: {
  159. src: `${staticUrl}/vercel-arrow.png`,
  160. width: 12,
  161. height: 9,
  162. alt: "invited to",
  163. style: { margin: "0 auto" },
  164. },
  165. children: [],
  166. },
  167. "team-avatar-col": {
  168. type: "Column",
  169. props: { style: {} },
  170. children: ["team-avatar"],
  171. },
  172. "team-avatar": {
  173. type: "Image",
  174. props: {
  175. src: `${staticUrl}/vercel-team.png`,
  176. width: 64,
  177. height: 64,
  178. alt: "Enigma",
  179. style: { borderRadius: "50%", marginRight: "auto" },
  180. },
  181. children: [],
  182. },
  183. "button-section": {
  184. type: "Section",
  185. props: {
  186. style: {
  187. marginTop: "32px",
  188. marginBottom: "32px",
  189. textAlign: "center",
  190. },
  191. },
  192. children: ["join-button"],
  193. },
  194. "join-button": {
  195. type: "Button",
  196. props: {
  197. text: "Join the team",
  198. href: "https://vercel.com/teams/invite/foo",
  199. style: {
  200. backgroundColor: "#000000",
  201. borderRadius: "4px",
  202. color: "#ffffff",
  203. fontSize: "12px",
  204. fontWeight: "600",
  205. textDecoration: "none",
  206. textAlign: "center",
  207. padding: "12px 20px",
  208. },
  209. },
  210. children: [],
  211. },
  212. "url-text": {
  213. type: "Text",
  214. props: {
  215. text: "or copy and paste this URL into your browser:",
  216. style: {
  217. color: "#000000",
  218. fontSize: "14px",
  219. lineHeight: "24px",
  220. },
  221. },
  222. children: [],
  223. },
  224. "invite-link": {
  225. type: "Link",
  226. props: {
  227. text: "https://vercel.com/teams/invite/foo",
  228. href: "https://vercel.com/teams/invite/foo",
  229. style: {
  230. color: "#2563eb",
  231. textDecoration: "none",
  232. fontSize: "14px",
  233. },
  234. },
  235. children: [],
  236. },
  237. hr: {
  238. type: "Hr",
  239. props: { style: { borderColor: "#eaeaea", margin: "26px 0" } },
  240. children: [],
  241. },
  242. "footer-text": {
  243. type: "Text",
  244. props: {
  245. text: "This invitation was intended for alanturing. This invite was sent from 204.13.186.218 located in São Paulo, Brazil. If you were not expecting this invitation, you can ignore this email. If you are concerned about your account's safety, please reply to this email to get in touch with us.",
  246. style: {
  247. color: "#666666",
  248. fontSize: "12px",
  249. lineHeight: "24px",
  250. },
  251. },
  252. children: [],
  253. },
  254. },
  255. },
  256. },
  257. {
  258. name: "stripe-welcome",
  259. label: "Stripe Welcome",
  260. description: "Onboarding email with dashboard CTA",
  261. spec: {
  262. root: "html",
  263. elements: {
  264. html: {
  265. type: "Html",
  266. props: { lang: "en", dir: null },
  267. children: ["head", "preview", "body"],
  268. },
  269. head: {
  270. type: "Head",
  271. props: {},
  272. children: [],
  273. },
  274. preview: {
  275. type: "Preview",
  276. props: {
  277. text: "You're now ready to make live transactions with Stripe!",
  278. },
  279. children: [],
  280. },
  281. body: {
  282. type: "Body",
  283. props: {
  284. style: {
  285. backgroundColor: "#f6f9fc",
  286. fontFamily:
  287. '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Ubuntu, sans-serif',
  288. },
  289. },
  290. children: ["container"],
  291. },
  292. container: {
  293. type: "Container",
  294. props: {
  295. style: {
  296. backgroundColor: "#ffffff",
  297. margin: "0 auto",
  298. padding: "20px 0 48px",
  299. marginBottom: "64px",
  300. },
  301. },
  302. children: ["content-section"],
  303. },
  304. "content-section": {
  305. type: "Section",
  306. props: { style: { padding: "0 48px" } },
  307. children: [
  308. "logo",
  309. "hr1",
  310. "text-intro",
  311. "text-dashboard",
  312. "cta-button",
  313. "hr2",
  314. "text-docs",
  315. "docs-link",
  316. "text-api-keys",
  317. "text-checklist",
  318. "text-support",
  319. "text-signoff",
  320. "hr3",
  321. "footer-text",
  322. ],
  323. },
  324. logo: {
  325. type: "Image",
  326. props: {
  327. src: `${staticUrl}/stripe-logo.png`,
  328. width: 49,
  329. height: 21,
  330. alt: "Stripe",
  331. style: null,
  332. },
  333. children: [],
  334. },
  335. hr1: {
  336. type: "Hr",
  337. props: { style: { borderColor: "#e6ebf1", margin: "20px 0" } },
  338. children: [],
  339. },
  340. "text-intro": {
  341. type: "Text",
  342. props: {
  343. text: "Thanks for submitting your account information. You're now ready to make live transactions with Stripe!",
  344. style: {
  345. color: "#525f7f",
  346. fontSize: "16px",
  347. lineHeight: "24px",
  348. textAlign: "left",
  349. },
  350. },
  351. children: [],
  352. },
  353. "text-dashboard": {
  354. type: "Text",
  355. props: {
  356. text: "You can view your payments and a variety of other information about your account right from your dashboard.",
  357. style: {
  358. color: "#525f7f",
  359. fontSize: "16px",
  360. lineHeight: "24px",
  361. textAlign: "left",
  362. },
  363. },
  364. children: [],
  365. },
  366. "cta-button": {
  367. type: "Button",
  368. props: {
  369. text: "View your Stripe Dashboard",
  370. href: "https://dashboard.stripe.com/login",
  371. style: {
  372. backgroundColor: "#656ee8",
  373. borderRadius: "3px",
  374. color: "#ffffff",
  375. fontSize: "16px",
  376. fontWeight: "bold",
  377. textDecoration: "none",
  378. textAlign: "center",
  379. display: "block",
  380. padding: "10px",
  381. },
  382. },
  383. children: [],
  384. },
  385. hr2: {
  386. type: "Hr",
  387. props: { style: { borderColor: "#e6ebf1", margin: "20px 0" } },
  388. children: [],
  389. },
  390. "text-docs": {
  391. type: "Text",
  392. props: {
  393. text: "If you haven't finished your integration, you might find our docs handy.",
  394. style: {
  395. color: "#525f7f",
  396. fontSize: "16px",
  397. lineHeight: "24px",
  398. textAlign: "left",
  399. },
  400. },
  401. children: [],
  402. },
  403. "docs-link": {
  404. type: "Link",
  405. props: {
  406. text: "Stripe Documentation — Getting Started",
  407. href: "https://docs.stripe.com/dashboard/basics",
  408. style: {
  409. color: "#556cd6",
  410. fontSize: "16px",
  411. },
  412. },
  413. children: [],
  414. },
  415. "text-api-keys": {
  416. type: "Text",
  417. props: {
  418. text: "Once you're ready to start accepting payments, you'll just need to use your live API keys instead of your test API keys. Your account can simultaneously be used for both test and live requests, so you can continue testing while accepting live payments. Check out our tutorial about account basics.",
  419. style: {
  420. color: "#525f7f",
  421. fontSize: "16px",
  422. lineHeight: "24px",
  423. textAlign: "left",
  424. },
  425. },
  426. children: [],
  427. },
  428. "text-checklist": {
  429. type: "Text",
  430. props: {
  431. text: "Finally, we've put together a quick checklist to ensure your website conforms to card network standards.",
  432. style: {
  433. color: "#525f7f",
  434. fontSize: "16px",
  435. lineHeight: "24px",
  436. textAlign: "left",
  437. },
  438. },
  439. children: [],
  440. },
  441. "text-support": {
  442. type: "Text",
  443. props: {
  444. text: "We'll be here to help you with any step along the way. You can find answers to most questions and get in touch with us on our support site.",
  445. style: {
  446. color: "#525f7f",
  447. fontSize: "16px",
  448. lineHeight: "24px",
  449. textAlign: "left",
  450. },
  451. },
  452. children: [],
  453. },
  454. "text-signoff": {
  455. type: "Text",
  456. props: {
  457. text: "— The Stripe team",
  458. style: {
  459. color: "#525f7f",
  460. fontSize: "16px",
  461. lineHeight: "24px",
  462. textAlign: "left",
  463. },
  464. },
  465. children: [],
  466. },
  467. hr3: {
  468. type: "Hr",
  469. props: { style: { borderColor: "#e6ebf1", margin: "20px 0" } },
  470. children: [],
  471. },
  472. "footer-text": {
  473. type: "Text",
  474. props: {
  475. text: "Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080",
  476. style: {
  477. color: "#8898aa",
  478. fontSize: "12px",
  479. lineHeight: "16px",
  480. },
  481. },
  482. children: [],
  483. },
  484. },
  485. },
  486. },
  487. {
  488. name: "nike-receipt",
  489. label: "Nike Receipt",
  490. description: "Order shipment notification with product details",
  491. spec: {
  492. root: "html",
  493. elements: {
  494. html: {
  495. type: "Html",
  496. props: { lang: "en", dir: null },
  497. children: ["head", "preview", "body"],
  498. },
  499. head: {
  500. type: "Head",
  501. props: {},
  502. children: [],
  503. },
  504. preview: {
  505. type: "Preview",
  506. props: {
  507. text: "Get your order summary, estimated delivery date and more",
  508. },
  509. children: [],
  510. },
  511. body: {
  512. type: "Body",
  513. props: {
  514. style: {
  515. backgroundColor: "#ffffff",
  516. fontFamily: '"Helvetica Neue", Helvetica, Arial, sans-serif',
  517. },
  518. },
  519. children: ["container"],
  520. },
  521. container: {
  522. type: "Container",
  523. props: {
  524. style: {
  525. margin: "10px auto",
  526. width: "600px",
  527. maxWidth: "100%",
  528. border: "1px solid #E5E5E5",
  529. },
  530. },
  531. children: [
  532. "tracking-section",
  533. "hr1",
  534. "hero-section",
  535. "hr2",
  536. "shipping-section",
  537. "hr3",
  538. "product-section",
  539. "hr4",
  540. "order-info-section",
  541. "hr5",
  542. "footer-section",
  543. ],
  544. },
  545. // ── Tracking Section ──
  546. "tracking-section": {
  547. type: "Section",
  548. props: {
  549. style: {
  550. padding: "22px 40px",
  551. backgroundColor: "#F7F7F7",
  552. },
  553. },
  554. children: ["tracking-row"],
  555. },
  556. "tracking-row": {
  557. type: "Row",
  558. props: { style: {} },
  559. children: ["tracking-info-col", "tracking-btn-col"],
  560. },
  561. "tracking-info-col": {
  562. type: "Column",
  563. props: { style: {} },
  564. children: ["tracking-label", "tracking-number"],
  565. },
  566. "tracking-label": {
  567. type: "Text",
  568. props: {
  569. text: "Tracking Number",
  570. style: {
  571. margin: "0",
  572. fontSize: "14px",
  573. lineHeight: "2",
  574. fontWeight: "bold",
  575. },
  576. },
  577. children: [],
  578. },
  579. "tracking-number": {
  580. type: "Text",
  581. props: {
  582. text: "1ZV218970300071628",
  583. style: {
  584. margin: "12px 0 0",
  585. fontSize: "14px",
  586. lineHeight: "1.4",
  587. fontWeight: "500",
  588. color: "#6F6F6F",
  589. },
  590. },
  591. children: [],
  592. },
  593. "tracking-btn-col": {
  594. type: "Column",
  595. props: { style: { textAlign: "right" } },
  596. children: ["tracking-link"],
  597. },
  598. "tracking-link": {
  599. type: "Link",
  600. props: {
  601. text: "Track Package",
  602. href: "https://www.nike.com/orders",
  603. style: {
  604. border: "1px solid #929292",
  605. fontSize: "16px",
  606. textDecoration: "none",
  607. padding: "10px 0",
  608. width: "220px",
  609. display: "block",
  610. textAlign: "center",
  611. fontWeight: "500",
  612. color: "#000000",
  613. },
  614. },
  615. children: [],
  616. },
  617. hr1: {
  618. type: "Hr",
  619. props: { style: { borderColor: "#E5E5E5", margin: "0" } },
  620. children: [],
  621. },
  622. // ── Hero Section ──
  623. "hero-section": {
  624. type: "Section",
  625. props: {
  626. style: {
  627. padding: "40px 74px",
  628. textAlign: "center",
  629. },
  630. },
  631. children: [
  632. "nike-logo",
  633. "hero-heading",
  634. "hero-text",
  635. "hero-text-payment",
  636. ],
  637. },
  638. "nike-logo": {
  639. type: "Image",
  640. props: {
  641. src: `${staticUrl}/nike-logo.png`,
  642. width: 66,
  643. height: 22,
  644. alt: "Nike",
  645. style: { margin: "0 auto", display: "block" },
  646. },
  647. children: [],
  648. },
  649. "hero-heading": {
  650. type: "Heading",
  651. props: {
  652. text: "It's On Its Way.",
  653. as: "h1",
  654. style: {
  655. fontSize: "32px",
  656. lineHeight: "1.3",
  657. fontWeight: "bold",
  658. textAlign: "center",
  659. letterSpacing: "-1px",
  660. },
  661. },
  662. children: [],
  663. },
  664. "hero-text": {
  665. type: "Text",
  666. props: {
  667. text: "Your order is on its way. Use the link above to track its progress.",
  668. style: {
  669. margin: "0",
  670. fontSize: "14px",
  671. lineHeight: "2",
  672. color: "#747474",
  673. fontWeight: "500",
  674. },
  675. },
  676. children: [],
  677. },
  678. "hero-text-payment": {
  679. type: "Text",
  680. props: {
  681. text: "We've also charged your payment method for the cost of your order and will be removing any authorization holds. For payment details, please visit your Orders page on Nike.com or in the Nike app.",
  682. style: {
  683. margin: "24px 0 0",
  684. fontSize: "14px",
  685. lineHeight: "2",
  686. color: "#747474",
  687. fontWeight: "500",
  688. },
  689. },
  690. children: [],
  691. },
  692. hr2: {
  693. type: "Hr",
  694. props: { style: { borderColor: "#E5E5E5", margin: "0" } },
  695. children: [],
  696. },
  697. // ── Shipping Section ──
  698. "shipping-section": {
  699. type: "Section",
  700. props: { style: { padding: "22px 40px" } },
  701. children: ["shipping-label", "shipping-address"],
  702. },
  703. "shipping-label": {
  704. type: "Text",
  705. props: {
  706. text: "Shipping to: Alan Turing",
  707. style: {
  708. margin: "0",
  709. fontSize: "15px",
  710. lineHeight: "2",
  711. fontWeight: "bold",
  712. },
  713. },
  714. children: [],
  715. },
  716. "shipping-address": {
  717. type: "Text",
  718. props: {
  719. text: "2125 Chestnut St, San Francisco, CA 94123",
  720. style: {
  721. margin: "0",
  722. fontSize: "14px",
  723. lineHeight: "2",
  724. color: "#747474",
  725. fontWeight: "500",
  726. },
  727. },
  728. children: [],
  729. },
  730. hr3: {
  731. type: "Hr",
  732. props: { style: { borderColor: "#E5E5E5", margin: "0" } },
  733. children: [],
  734. },
  735. // ── Product Section ──
  736. "product-section": {
  737. type: "Section",
  738. props: { style: { padding: "40px" } },
  739. children: ["product-row"],
  740. },
  741. "product-row": {
  742. type: "Row",
  743. props: { style: {} },
  744. children: ["product-img-col", "product-details-col"],
  745. },
  746. "product-img-col": {
  747. type: "Column",
  748. props: { style: {} },
  749. children: ["product-img"],
  750. },
  751. "product-img": {
  752. type: "Image",
  753. props: {
  754. src: `${staticUrl}/nike-product.png`,
  755. alt: "Brazil 2022/23 Stadium Away Women's Nike Dri-FIT Soccer Jersey",
  756. width: 260,
  757. height: null,
  758. style: { float: "left" },
  759. },
  760. children: [],
  761. },
  762. "product-details-col": {
  763. type: "Column",
  764. props: {
  765. style: { verticalAlign: "top", paddingLeft: "12px" },
  766. },
  767. children: ["product-name", "product-size"],
  768. },
  769. "product-name": {
  770. type: "Text",
  771. props: {
  772. text: "Brazil 2022/23 Stadium Away Women's Nike Dri-FIT Soccer Jersey",
  773. style: {
  774. margin: "0",
  775. fontSize: "14px",
  776. lineHeight: "2",
  777. fontWeight: "500",
  778. },
  779. },
  780. children: [],
  781. },
  782. "product-size": {
  783. type: "Text",
  784. props: {
  785. text: "Size L (12–14)",
  786. style: {
  787. margin: "0",
  788. fontSize: "14px",
  789. lineHeight: "2",
  790. color: "#747474",
  791. fontWeight: "500",
  792. },
  793. },
  794. children: [],
  795. },
  796. hr4: {
  797. type: "Hr",
  798. props: { style: { borderColor: "#E5E5E5", margin: "0" } },
  799. children: [],
  800. },
  801. // ── Order Info Section ──
  802. "order-info-section": {
  803. type: "Section",
  804. props: { style: { padding: "22px 40px" } },
  805. children: ["order-meta-row", "order-status-row"],
  806. },
  807. "order-meta-row": {
  808. type: "Row",
  809. props: { style: { marginBottom: "40px" } },
  810. children: ["order-number-col", "order-date-col"],
  811. },
  812. "order-number-col": {
  813. type: "Column",
  814. props: { style: { width: "170px" } },
  815. children: ["order-number-label", "order-number-value"],
  816. },
  817. "order-number-label": {
  818. type: "Text",
  819. props: {
  820. text: "Order Number",
  821. style: {
  822. margin: "0",
  823. fontSize: "14px",
  824. lineHeight: "2",
  825. fontWeight: "bold",
  826. },
  827. },
  828. children: [],
  829. },
  830. "order-number-value": {
  831. type: "Text",
  832. props: {
  833. text: "C0106373851",
  834. style: {
  835. margin: "12px 0 0",
  836. fontSize: "14px",
  837. lineHeight: "1.4",
  838. fontWeight: "500",
  839. color: "#6F6F6F",
  840. },
  841. },
  842. children: [],
  843. },
  844. "order-date-col": {
  845. type: "Column",
  846. props: { style: {} },
  847. children: ["order-date-label", "order-date-value"],
  848. },
  849. "order-date-label": {
  850. type: "Text",
  851. props: {
  852. text: "Order Date",
  853. style: {
  854. margin: "0",
  855. fontSize: "14px",
  856. lineHeight: "2",
  857. fontWeight: "bold",
  858. },
  859. },
  860. children: [],
  861. },
  862. "order-date-value": {
  863. type: "Text",
  864. props: {
  865. text: "Sep 22, 2022",
  866. style: {
  867. margin: "12px 0 0",
  868. fontSize: "14px",
  869. lineHeight: "1.4",
  870. fontWeight: "500",
  871. color: "#6F6F6F",
  872. },
  873. },
  874. children: [],
  875. },
  876. "order-status-row": {
  877. type: "Row",
  878. props: { style: {} },
  879. children: ["order-status-col"],
  880. },
  881. "order-status-col": {
  882. type: "Column",
  883. props: { style: { textAlign: "center" } },
  884. children: ["order-status-link"],
  885. },
  886. "order-status-link": {
  887. type: "Link",
  888. props: {
  889. text: "Order Status",
  890. href: "https://www.nike.com/orders",
  891. style: {
  892. border: "1px solid #929292",
  893. fontSize: "16px",
  894. textDecoration: "none",
  895. padding: "10px 0",
  896. width: "220px",
  897. display: "block",
  898. textAlign: "center",
  899. fontWeight: "500",
  900. color: "#000000",
  901. margin: "0 auto",
  902. },
  903. },
  904. children: [],
  905. },
  906. hr5: {
  907. type: "Hr",
  908. props: { style: { borderColor: "#E5E5E5", margin: "0" } },
  909. children: [],
  910. },
  911. // ── Footer Section ──
  912. "footer-section": {
  913. type: "Section",
  914. props: { style: { padding: "22px 0", textAlign: "center" } },
  915. children: [
  916. "footer-brand",
  917. "footer-nav-row",
  918. "footer-contact",
  919. "footer-copyright",
  920. "footer-address",
  921. ],
  922. },
  923. "footer-brand": {
  924. type: "Text",
  925. props: {
  926. text: "Nike.com",
  927. style: {
  928. fontSize: "32px",
  929. lineHeight: "1.3",
  930. fontWeight: "bold",
  931. textAlign: "center",
  932. letterSpacing: "-1px",
  933. },
  934. },
  935. children: [],
  936. },
  937. "footer-nav-row": {
  938. type: "Row",
  939. props: { style: { width: "370px", margin: "0 auto" } },
  940. children: [
  941. "footer-nav-men",
  942. "footer-nav-women",
  943. "footer-nav-kids",
  944. "footer-nav-customize",
  945. ],
  946. },
  947. "footer-nav-men": {
  948. type: "Column",
  949. props: { style: { textAlign: "center" } },
  950. children: ["link-men"],
  951. },
  952. "link-men": {
  953. type: "Link",
  954. props: {
  955. text: "Men",
  956. href: "https://www.nike.com/",
  957. style: { fontWeight: "500", color: "#000000" },
  958. },
  959. children: [],
  960. },
  961. "footer-nav-women": {
  962. type: "Column",
  963. props: { style: { textAlign: "center" } },
  964. children: ["link-women"],
  965. },
  966. "link-women": {
  967. type: "Link",
  968. props: {
  969. text: "Women",
  970. href: "https://www.nike.com/",
  971. style: { fontWeight: "500", color: "#000000" },
  972. },
  973. children: [],
  974. },
  975. "footer-nav-kids": {
  976. type: "Column",
  977. props: { style: { textAlign: "center" } },
  978. children: ["link-kids"],
  979. },
  980. "link-kids": {
  981. type: "Link",
  982. props: {
  983. text: "Kids",
  984. href: "https://www.nike.com/",
  985. style: { fontWeight: "500", color: "#000000" },
  986. },
  987. children: [],
  988. },
  989. "footer-nav-customize": {
  990. type: "Column",
  991. props: { style: { textAlign: "center" } },
  992. children: ["link-customize"],
  993. },
  994. "link-customize": {
  995. type: "Link",
  996. props: {
  997. text: "Customize",
  998. href: "https://www.nike.com/",
  999. style: { fontWeight: "500", color: "#000000" },
  1000. },
  1001. children: [],
  1002. },
  1003. "footer-contact": {
  1004. type: "Text",
  1005. props: {
  1006. text: "Please contact us if you have any questions. (If you reply to this email, we won't be able to see it.)",
  1007. style: {
  1008. margin: "0",
  1009. color: "#AFAFAF",
  1010. fontSize: "13px",
  1011. textAlign: "center",
  1012. padding: "30px 0",
  1013. },
  1014. },
  1015. children: [],
  1016. },
  1017. "footer-copyright": {
  1018. type: "Text",
  1019. props: {
  1020. text: "© 2022 Nike, Inc. All Rights Reserved.",
  1021. style: {
  1022. margin: "0",
  1023. color: "#AFAFAF",
  1024. fontSize: "13px",
  1025. textAlign: "center",
  1026. },
  1027. },
  1028. children: [],
  1029. },
  1030. "footer-address": {
  1031. type: "Text",
  1032. props: {
  1033. text: "NIKE, INC. One Bowerman Drive, Beaverton, Oregon 97005, USA.",
  1034. style: {
  1035. margin: "0",
  1036. color: "#AFAFAF",
  1037. fontSize: "13px",
  1038. textAlign: "center",
  1039. },
  1040. },
  1041. children: [],
  1042. },
  1043. },
  1044. },
  1045. },
  1046. ];