@format.dev/cli 0.0.0 → 0.1.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 (109) hide show
  1. package/README.md +29 -20
  2. package/bin/format.mjs +20 -0
  3. package/dist/config-Dq7O4e8N.mjs +63 -0
  4. package/dist/config.d.mts +21 -0
  5. package/dist/config.mjs +3 -0
  6. package/dist/draw-random-name-BzvSSVqO.d.mts +4 -0
  7. package/dist/draw-random-name-Dpt6YmUk.mjs +13 -0
  8. package/dist/index.d.mts +1 -0
  9. package/dist/index.mjs +1539 -0
  10. package/dist/install-BiDrmMgJ.mjs +1486 -0
  11. package/dist/lockstep.d.mts +27 -0
  12. package/dist/lockstep.mjs +30 -0
  13. package/dist/project-pX62Di_9.mjs +124 -0
  14. package/dist/random-name.d.mts +2 -0
  15. package/dist/random-name.mjs +3 -0
  16. package/dist/scaffold-shared.d.mts +2 -0
  17. package/dist/scaffold-shared.mjs +3 -0
  18. package/dist/scaffold.d.mts +191 -0
  19. package/dist/scaffold.mjs +6 -0
  20. package/dist/shared-BD62UD5L.d.mts +32 -0
  21. package/dist/shared-CM3vyUlL.mjs +143 -0
  22. package/env.d.ts +99 -0
  23. package/package.json +86 -34
  24. package/templates/html/documents/welcome/data/alternative.json +3 -0
  25. package/templates/html/documents/welcome/data/default.json +3 -0
  26. package/templates/html/documents/welcome/index.html +32 -0
  27. package/templates/html/documents/welcome/index.ts +4 -0
  28. package/templates/html/documents/welcome/pages/Close/close.html +9 -0
  29. package/templates/html/documents/welcome/pages/Cover/cover.html +13 -0
  30. package/templates/html/documents/welcome/pages/FeatureShowcase/feature-showcase.css +296 -0
  31. package/templates/html/documents/welcome/pages/FeatureShowcase/feature-showcase.html +296 -0
  32. package/templates/html/documents/welcome/pages/NextSteps/next-steps.css +107 -0
  33. package/templates/html/documents/welcome/pages/NextSteps/next-steps.html +398 -0
  34. package/templates/html/documents/welcome/styles.css +214 -0
  35. package/templates/html/format.config.json +4 -0
  36. package/templates/html/package.json +15 -0
  37. package/templates/html/tsconfig.json +3 -0
  38. package/templates/react/documents/welcome/components/ButtonLink.tsx +29 -0
  39. package/templates/react/documents/welcome/data/alternative.json +3 -0
  40. package/templates/react/documents/welcome/data/default.json +3 -0
  41. package/templates/react/documents/welcome/data/schema.ts +7 -0
  42. package/templates/react/documents/welcome/icons/propeller-asterisk.svg +1 -0
  43. package/templates/react/documents/welcome/index.tsx +59 -0
  44. package/templates/react/documents/welcome/logos/_logo-base.tsx +9 -0
  45. package/templates/react/documents/welcome/logos/aws-lambda.tsx +22 -0
  46. package/templates/react/documents/welcome/logos/bun.tsx +30 -0
  47. package/templates/react/documents/welcome/logos/cloudflare-workers.tsx +52 -0
  48. package/templates/react/documents/welcome/logos/css-modules.tsx +54 -0
  49. package/templates/react/documents/welcome/logos/css-official.tsx +18 -0
  50. package/templates/react/documents/welcome/logos/deno.tsx +17 -0
  51. package/templates/react/documents/welcome/logos/linaria.tsx +18 -0
  52. package/templates/react/documents/welcome/logos/node.tsx +47 -0
  53. package/templates/react/documents/welcome/logos/panda-css.tsx +18 -0
  54. package/templates/react/documents/welcome/logos/sass.tsx +12 -0
  55. package/templates/react/documents/welcome/logos/tailwind.tsx +45 -0
  56. package/templates/react/documents/welcome/logos/vanilla-extract.tsx +74 -0
  57. package/templates/react/documents/welcome/logos/vercel.tsx +17 -0
  58. package/templates/react/documents/welcome/pages/Close/ClosePage.tsx +13 -0
  59. package/templates/react/documents/welcome/pages/Cover/CoverPage.tsx +17 -0
  60. package/templates/react/documents/welcome/pages/FeatureShowcase/FeatureShowcasePage.tsx +221 -0
  61. package/templates/react/documents/welcome/pages/FeatureShowcase/feature-showcase.css +296 -0
  62. package/templates/react/documents/welcome/pages/FeatureShowcase/mountains.ts +27 -0
  63. package/templates/react/documents/welcome/pages/NextSteps/NextStepsPage.tsx +146 -0
  64. package/templates/react/documents/welcome/pages/NextSteps/next-steps.css +107 -0
  65. package/templates/react/documents/welcome/styles.css +214 -0
  66. package/templates/react/documents/welcome/types.ts +4 -0
  67. package/templates/react/format.config.json +4 -0
  68. package/templates/react/package.json +22 -0
  69. package/templates/react/tsconfig.json +6 -0
  70. package/templates/shared/README.md +18 -0
  71. package/templates/shared/_env +1 -0
  72. package/templates/shared/_gitignore +3 -0
  73. package/templates/shared/documents/welcome/assets/deploy.svg +268 -0
  74. package/templates/shared/documents/welcome/assets/logo.svg +22 -0
  75. package/templates/shared/documents/welcome/assets/mona-sans.woff2 +0 -0
  76. package/templates/shared/documents/welcome/assets/styling.svg +59 -0
  77. package/templates/vue/documents/welcome/components/ButtonLink.vue +28 -0
  78. package/templates/vue/documents/welcome/data/alternative.json +3 -0
  79. package/templates/vue/documents/welcome/data/default.json +3 -0
  80. package/templates/vue/documents/welcome/data/schema.ts +7 -0
  81. package/templates/vue/documents/welcome/index.vue +48 -0
  82. package/templates/vue/documents/welcome/logos/aws-lambda.vue +18 -0
  83. package/templates/vue/documents/welcome/logos/bun.vue +26 -0
  84. package/templates/vue/documents/welcome/logos/cloudflare-workers.vue +48 -0
  85. package/templates/vue/documents/welcome/logos/css-modules.vue +49 -0
  86. package/templates/vue/documents/welcome/logos/css-official.vue +14 -0
  87. package/templates/vue/documents/welcome/logos/deno.vue +13 -0
  88. package/templates/vue/documents/welcome/logos/linaria.vue +14 -0
  89. package/templates/vue/documents/welcome/logos/node.vue +43 -0
  90. package/templates/vue/documents/welcome/logos/panda-css.vue +14 -0
  91. package/templates/vue/documents/welcome/logos/sass.vue +8 -0
  92. package/templates/vue/documents/welcome/logos/tailwind.vue +41 -0
  93. package/templates/vue/documents/welcome/logos/vanilla-extract.vue +70 -0
  94. package/templates/vue/documents/welcome/logos/vercel.vue +13 -0
  95. package/templates/vue/documents/welcome/pages/Close/ClosePage.vue +11 -0
  96. package/templates/vue/documents/welcome/pages/Cover/CoverPage.vue +19 -0
  97. package/templates/vue/documents/welcome/pages/FeatureShowcase/FeatureShowcasePage.vue +217 -0
  98. package/templates/vue/documents/welcome/pages/FeatureShowcase/feature-showcase.css +296 -0
  99. package/templates/vue/documents/welcome/pages/FeatureShowcase/mountains.ts +27 -0
  100. package/templates/vue/documents/welcome/pages/NextSteps/NextStepsPage.vue +146 -0
  101. package/templates/vue/documents/welcome/pages/NextSteps/next-steps.css +107 -0
  102. package/templates/vue/documents/welcome/styles.css +214 -0
  103. package/templates/vue/documents/welcome/types.ts +4 -0
  104. package/templates/vue/format.config.json +4 -0
  105. package/templates/vue/package.json +19 -0
  106. package/templates/vue/tsconfig.json +7 -0
  107. package/tsconfig.recommended.json +22 -0
  108. package/index.d.ts +0 -2
  109. package/index.js +0 -3
@@ -0,0 +1,296 @@
1
+ .showcase-intro {
2
+ margin-bottom: 24px;
3
+ }
4
+
5
+ .feature-heading {
6
+ margin: 0 0 20px;
7
+ font-size: 24px;
8
+ line-height: 1.1;
9
+ letter-spacing: -0.5px;
10
+ font-weight: 800;
11
+ }
12
+
13
+ .feature-table {
14
+ margin: 24px 0 40px;
15
+ padding: 18px;
16
+ border-radius: 10px;
17
+ background: var(--color-bg-muted);
18
+ border: var(--hairline);
19
+
20
+ table {
21
+ width: 100%;
22
+ border-collapse: collapse;
23
+ font-variant-numeric: tabular-nums;
24
+ }
25
+
26
+ th,
27
+ td {
28
+ padding: 8px 24px 8px 0;
29
+ text-align: left;
30
+
31
+ &:last-child {
32
+ padding-right: 0;
33
+ }
34
+ }
35
+
36
+ .height {
37
+ text-align: right;
38
+ }
39
+
40
+ thead th {
41
+ font-family: monospace;
42
+ font-size: 12px;
43
+ text-transform: uppercase;
44
+ color: var(--color-text-muted);
45
+ padding-bottom: 8px;
46
+ border-bottom: 1px solid var(--color-text-muted);
47
+ }
48
+
49
+ tbody td {
50
+ font-size: 14px;
51
+ border-bottom: var(--hairline);
52
+
53
+ &.peak {
54
+ font-weight: 600;
55
+ }
56
+ }
57
+
58
+ tbody tr:last-child td {
59
+ padding-bottom: 0;
60
+ border-bottom: none;
61
+ }
62
+ }
63
+
64
+ .feature-table-caption {
65
+ margin: 0 0 12px;
66
+ font-family: monospace;
67
+ font-size: 12px;
68
+ letter-spacing: 0.08em;
69
+ text-transform: uppercase;
70
+ color: var(--color-text-muted);
71
+ }
72
+
73
+ .feature-prose {
74
+ margin-top: 4px;
75
+ font-family: serif;
76
+
77
+ .fleuron {
78
+ display: block;
79
+ margin: 0 auto 24px;
80
+
81
+ &:last-child {
82
+ margin: 24px auto 0;
83
+ }
84
+ }
85
+
86
+ p {
87
+ text-wrap: pretty;
88
+ font-size: 17px;
89
+ line-height: 1.6;
90
+
91
+ &:last-child {
92
+ margin: 0;
93
+ }
94
+ }
95
+ }
96
+
97
+ .prose-learn-more {
98
+ margin-top: 24px;
99
+ }
100
+
101
+ .css-demo {
102
+ margin-block: 40px;
103
+ display: grid;
104
+ grid-template-columns: repeat(3, 1fr);
105
+ gap: 14px;
106
+ break-inside: avoid;
107
+ }
108
+
109
+ .css-demo-tile {
110
+ display: flex;
111
+ flex-direction: column;
112
+ align-items: center;
113
+ gap: 18px;
114
+ padding: 24px 18px;
115
+ border: var(--hairline);
116
+ border-radius: 12px;
117
+ background: white;
118
+
119
+ .tile-visual {
120
+ width: 56px;
121
+ height: 56px;
122
+ border-radius: 10px;
123
+ }
124
+
125
+ .tile-label {
126
+ font-family: monospace;
127
+ text-transform: uppercase;
128
+ font-size: 12px;
129
+ color: var(--color-text-muted);
130
+ }
131
+ }
132
+
133
+ .tile-visual {
134
+ .tile-shadow & {
135
+ background: white;
136
+ box-shadow: 0 8px 22px rgb(43 127 255 / 0.4);
137
+ }
138
+
139
+ .tile-gradient & {
140
+ background: linear-gradient(135deg, var(--color-accent), var(--color-code-text));
141
+ }
142
+
143
+ .tile-transform & {
144
+ background: var(--color-accent);
145
+ transform: rotate(12deg) scale(0.82);
146
+ }
147
+
148
+ .tile-radius & {
149
+ background: var(--color-code-bg);
150
+ border: 2px solid var(--color-accent);
151
+ border-radius: 50% 12px;
152
+ }
153
+
154
+ .tile-grid & {
155
+ display: grid;
156
+ grid-template-columns: repeat(3, 1fr);
157
+ grid-auto-rows: 1fr;
158
+ gap: 5px;
159
+
160
+ span {
161
+ background: var(--color-accent);
162
+ border-radius: 2px;
163
+ }
164
+
165
+ span:first-child {
166
+ grid-column: span 2;
167
+ }
168
+
169
+ span:nth-child(4) {
170
+ grid-row: span 2;
171
+ }
172
+ }
173
+
174
+ .tile-flex & {
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ gap: 6px;
179
+
180
+ span {
181
+ width: 8px;
182
+ height: 100%;
183
+ background: var(--color-accent);
184
+ border-radius: 3px;
185
+ }
186
+
187
+ span:nth-child(2) {
188
+ height: 60%;
189
+ }
190
+ }
191
+
192
+ .tile-orphans & {
193
+ display: flex;
194
+ flex-direction: column;
195
+ gap: 5px;
196
+
197
+ span {
198
+ height: 6px;
199
+ border-radius: 3px;
200
+ background: var(--color-accent);
201
+ }
202
+
203
+ span:last-child {
204
+ width: 55%;
205
+ margin-top: auto;
206
+ opacity: 0.4;
207
+ }
208
+ }
209
+
210
+ .tile-breaks & {
211
+ display: flex;
212
+ flex-direction: column;
213
+ justify-content: center;
214
+ gap: 5px;
215
+
216
+ span {
217
+ height: 6px;
218
+ border-radius: 3px;
219
+ background: var(--color-accent);
220
+ }
221
+
222
+ span:nth-child(2),
223
+ span:nth-child(5) {
224
+ width: 70%;
225
+ }
226
+
227
+ span:nth-child(3) {
228
+ height: 0;
229
+ border-top: 2px dashed var(--color-accent);
230
+ border-radius: 0;
231
+ background: none;
232
+ }
233
+ }
234
+
235
+ .tile-pattern & {
236
+ background: repeating-linear-gradient(-45deg, var(--color-accent) 0 5px, var(--color-code-bg) 5px 12px);
237
+ }
238
+ }
239
+
240
+ .css-pattern-demo {
241
+ margin-block: 20px;
242
+ display: flex;
243
+ flex-direction: column;
244
+ gap: 12px;
245
+ break-inside: avoid;
246
+ }
247
+
248
+ .css-pattern {
249
+ display: block;
250
+ width: 100%;
251
+ height: 64px;
252
+ border: var(--hairline);
253
+ border-radius: 12px;
254
+ background-color: white;
255
+ overflow: hidden;
256
+ }
257
+
258
+ .css-pattern-stripe {
259
+ fill: var(--color-accent);
260
+ fill-opacity: 0.3;
261
+ }
262
+
263
+ .css-pattern-caption {
264
+ font-family: monospace;
265
+ font-size: 11px;
266
+ letter-spacing: 0.03em;
267
+ color: var(--color-text-muted);
268
+ text-align: center;
269
+ }
270
+
271
+ .more-list {
272
+ margin: 0 0 24px;
273
+ padding: 0;
274
+ list-style: none;
275
+ display: flex;
276
+ flex-direction: column;
277
+ gap: 12px;
278
+
279
+ li {
280
+ position: relative;
281
+ padding-left: 20px;
282
+ font-size: 15px;
283
+ line-height: 1.5;
284
+ }
285
+
286
+ li::before {
287
+ content: '';
288
+ position: absolute;
289
+ left: 2px;
290
+ top: 9px;
291
+ width: 5px;
292
+ height: 5px;
293
+ border-radius: 50%;
294
+ background: var(--color-accent);
295
+ }
296
+ }
@@ -0,0 +1,27 @@
1
+ type Mountain = {
2
+ peak: string
3
+ height: string
4
+ range: string
5
+ country: string
6
+ }
7
+
8
+ export const mountains: Mountain[] = [
9
+ { peak: 'Everest', height: '8,849 m', range: 'Mahalangur Himalaya', country: 'Nepal / China' },
10
+ { peak: 'K2', height: '8,611 m', range: 'Karakoram', country: 'Pakistan / China' },
11
+ { peak: 'Kangchenjunga', height: '8,586 m', range: 'Kangchenjunga Himalaya', country: 'Nepal / India' },
12
+ { peak: 'Lhotse', height: '8,516 m', range: 'Mahalangur Himalaya', country: 'Nepal / China' },
13
+ { peak: 'Makalu', height: '8,485 m', range: 'Mahalangur Himalaya', country: 'Nepal / China' },
14
+ { peak: 'Cho Oyu', height: '8,188 m', range: 'Mahalangur Himalaya', country: 'Nepal / China' },
15
+ { peak: 'Dhaulagiri I', height: '8,167 m', range: 'Dhaulagiri Himalaya', country: 'Nepal' },
16
+ { peak: 'Manaslu', height: '8,163 m', range: 'Manaslu Himalaya', country: 'Nepal' },
17
+ { peak: 'Nanga Parbat', height: '8,126 m', range: 'Nanga Parbat Himalaya', country: 'Pakistan' },
18
+ { peak: 'Annapurna I', height: '8,091 m', range: 'Annapurna Himalaya', country: 'Nepal' },
19
+ { peak: 'Gasherbrum I', height: '8,080 m', range: 'Karakoram', country: 'Pakistan / China' },
20
+ { peak: 'Broad Peak', height: '8,051 m', range: 'Karakoram', country: 'Pakistan / China' },
21
+ { peak: 'Gasherbrum II', height: '8,035 m', range: 'Karakoram', country: 'Pakistan / China' },
22
+ { peak: 'Shishapangma', height: '8,027 m', range: 'Langtang Himalaya', country: 'China' },
23
+ { peak: 'Gyachung Kang', height: '7,952 m', range: 'Mahalangur Himalaya', country: 'Nepal / China' },
24
+ { peak: 'Gasherbrum III', height: '7,946 m', range: 'Karakoram', country: 'Pakistan / China' },
25
+ { peak: 'Annapurna II', height: '7,937 m', range: 'Annapurna Himalaya', country: 'Nepal' },
26
+ { peak: 'Himalchuli', height: '7,893 m', range: 'Manaslu Himalaya', country: 'Nepal' }
27
+ ]
@@ -0,0 +1,146 @@
1
+ import type { ComponentProps, ComponentType } from 'react'
2
+ import { Flow, Stream } from '@format.dev/react'
3
+ import { ButtonLink } from '../../components/ButtonLink'
4
+ import { CssOfficialIcon } from '../../logos/css-official'
5
+ import { SassIcon } from '../../logos/sass'
6
+ import { TailwindIcon } from '../../logos/tailwind'
7
+ import { CssModulesIcon } from '../../logos/css-modules'
8
+ import { PandaCssIcon } from '../../logos/panda-css'
9
+ import { LinariaIcon } from '../../logos/linaria'
10
+ import { VanillaExtractIcon } from '../../logos/vanilla-extract'
11
+ import { NodeIcon } from '../../logos/node'
12
+ import { BunIcon } from '../../logos/bun'
13
+ import { DenoIcon } from '../../logos/deno'
14
+ import { VercelIcon } from '../../logos/vercel'
15
+ import { CloudflareWorkersIcon } from '../../logos/cloudflare-workers'
16
+ import { AwsLambdaIcon } from '../../logos/aws-lambda'
17
+ import './next-steps.css'
18
+
19
+ type Logo = { name: string; Icon: ComponentType<ComponentProps<'svg'>> }
20
+
21
+ const stylingLogos: Logo[] = [
22
+ { name: 'CSS', Icon: CssOfficialIcon },
23
+ { name: 'Sass', Icon: SassIcon },
24
+ { name: 'Tailwind', Icon: TailwindIcon },
25
+ { name: 'CSS Modules', Icon: CssModulesIcon },
26
+ { name: 'Panda', Icon: PandaCssIcon },
27
+ { name: 'Linaria', Icon: LinariaIcon },
28
+ { name: 'Vanilla Extract', Icon: VanillaExtractIcon }
29
+ ]
30
+
31
+ const deployLogos: Logo[] = [
32
+ { name: 'Node', Icon: NodeIcon },
33
+ { name: 'Bun', Icon: BunIcon },
34
+ { name: 'Deno', Icon: DenoIcon },
35
+ { name: 'Vercel', Icon: VercelIcon },
36
+ { name: 'Cloudflare', Icon: CloudflareWorkersIcon },
37
+ { name: 'AWS Lambda', Icon: AwsLambdaIcon }
38
+ ]
39
+
40
+ function Logos({ items }: { items: Logo[] }) {
41
+ return (
42
+ <div className='logos-row'>
43
+ {items.map(({ name, Icon }) => (
44
+ <span className='logo-item' key={name}>
45
+ <Icon />
46
+ {name}
47
+ </span>
48
+ ))}
49
+ </div>
50
+ )
51
+ }
52
+
53
+ export function NextStepsPage() {
54
+ return (
55
+ <>
56
+ <section className='next-steps-page'>
57
+ <h2>Your next steps</h2>
58
+ <p>Here's the path from here to your first production PDF.</p>
59
+ </section>
60
+
61
+ <Flow>
62
+ <ol className='next-steps'>
63
+ <Stream>
64
+ <li className='next-steps-step'>
65
+ <span className='next-steps-marker'>1</span>
66
+ <div className='next-steps-content'>
67
+ <h3 className='next-steps-title'>Explore this document's code</h3>
68
+ <p className='next-steps-body'>
69
+ Open <code>documents/welcome</code> to see the source code for this document. It's purposely simple,
70
+ using just a few Format primitives like <code>&lt;Layout&gt;</code> and <code>&lt;Flow&gt;</code>.
71
+ It's also styled with plain CSS and uses Format's out the box fonts. Have a play with the code and see
72
+ how the document changes.
73
+ </p>
74
+ </div>
75
+ </li>
76
+ <li className='next-steps-step'>
77
+ <span className='next-steps-marker'>2</span>
78
+ <div className='next-steps-content'>
79
+ <h3 className='next-steps-title'>Create your own document</h3>
80
+ <p className='next-steps-body'>
81
+ Hit the{' '}
82
+ <span className='plus-key' aria-hidden='true'>
83
+ <svg
84
+ width='13'
85
+ height='13'
86
+ viewBox='0 0 24 24'
87
+ fill='none'
88
+ stroke='currentColor'
89
+ strokeWidth='2.2'
90
+ strokeLinecap='round'>
91
+ <path d='M12 5v14' />
92
+ <path d='M5 12h14' />
93
+ </svg>
94
+ </span>{' '}
95
+ button in the sidebar to scaffold a new document and see some of the options available.
96
+ </p>
97
+ </div>
98
+ </li>
99
+ <li className='next-steps-step'>
100
+ <span className='next-steps-marker'>3</span>
101
+ <div className='next-steps-content'>
102
+ <h3 className='next-steps-title'>Build your first paged document</h3>
103
+ <p className='next-steps-body'>Follow our step-by-step guide. You'll learn how to:</p>
104
+ <ul className='learn-list'>
105
+ <li>Use the document model</li>
106
+ <li>Add repeating headers and footers</li>
107
+ <li>Paginate content with page numbers</li>
108
+ <li>Pass in dynamic data</li>
109
+ </ul>
110
+ <ButtonLink href='https://format.dev/docs/introduction/build-your-first-pdf'>
111
+ Build your first PDF
112
+ </ButtonLink>
113
+ </div>
114
+ </li>
115
+ <li className='next-steps-step'>
116
+ <span className='next-steps-marker'>4</span>
117
+ <div className='next-steps-content'>
118
+ <h3 className='next-steps-title'>Test your favorite frameworks</h3>
119
+ <p className='next-steps-body'>
120
+ Styling on the web brings out some pretty strong opinions! Format supports a wide range of popular
121
+ frameworks so you can make fast progress without learning any new frameworks or syntax.
122
+ </p>
123
+ <Logos items={stylingLogos} />
124
+ <ButtonLink href='https://format.dev/docs/studio/styling'>Explore styling</ButtonLink>
125
+ </div>
126
+ </li>
127
+ <li className='next-steps-step'>
128
+ <span className='next-steps-marker'>5</span>
129
+ <div className='next-steps-content'>
130
+ <h3 className='next-steps-title'>Deploy and generate at runtime</h3>
131
+ <p className='next-steps-body'>
132
+ Once you've designed and built your documents, you will need to select the right approach for
133
+ deployment, so you can generate PDFs at runtime. Format supports many popular frameworks, bundlers and
134
+ runtimes and we recommend taking a look at the docs to see how you might deploy your creations to
135
+ production.
136
+ </p>
137
+ <Logos items={deployLogos} />
138
+ <ButtonLink href='https://format.dev/docs/studio/deployment/overview'>Explore deployment</ButtonLink>
139
+ </div>
140
+ </li>
141
+ </Stream>
142
+ </ol>
143
+ </Flow>
144
+ </>
145
+ )
146
+ }
@@ -0,0 +1,107 @@
1
+ .next-steps {
2
+ list-style: none;
3
+ margin-block-start: 36px;
4
+ padding: 0;
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: 40px;
8
+
9
+ .button {
10
+ margin-block-start: 12px;
11
+ }
12
+ }
13
+
14
+ .next-steps-step {
15
+ display: grid;
16
+ grid-template-columns: 32px 1fr;
17
+ gap: 16px;
18
+ align-items: baseline;
19
+ break-inside: avoid;
20
+ }
21
+
22
+ .next-steps-marker {
23
+ display: grid;
24
+ place-items: center;
25
+ width: 32px;
26
+ height: 32px;
27
+ border: var(--hairline);
28
+ border-radius: 50%;
29
+ background: white;
30
+ font-family: monospace;
31
+ font-size: 14px;
32
+ font-variant-numeric: tabular-nums;
33
+ transform: translateY(-2px);
34
+ }
35
+
36
+ .next-steps-content {
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: flex-start;
40
+ gap: 12px;
41
+ }
42
+
43
+ .next-steps-title {
44
+ margin: 0;
45
+ font-size: 18px;
46
+ font-weight: 800;
47
+ letter-spacing: -0.3px;
48
+ color: var(--color-text-prose);
49
+ }
50
+
51
+ .next-steps-body {
52
+ margin: 0;
53
+ font-size: 15px;
54
+ }
55
+
56
+ .learn-list {
57
+ padding: 0;
58
+ list-style: none;
59
+ display: flex;
60
+ flex-direction: column;
61
+ gap: 8px;
62
+
63
+ li {
64
+ position: relative;
65
+ padding-left: 24px;
66
+ font-size: 14px;
67
+ line-height: 1.4;
68
+ color: var(--color-text);
69
+
70
+ &:before {
71
+ content: '';
72
+ position: absolute;
73
+ left: 5px;
74
+ top: 3px;
75
+ width: 5px;
76
+ height: 9px;
77
+ border: solid var(--color-accent);
78
+ border-width: 0 2px 2px 0;
79
+ transform: rotate(45deg);
80
+ }
81
+ }
82
+ }
83
+
84
+ .logos-row {
85
+ display: flex;
86
+ flex-wrap: wrap;
87
+ gap: 16px;
88
+ margin-block-start: 12px;
89
+ }
90
+
91
+ .logo-item {
92
+ display: inline-flex;
93
+ align-items: center;
94
+ gap: 8px;
95
+ font-size: 12px;
96
+ font-weight: 600;
97
+ background: var(--color-bg-muted);
98
+ padding: 8px 14px;
99
+ border-radius: 48px;
100
+ border: var(--hairline);
101
+ box-shadow: 0 1px 4px -1px rgb(0 0 0 / 3%);
102
+
103
+ svg {
104
+ width: auto;
105
+ height: 18px;
106
+ }
107
+ }