@format.dev/cli 0.0.0 → 0.1.1

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,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
+ <script setup lang="ts">
2
+ import type { Component } from 'vue'
3
+
4
+ import { Flow, Stream } from '@format.dev/vue'
5
+
6
+ import ButtonLink from '../../components/ButtonLink.vue'
7
+ import CssOfficialIcon from '../../logos/css-official.vue'
8
+ import SassIcon from '../../logos/sass.vue'
9
+ import TailwindIcon from '../../logos/tailwind.vue'
10
+ import CssModulesIcon from '../../logos/css-modules.vue'
11
+ import PandaCssIcon from '../../logos/panda-css.vue'
12
+ import LinariaIcon from '../../logos/linaria.vue'
13
+ import VanillaExtractIcon from '../../logos/vanilla-extract.vue'
14
+ import NodeIcon from '../../logos/node.vue'
15
+ import BunIcon from '../../logos/bun.vue'
16
+ import DenoIcon from '../../logos/deno.vue'
17
+ import VercelIcon from '../../logos/vercel.vue'
18
+ import CloudflareWorkersIcon from '../../logos/cloudflare-workers.vue'
19
+ import AwsLambdaIcon from '../../logos/aws-lambda.vue'
20
+ import './next-steps.css'
21
+
22
+ interface Logo {
23
+ name: string
24
+ icon: Component
25
+ }
26
+
27
+ const stylingLogos: Logo[] = [
28
+ { name: 'CSS', icon: CssOfficialIcon },
29
+ { name: 'Sass', icon: SassIcon },
30
+ { name: 'Tailwind', icon: TailwindIcon },
31
+ { name: 'CSS Modules', icon: CssModulesIcon },
32
+ { name: 'Panda', icon: PandaCssIcon },
33
+ { name: 'Linaria', icon: LinariaIcon },
34
+ { name: 'Vanilla Extract', icon: VanillaExtractIcon }
35
+ ]
36
+
37
+ const deployLogos: Logo[] = [
38
+ { name: 'Node', icon: NodeIcon },
39
+ { name: 'Bun', icon: BunIcon },
40
+ { name: 'Deno', icon: DenoIcon },
41
+ { name: 'Vercel', icon: VercelIcon },
42
+ { name: 'Cloudflare', icon: CloudflareWorkersIcon },
43
+ { name: 'AWS Lambda', icon: AwsLambdaIcon }
44
+ ]
45
+ </script>
46
+
47
+ <template>
48
+ <section class='next-steps-page'>
49
+ <h2>Your next steps</h2>
50
+ <p>Here's the path from here to your first production PDF.</p>
51
+ </section>
52
+
53
+ <Flow>
54
+ <ol class='next-steps'>
55
+ <Stream>
56
+ <li class='next-steps-step'>
57
+ <span class='next-steps-marker'>1</span>
58
+ <div class='next-steps-content'>
59
+ <h3 class='next-steps-title'>Explore this document's code</h3>
60
+ <p class='next-steps-body'>
61
+ Open <code>documents/welcome</code> to see the source code for this document. It's purposely simple,
62
+ using just a few Format primitives like <code>&lt;Layout&gt;</code> and <code>&lt;Flow&gt;</code>.
63
+ It's also styled with plain CSS and uses Format's out the box fonts. Have a play with the code and see
64
+ how the document changes.
65
+ </p>
66
+ </div>
67
+ </li>
68
+ <li class='next-steps-step'>
69
+ <span class='next-steps-marker'>2</span>
70
+ <div class='next-steps-content'>
71
+ <h3 class='next-steps-title'>Create your own document</h3>
72
+ <p class='next-steps-body'>
73
+ Hit the
74
+ <span class='plus-key' aria-hidden='true'>
75
+ <svg
76
+ width='13'
77
+ height='13'
78
+ viewBox='0 0 24 24'
79
+ fill='none'
80
+ stroke='currentColor'
81
+ stroke-width='2.2'
82
+ stroke-linecap='round'>
83
+ <path d='M12 5v14' />
84
+ <path d='M5 12h14' />
85
+ </svg>
86
+ </span>
87
+ button in the sidebar to scaffold a new document and see some of the options available.
88
+ </p>
89
+ </div>
90
+ </li>
91
+ <li class='next-steps-step'>
92
+ <span class='next-steps-marker'>3</span>
93
+ <div class='next-steps-content'>
94
+ <h3 class='next-steps-title'>Build your first paged document</h3>
95
+ <p class='next-steps-body'>Follow our step-by-step guide. You'll learn how to:</p>
96
+ <ul class='learn-list'>
97
+ <li>Use the document model</li>
98
+ <li>Add repeating headers and footers</li>
99
+ <li>Paginate content with page numbers</li>
100
+ <li>Pass in dynamic data</li>
101
+ </ul>
102
+ <ButtonLink href='https://format.dev/docs/introduction/build-your-first-pdf'>
103
+ Build your first PDF
104
+ </ButtonLink>
105
+ </div>
106
+ </li>
107
+ <li class='next-steps-step'>
108
+ <span class='next-steps-marker'>4</span>
109
+ <div class='next-steps-content'>
110
+ <h3 class='next-steps-title'>Test your favorite frameworks</h3>
111
+ <p class='next-steps-body'>
112
+ Styling on the web brings out some pretty strong opinions! Format supports a wide range of popular
113
+ frameworks so you can make fast progress without learning any new frameworks or syntax.
114
+ </p>
115
+ <div class='logos-row'>
116
+ <span class='logo-item' v-for="logo in stylingLogos" :key="logo.name">
117
+ <component :is="logo.icon" />
118
+ {{ logo.name }}
119
+ </span>
120
+ </div>
121
+ <ButtonLink href='https://format.dev/docs/studio/styling'>Explore styling</ButtonLink>
122
+ </div>
123
+ </li>
124
+ <li class='next-steps-step'>
125
+ <span class='next-steps-marker'>5</span>
126
+ <div class='next-steps-content'>
127
+ <h3 class='next-steps-title'>Deploy and generate at runtime</h3>
128
+ <p class='next-steps-body'>
129
+ Once you've designed and built your documents, you will need to select the right approach for
130
+ deployment, so you can generate PDFs at runtime. Format supports many popular frameworks, bundlers and
131
+ runtimes and we recommend taking a look at the docs to see how you might deploy your creations to
132
+ production.
133
+ </p>
134
+ <div class='logos-row'>
135
+ <span class='logo-item' v-for="logo in deployLogos" :key="logo.name">
136
+ <component :is="logo.icon" />
137
+ {{ logo.name }}
138
+ </span>
139
+ </div>
140
+ <ButtonLink href='https://format.dev/docs/studio/deployment/overview'>Explore deployment</ButtonLink>
141
+ </div>
142
+ </li>
143
+ </Stream>
144
+ </ol>
145
+ </Flow>
146
+ </template>
@@ -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
+ }
@@ -0,0 +1,214 @@
1
+ :host {
2
+ --color-text: #333333;
3
+ --color-accent: #2b7fff;
4
+ --color-hairline: #ebebeb;
5
+ --color-text-muted: rgb(from currentColor r g b / 0.6);
6
+ --color-bg-muted: #fcfcfc;
7
+ --color-code-bg: #f1f4ff;
8
+ --color-code-text: #615fff;
9
+ --color-code-border: #a3b3ff;
10
+
11
+ --hairline: 1px solid var(--color-hairline);
12
+ --grid-svg: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20793.71%201122.52'%20preserveAspectRatio='none'%20shape-rendering='crispEdges'%3E%3ClinearGradient%20id='g'%20gradientUnits='userSpaceOnUse'%20x1='0'%20y1='0'%20x2='793.71'%20y2='1122.52'%3E%3Cstop%20offset='0'%20stop-color='%23ffffff'/%3E%3Cstop%20offset='0.25'%20stop-color='%23ffffff'/%3E%3Cstop%20offset='0.8'%20stop-color='%23f0f0f0'/%3E%3C/linearGradient%3E%3Cpath%20d='M0%200V1122.52M40%200V1122.52M80%200V1122.52M120%200V1122.52M160%200V1122.52M200%200V1122.52M240%200V1122.52M280%200V1122.52M320%200V1122.52M360%200V1122.52M400%200V1122.52M440%200V1122.52M480%200V1122.52M520%200V1122.52M560%200V1122.52M600%200V1122.52M640%200V1122.52M680%200V1122.52M720%200V1122.52M760%200V1122.52M0%200H793.71M0%2040H793.71M0%2080H793.71M0%20120H793.71M0%20160H793.71M0%20200H793.71M0%20240H793.71M0%20280H793.71M0%20320H793.71M0%20360H793.71M0%20400H793.71M0%20440H793.71M0%20480H793.71M0%20520H793.71M0%20560H793.71M0%20600H793.71M0%20640H793.71M0%20680H793.71M0%20720H793.71M0%20760H793.71M0%20800H793.71M0%20840H793.71M0%20880H793.71M0%20920H793.71M0%20960H793.71M0%201000H793.71M0%201040H793.71M0%201080H793.71M0%201120H793.71'%20fill='none'%20stroke='url(%23g)'%20stroke-width='1'/%3E%3C/svg%3E");
13
+
14
+ display: flex;
15
+ flex-direction: column;
16
+ background-color: white;
17
+ background-image: var(--grid-svg);
18
+ }
19
+
20
+ :host([data-first-page]) {
21
+ --grid-svg: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20793.71%201122.52'%20preserveAspectRatio='none'%20shape-rendering='crispEdges'%3E%3CradialGradient%20id='g'%20gradientUnits='userSpaceOnUse'%20cx='396.855'%20cy='561.26'%20r='687.39'%3E%3Cstop%20offset='0'%20stop-color='%23ffffff'/%3E%3Cstop%20offset='0.3'%20stop-color='%23ffffff'/%3E%3Cstop%20offset='0.72'%20stop-color='%23f0f0f0'/%3E%3C/radialGradient%3E%3Cpath%20d='M0%200V1122.52M40%200V1122.52M80%200V1122.52M120%200V1122.52M160%200V1122.52M200%200V1122.52M240%200V1122.52M280%200V1122.52M320%200V1122.52M360%200V1122.52M400%200V1122.52M440%200V1122.52M480%200V1122.52M520%200V1122.52M560%200V1122.52M600%200V1122.52M640%200V1122.52M680%200V1122.52M720%200V1122.52M760%200V1122.52M0%200H793.71M0%2040H793.71M0%2080H793.71M0%20120H793.71M0%20160H793.71M0%20200H793.71M0%20240H793.71M0%20280H793.71M0%20320H793.71M0%20360H793.71M0%20400H793.71M0%20440H793.71M0%20480H793.71M0%20520H793.71M0%20560H793.71M0%20600H793.71M0%20640H793.71M0%20680H793.71M0%20720H793.71M0%20760H793.71M0%20800H793.71M0%20840H793.71M0%20880H793.71M0%20920H793.71M0%20960H793.71M0%201000H793.71M0%201040H793.71M0%201080H793.71M0%201120H793.71'%20fill='none'%20stroke='url(%23g)'%20stroke-width='1'/%3E%3C/svg%3E");
22
+ }
23
+
24
+ .header {
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: center;
28
+ padding: 24px;
29
+ border-bottom: var(--hairline);
30
+ background: var(--color-bg-muted);
31
+ }
32
+
33
+ .header-title {
34
+ color: var(--color-text-muted);
35
+ }
36
+
37
+ .content {
38
+ flex: 1;
39
+ display: flex;
40
+ flex-direction: column;
41
+ justify-content: center;
42
+ padding: 90px 120px;
43
+
44
+ &:has(.showcase-intro, .showcase-feature, .feature-table, .feature-prose) {
45
+ justify-content: flex-start;
46
+ padding-block: 70px;
47
+ }
48
+ }
49
+
50
+ .hero-page {
51
+ flex: 1;
52
+ display: flex;
53
+ flex-direction: column;
54
+ justify-content: center;
55
+ max-width: 95%;
56
+ margin-inline: auto;
57
+ }
58
+
59
+ .hero-title {
60
+ margin: 0 0 24px;
61
+ font-size: 68px;
62
+ letter-spacing: -3.5px;
63
+ line-height: 1;
64
+ font-weight: 800;
65
+
66
+ span {
67
+ color: var(--color-accent);
68
+ }
69
+ }
70
+
71
+ .lead {
72
+ font-size: 24px;
73
+ line-height: 1.3;
74
+ color: var(--color-text-muted);
75
+ }
76
+
77
+ .kicker {
78
+ margin: 0 0 16px;
79
+ font-family: monospace;
80
+ font-size: 12px;
81
+ letter-spacing: 0.1em;
82
+ text-transform: uppercase;
83
+ color: var(--color-text-muted);
84
+ }
85
+
86
+ code {
87
+ display: inline-block;
88
+ padding: 0.2em 0.4em;
89
+ background-color: var(--color-code-bg);
90
+ border: 1px solid var(--color-code-border);
91
+ color: var(--color-code-text);
92
+ font-size: 0.75em;
93
+ font-weight: 550;
94
+ line-height: 1;
95
+ border-radius: 0.55em;
96
+ letter-spacing: -0.5px;
97
+ transform: translateY(-1px);
98
+ }
99
+
100
+ p {
101
+ margin: 0 0 24px;
102
+ font-size: 18px;
103
+ line-height: 1.4;
104
+ }
105
+
106
+ a {
107
+ color: var(--color-accent);
108
+ text-decoration: none;
109
+ }
110
+
111
+ h2 {
112
+ margin: 0 0 24px;
113
+ font-size: 48px;
114
+ letter-spacing: -2px;
115
+ line-height: 1;
116
+ font-weight: 800;
117
+ }
118
+
119
+ .footer {
120
+ display: flex;
121
+ justify-content: space-between;
122
+ align-items: center;
123
+ margin-top: auto;
124
+ padding: 24px;
125
+ border-top: var(--hairline);
126
+ background: var(--color-bg-muted);
127
+ }
128
+
129
+ .footer-stamp {
130
+ display: inline-flex;
131
+ align-items: center;
132
+ gap: 6px;
133
+ font-size: 12px;
134
+ }
135
+
136
+ .footer-logo {
137
+ display: block;
138
+ width: 50px;
139
+ height: auto;
140
+ }
141
+
142
+ .page-numbers {
143
+ display: flex;
144
+ align-items: center;
145
+ gap: 4px;
146
+ color: var(--color-text-muted);
147
+ font-size: 12px;
148
+ }
149
+
150
+ .button {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ gap: 6px;
154
+ width: fit-content;
155
+ padding: 7px 10px;
156
+ color: var(--color-accent);
157
+ border: 1px solid var(--color-accent);
158
+ background: white;
159
+ border-radius: 9px;
160
+ font-size: 14px;
161
+ font-weight: 500;
162
+ line-height: 1;
163
+
164
+ .svg {
165
+ flex-shrink: 0;
166
+ opacity: 0.7;
167
+ }
168
+
169
+ &.button-inline {
170
+ padding: 4px 7px;
171
+ gap: 4px;
172
+ border-radius: 7px;
173
+ font-size: 12px;
174
+ }
175
+ }
176
+
177
+ .button-row {
178
+ display: flex;
179
+ flex-wrap: wrap;
180
+ gap: 10px;
181
+ }
182
+
183
+ .footer .page-numbers {
184
+ font-variant-numeric: tabular-nums;
185
+ }
186
+
187
+ :host([data-first-page]) .page-numbers {
188
+ visibility: hidden;
189
+ }
190
+
191
+ [data-type='footnotes'] {
192
+ font-size: 12px;
193
+ line-height: 1.5;
194
+ padding-block: 12px;
195
+ margin-inline: 120px;
196
+ color: var(--color-text-muted);
197
+ border-top: var(--hairline);
198
+
199
+ dl {
200
+ margin: 0;
201
+ display: grid;
202
+ grid-template-columns: auto 1fr;
203
+ column-gap: 10px;
204
+ row-gap: 4px;
205
+ }
206
+
207
+ dt {
208
+ font-variant-numeric: tabular-nums;
209
+ }
210
+
211
+ dd {
212
+ margin: 0;
213
+ }
214
+ }
@@ -0,0 +1,4 @@
1
+ import schema from './data/schema'
2
+ import * as v from 'valibot'
3
+
4
+ export type Data = v.InferOutput<typeof schema>
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "https://format.dev/schema/format-config.json",
3
+ "framework": "vue"
4
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "{{ name }}",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "format dev",
7
+ "compile": "format compile"
8
+ },
9
+ "devDependencies": {
10
+ "@format.dev/cli": "workspace:*",
11
+ "@format.dev/vue": "workspace:*",
12
+ "typescript": "^5.0.0"
13
+ },
14
+ "dependencies": {
15
+ "@format.dev/client": "workspace:*",
16
+ "valibot": "^1.1.0",
17
+ "vue": "^3.5.25"
18
+ }
19
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "@format.dev/cli/tsconfig.recommended",
3
+ "compilerOptions": {
4
+ "jsx": "preserve",
5
+ "jsxImportSource": "vue"
6
+ }
7
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "esModuleInterop": true,
5
+ "skipLibCheck": true,
6
+ "target": "es2022",
7
+ "allowJs": true,
8
+ "resolveJsonModule": true,
9
+ "moduleResolution": "bundler",
10
+ "moduleDetection": "force",
11
+ "verbatimModuleSyntax": true,
12
+ "strict": true,
13
+ "noUncheckedIndexedAccess": true,
14
+ "noImplicitOverride": true,
15
+ "module": "preserve",
16
+ "checkJs": true,
17
+ "noEmit": true,
18
+ "lib": ["es2022", "dom", "dom.iterable"],
19
+ "types": ["@format.dev/cli/env"]
20
+ },
21
+ "exclude": ["**/node_modules", "_generated"]
22
+ }
package/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- // This is a bootstrap placeholder. Format is not released yet.
2
- export {}
package/index.js DELETED
@@ -1,3 +0,0 @@
1
- // This is a bootstrap placeholder. Format is not released yet, and this version
2
- // carries no implementation. See README.md.
3
- export {}