@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
package/package.json CHANGED
@@ -1,35 +1,87 @@
1
1
  {
2
- "name": "@format.dev/cli",
3
- "version": "0.0.0",
4
- "description": "A bootstrap placeholder reserving this package name. Format is not released yet.",
5
- "license": "MIT",
6
- "repository": {
7
- "type": "git",
8
- "url": "git+https://github.com/format-hq/format-js.git",
9
- "directory": "packages/cli"
10
- },
11
- "homepage": "https://format.dev",
12
- "files": [
13
- "LICENSE",
14
- "README.md",
15
- "index.d.ts",
16
- "index.js"
17
- ],
18
- "type": "module",
19
- "main": "./index.js",
20
- "types": "./index.d.ts",
21
- "exports": {
22
- ".": {
23
- "types": "./index.d.ts",
24
- "default": "./index.js"
25
- }
26
- },
27
- "engines": {
28
- "node": ">=22.12.0"
29
- },
30
- "publishConfig": {
31
- "access": "public",
32
- "tag": "bootstrap",
33
- "registry": "https://registry.npmjs.org/"
34
- }
35
- }
2
+ "name": "@format.dev/cli",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "description": "The Format CLI: run Studio, compile documents, and keep Format packages in lockstep",
6
+ "author": "the format.dev developers",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/format-hq/format-js.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "type": "module",
13
+ "bin": {
14
+ "format": "./bin/format.mjs"
15
+ },
16
+ "exports": {
17
+ "./config": {
18
+ "types": "./dist/config.d.mts",
19
+ "default": "./dist/config.mjs"
20
+ },
21
+ "./scaffold": {
22
+ "types": "./dist/scaffold.d.mts",
23
+ "default": "./dist/scaffold.mjs"
24
+ },
25
+ "./scaffold/shared": {
26
+ "types": "./dist/scaffold-shared.d.mts",
27
+ "default": "./dist/scaffold-shared.mjs"
28
+ },
29
+ "./lockstep": {
30
+ "types": "./dist/lockstep.d.mts",
31
+ "default": "./dist/lockstep.mjs"
32
+ },
33
+ "./random-name": {
34
+ "types": "./dist/random-name.d.mts",
35
+ "default": "./dist/random-name.mjs"
36
+ },
37
+ "./package.json": "./package.json",
38
+ "./tsconfig.recommended": "./tsconfig.recommended.json",
39
+ "./env": {
40
+ "types": "./env.d.ts"
41
+ }
42
+ },
43
+ "files": [
44
+ "bin",
45
+ "dist",
46
+ "templates",
47
+ "tsconfig.recommended.json",
48
+ "env.d.ts",
49
+ "LICENSE"
50
+ ],
51
+ "publishConfig": {
52
+ "access": "public"
53
+ },
54
+ "dependencies": {
55
+ "@clack/prompts": "^1.7.0",
56
+ "commander": "^14.0.3",
57
+ "jsonc-parser": "^3.3.1",
58
+ "picocolors": "^1.1.1",
59
+ "unique-names-generator": "^4.7.1"
60
+ },
61
+ "devDependencies": {
62
+ "@types/node": "^24.10.4",
63
+ "@types/react": "^19.2.7",
64
+ "@types/react-dom": "^19.2.3",
65
+ "react": "^19.2.3",
66
+ "react-dom": "^19.2.3",
67
+ "rimraf": "^6.0.1",
68
+ "tailwindcss": "^4.1.18",
69
+ "tsdown": "^0.18.4",
70
+ "typescript": "^5.9.3",
71
+ "valibot": "^1.1.0",
72
+ "verdaccio": "^6.8.0",
73
+ "vitest": "^4.0.18",
74
+ "vue": "^3.5.25",
75
+ "@format.dev/react": "0.1.0",
76
+ "@format.dev/vue": "0.1.0"
77
+ },
78
+ "engines": {
79
+ "node": ">=22.12.0"
80
+ },
81
+ "scripts": {
82
+ "clean": "rimraf dist",
83
+ "build": "tsdown",
84
+ "dev": "tsdown -c tsdown.config.dev.ts --watch",
85
+ "typecheck": "tsc -p tsconfig.json --noEmit"
86
+ }
87
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "trailblazer"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "name": "builder"
3
+ }
@@ -0,0 +1,32 @@
1
+ <template data-type="document" data-title="Welcome to Format">
2
+ <template data-type="layout" id="page" data-width="793.71px" data-height="1122.52px">
3
+ <header class="header">
4
+ <small class="header-title">Format Studio &ndash; Welcome document</small>
5
+ </header>
6
+ <main class="content">
7
+ <template data-type="flow" data-split-granularity="word">
8
+ <%~ include('./pages/Cover/cover.html', data) %>
9
+ <template data-type="page-break"></template>
10
+ <%~ include('./pages/NextSteps/next-steps.html', data) %>
11
+ <template data-type="page-break"></template>
12
+ <%~ include('./pages/FeatureShowcase/feature-showcase.html', data) %>
13
+ <template data-type="page-break"></template>
14
+ <%~ include('./pages/Close/close.html', data) %>
15
+ </template>
16
+ </main>
17
+ <template data-type="footnotes"></template>
18
+ <footer class="footer">
19
+ <div class="footer-stamp">
20
+ Created with
21
+ <a href="https://format.dev">
22
+ <img src="./logo.svg" alt="Format logo" class="footer-logo" />
23
+ </a>
24
+ </div>
25
+ <div class="page-numbers">
26
+ <span data-type="page-number"></span>
27
+ of
28
+ <span data-type="page-count"></span>
29
+ </div>
30
+ </footer>
31
+ </template>
32
+ </template>
@@ -0,0 +1,4 @@
1
+ export { default } from './index.html'
2
+ import './styles.css'
3
+ import './pages/NextSteps/next-steps.css'
4
+ import './pages/FeatureShowcase/feature-showcase.css'
@@ -0,0 +1,9 @@
1
+ <section class="page hero-page">
2
+ <p class="kicker">Where to go next</p>
3
+ <h2 class="hero-title">Now, go build something.</h2>
4
+ <p class="lead">
5
+ You've only scratched the surface. There's plenty more to explore, and it's all in the docs at
6
+ <a href="https://format.dev/docs">format.dev/docs</a>. If you get stuck,
7
+ <a href="https://format.dev/contact">reach out</a> and we'll help.
8
+ </p>
9
+ </section>
@@ -0,0 +1,13 @@
1
+ <section class="page hero-page">
2
+ <h1 class="hero-title">
3
+ Welcome to Format, <span><%= data.name %></span>.
4
+ </h1>
5
+ <p class="lead">
6
+ The developer-first platform for building pixel-perfect PDFs with web technology.
7
+ </p>
8
+ <p>
9
+ You've created your account and installed Format Studio, nice work. This is a Format document, built with
10
+ HTML and CSS. Studio renders it live from the code in <code>documents/welcome</code>. If you edit the code
11
+ and save, the preview updates instantly.
12
+ </p>
13
+ </section>
@@ -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
+ }