@publish.os/cli 0.0.1-alpha.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 (28) hide show
  1. package/README.md +13 -0
  2. package/dist/assets/nextjs/defaults/app/globals.css +6 -0
  3. package/dist/assets/nextjs/defaults/app/providers.tsx +1 -0
  4. package/dist/assets/nextjs/defaults/group/layout.tsx +13 -0
  5. package/dist/assets/nextjs/defaults/group/leaf.tsx +29 -0
  6. package/dist/assets/nextjs/defaults/group/page.tsx +50 -0
  7. package/dist/assets/nextjs/defaults/project/next.config.mjs +49 -0
  8. package/dist/assets/nextjs/defaults/project/package.json +10 -0
  9. package/dist/assets/nextjs/defaults/project/postcss.config.mjs +5 -0
  10. package/dist/assets/nextjs/defaults/project/tsconfig.json +32 -0
  11. package/dist/assets/nextjs/defaults/root/css/radius.css +34 -0
  12. package/dist/assets/nextjs/defaults/root/css/scaling.css +50 -0
  13. package/dist/assets/nextjs/defaults/root/css/typography.css +487 -0
  14. package/dist/assets/nextjs/defaults/root/css/zindex.css +29 -0
  15. package/dist/assets/nextjs/defaults/root/globals.css +122 -0
  16. package/dist/assets/nextjs/defaults/root/layout.tsx +15 -0
  17. package/dist/assets/nextjs/defaults/root/page.tsx +66 -0
  18. package/dist/assets/nextjs/defaults/root/theme.css +248 -0
  19. package/dist/assets/nextjs/defaults/source/_internal/logger.ts +20 -0
  20. package/dist/assets/nextjs/shims/global-layout.tsx +28 -0
  21. package/dist/assets/nextjs/shims/group-layout.tsx +7 -0
  22. package/dist/assets/nextjs/shims/group-page.tsx +12 -0
  23. package/dist/assets/nextjs/shims/leaf-page.tsx +13 -0
  24. package/dist/assets/nextjs/shims/metadata-route.tmpl +4 -0
  25. package/dist/assets/nextjs/shims/root-page.tsx +12 -0
  26. package/dist/publish.os.d.mts +1 -0
  27. package/dist/publish.os.mjs +10133 -0
  28. package/package.json +24 -0
@@ -0,0 +1,66 @@
1
+ import ColorPalette from "@publish.os/nextjs/components/color-palette";
2
+ import type {
3
+ LinkNode,
4
+ RootPageProps,
5
+ SectionNode,
6
+ TreeNode,
7
+ } from "@publish.os/nextjs/types";
8
+ import { log } from "@source/_internal/logger";
9
+ import Link from "next/link";
10
+
11
+ type RootNavNode = LinkNode | (SectionNode & { path: string });
12
+
13
+ function rootNavNodes(nodes: TreeNode[]): RootNavNode[] {
14
+ return nodes.filter((node): node is RootNavNode => {
15
+ if (node.type === "link") return true;
16
+ return node.type === "section" && typeof node.path === "string";
17
+ });
18
+ }
19
+
20
+ export default function HomePage(props: RootPageProps) {
21
+ log.debug("[default:root-page]", props);
22
+ const { site, tree } = props;
23
+ const navNodes = rootNavNodes(tree);
24
+
25
+ return (
26
+ <main className="mx-auto w-full max-w-3xl px-6 py-10 text-foreground-1 lg:px-10">
27
+ <h1 className="text-3xl font-semibold tracking-tight text-foreground-1">
28
+ {site.title}
29
+ </h1>
30
+ {site.description && (
31
+ <p className="mt-3 max-w-2xl text-base leading-7 text-foreground-2">
32
+ {site.description}
33
+ </p>
34
+ )}
35
+
36
+ <ColorPalette />
37
+
38
+ {navNodes.length > 0 && (
39
+ <nav className="mt-8">
40
+ <h2 className="text-lg font-medium text-foreground-1">Sections</h2>
41
+ <ul className="mt-4 space-y-2 text-sm">
42
+ {navNodes.map((node) => (
43
+ <li key={node.id}>
44
+ {node.type === "link" ? (
45
+ <a
46
+ className="text-accent-1 underline-offset-4 hover:underline"
47
+ href={node.href}
48
+ >
49
+ {node.title}
50
+ </a>
51
+ ) : (
52
+ <Link
53
+ className="text-accent-1 underline-offset-4 hover:underline"
54
+ href={node.path}
55
+ >
56
+ {node.title}
57
+ </Link>
58
+ )}
59
+ </li>
60
+ ))}
61
+ </ul>
62
+ </nav>
63
+ )}
64
+ </main>
65
+ );
66
+ }
@@ -0,0 +1,248 @@
1
+ :root {
2
+ color-scheme: light;
3
+
4
+ /*
5
+ * Fonts
6
+ * Keep system defaults for now. Replace these when tenant fonts are added.
7
+ */
8
+
9
+ --font-sans:
10
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
11
+ sans-serif;
12
+ --font-mono:
13
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
14
+ monospace;
15
+
16
+ /*
17
+ * Global shape controls
18
+ * --theme-scaling multiplies platform spacing/radius helpers.
19
+ * --theme-radius accepts one of the radius preset vars below.
20
+ */
21
+
22
+ --theme-scaling: 1;
23
+ --theme-radius: var(--theme-radius-md);
24
+
25
+ /*
26
+ * Raw color scales
27
+ * 1 is lightest / quietest. 12 is darkest / highest contrast.
28
+ */
29
+
30
+ --gray-1: #fcfcfc;
31
+ --gray-2: #f9f9f9;
32
+ --gray-3: #f0f0f0;
33
+ --gray-4: #e8e8e8;
34
+ --gray-5: #e0e0e0;
35
+ --gray-6: #d9d9d9;
36
+ --gray-7: #cecece;
37
+ --gray-8: #bbbbbb;
38
+ --gray-9: #8d8d8d;
39
+ --gray-10: #838383;
40
+ --gray-11: #646464;
41
+ --gray-12: #202020;
42
+
43
+ --gray-dark-1: #111111;
44
+ --gray-dark-2: #191919;
45
+ --gray-dark-3: #222222;
46
+ --gray-dark-4: #2a2a2a;
47
+ --gray-dark-5: #313131;
48
+ --gray-dark-6: #3a3a3a;
49
+ --gray-dark-7: #484848;
50
+ --gray-dark-8: #606060;
51
+ --gray-dark-9: #6e6e6e;
52
+ --gray-dark-10: #7b7b7b;
53
+ --gray-dark-11: #b4b4b4;
54
+ --gray-dark-12: #eeeeee;
55
+
56
+ --blue-1: oklch(98% 0.015 255);
57
+ --blue-2: oklch(96% 0.025 255);
58
+ --blue-3: oklch(92% 0.055 255);
59
+ --blue-4: oklch(88% 0.08 255);
60
+ --blue-5: oklch(82% 0.11 255);
61
+ --blue-6: oklch(76% 0.14 255);
62
+ --blue-7: oklch(68% 0.17 255);
63
+ --blue-8: oklch(60% 0.19 255);
64
+ --blue-9: oklch(52% 0.2 255);
65
+ --blue-10: oklch(46% 0.18 255);
66
+ --blue-11: oklch(40% 0.16 255);
67
+ --blue-12: oklch(28% 0.1 255);
68
+
69
+ --blue-dark-1: #0d1520;
70
+ --blue-dark-2: #111927;
71
+ --blue-dark-3: #0d2847;
72
+ --blue-dark-4: #003362;
73
+ --blue-dark-5: #004074;
74
+ --blue-dark-6: #104d87;
75
+ --blue-dark-7: #205d9e;
76
+ --blue-dark-8: #2870bd;
77
+ --blue-dark-9: #0090ff;
78
+ --blue-dark-10: #3b9eff;
79
+ --blue-dark-11: #70b8ff;
80
+ --blue-dark-12: #c2e6ff;
81
+
82
+ /*
83
+ * Palette aliases
84
+ * Swap these to use a different neutral or accent scale without changing
85
+ * the semantic variables below.
86
+ */
87
+
88
+ --palette-neutral-1: var(--gray-1);
89
+ --palette-neutral-2: var(--gray-2);
90
+ --palette-neutral-3: var(--gray-3);
91
+ --palette-neutral-4: var(--gray-4);
92
+ --palette-neutral-5: var(--gray-5);
93
+ --palette-neutral-6: var(--gray-6);
94
+ --palette-neutral-7: var(--gray-7);
95
+ --palette-neutral-8: var(--gray-8);
96
+ --palette-neutral-9: var(--gray-9);
97
+ --palette-neutral-10: var(--gray-10);
98
+ --palette-neutral-11: var(--gray-11);
99
+ --palette-neutral-12: var(--gray-12);
100
+
101
+ --palette-accent-1: var(--blue-10);
102
+ --palette-accent-2: var(--blue-9);
103
+ --palette-accent-3: var(--blue-3);
104
+ --palette-accent-4: var(--blue-5);
105
+
106
+ /*
107
+ * Foreground
108
+ * Text and icons. Use stronger values for headings and important controls.
109
+ */
110
+
111
+ --foreground-1: var(--palette-neutral-12);
112
+ --foreground-2: var(--palette-neutral-11);
113
+ --foreground-3: var(--palette-neutral-10);
114
+ --foreground-4: var(--palette-neutral-8);
115
+
116
+ /*
117
+ * Surfaces
118
+ * App backgrounds and interaction states. Menu tokens are paired because
119
+ * menus often sit above overlays and need their own readable foregrounds.
120
+ */
121
+
122
+ --surface-background: var(--palette-neutral-1);
123
+ --surface-1: var(--palette-neutral-1);
124
+ --surface-2: var(--palette-neutral-2);
125
+ --surface-3: var(--palette-neutral-3);
126
+ --surface-4: var(--palette-neutral-4);
127
+ --surface-hover: var(--surface-3);
128
+ --surface-active: var(--surface-4);
129
+ --surface-overlay: var(--surface-3);
130
+ --surface-menu: var(--palette-neutral-12);
131
+ --surface-menu-foreground: var(--palette-neutral-1);
132
+ --surface-menu-hover: var(--palette-neutral-11);
133
+ --surface-menu-hover-foreground: var(--palette-neutral-1);
134
+ --surface-menu-active: var(--palette-neutral-10);
135
+ --surface-menu-active-foreground: var(--palette-neutral-1);
136
+ --surface-menu-disabled: var(--palette-neutral-10);
137
+ --surface-menu-disabled-foreground: var(--palette-neutral-4);
138
+
139
+ /*
140
+ * Accent
141
+ * Brand emphasis, links, selected states, and primary actions.
142
+ */
143
+
144
+ --accent-1: var(--palette-accent-1);
145
+ --accent-2: var(--palette-accent-2);
146
+ --accent-3: var(--palette-accent-3);
147
+ --accent-4: var(--palette-accent-4);
148
+ --accent-foreground: white;
149
+
150
+ /*
151
+ * Strokes
152
+ * Borders, dividers, outlines, and low-emphasis separators.
153
+ */
154
+
155
+ --stroke-1: var(--palette-neutral-8);
156
+ --stroke-2: var(--palette-neutral-7);
157
+ --stroke-3: var(--palette-neutral-5);
158
+ --stroke-4: var(--palette-neutral-4);
159
+
160
+ /*
161
+ * Typography
162
+ * These affect markdown/MDX prose only.
163
+ */
164
+
165
+ --typography-body: var(--palette-neutral-11);
166
+ --typography-headings: var(--palette-neutral-12);
167
+ --typography-lead: var(--palette-neutral-8);
168
+ --typography-links: var(--accent-1);
169
+ --typography-bold: var(--palette-neutral-11);
170
+ --typography-counters: var(--palette-neutral-8);
171
+ --typography-bullets: var(--palette-neutral-6);
172
+ --typography-hr: var(--palette-neutral-4);
173
+ --typography-quotes: var(--palette-neutral-11);
174
+ --typography-quote-borders: var(--palette-neutral-4);
175
+ --typography-captions: var(--palette-neutral-7);
176
+ --typography-code: var(--palette-neutral-11);
177
+ --typography-variable: var(--accent-1);
178
+ --typography-pre-code: var(--palette-neutral-11);
179
+ --typography-pre-bg: var(--palette-neutral-3);
180
+ --typography-pre-border: var(--palette-neutral-6);
181
+ --typography-th-borders: var(--palette-neutral-5);
182
+ --typography-td-borders: var(--palette-neutral-4);
183
+ --typography-base-size: 1rem;
184
+ --typography-line-height: 1.6;
185
+ --typography-size-factor: 1;
186
+ --typography-spacing-factor: 1;
187
+
188
+ /*
189
+ * Focus
190
+ * Keyboard and accessibility focus indicators.
191
+ */
192
+
193
+ --focus-ring: var(--accent-2);
194
+
195
+ /*
196
+ * Selection
197
+ * Native text selection colors.
198
+ */
199
+
200
+ --selection-background: var(--accent-3);
201
+ --selection-foreground: var(--accent-1);
202
+
203
+ /*
204
+ * Progress bar
205
+ * Route transition / loading indicator.
206
+ */
207
+
208
+ --progress-bar-fill: var(--accent-2);
209
+ --progress-bar-background: transparent;
210
+ --progress-bar-height: 2px;
211
+
212
+ /*
213
+ * Z-index
214
+ * Layering scale used by platform layout and components.
215
+ */
216
+
217
+ --z-content: 10;
218
+ --z-nav: 100;
219
+ --z-overlay: 110;
220
+ --z-modal: 120;
221
+ --z-search: 125;
222
+ --z-toast: 130;
223
+ --z-progress: 140;
224
+ }
225
+
226
+ .dark {
227
+ color-scheme: dark;
228
+
229
+ --palette-neutral-1: var(--gray-dark-1);
230
+ --palette-neutral-2: var(--gray-dark-2);
231
+ --palette-neutral-3: var(--gray-dark-3);
232
+ --palette-neutral-4: var(--gray-dark-4);
233
+ --palette-neutral-5: var(--gray-dark-5);
234
+ --palette-neutral-6: var(--gray-dark-6);
235
+ --palette-neutral-7: var(--gray-dark-7);
236
+ --palette-neutral-8: var(--gray-dark-8);
237
+ --palette-neutral-9: var(--gray-dark-9);
238
+ --palette-neutral-10: var(--gray-dark-10);
239
+ --palette-neutral-11: var(--gray-dark-11);
240
+ --palette-neutral-12: var(--gray-dark-12);
241
+
242
+ --palette-accent-1: var(--blue-dark-11);
243
+ --palette-accent-2: var(--blue-dark-9);
244
+ --palette-accent-3: var(--blue-dark-3);
245
+ --palette-accent-4: var(--blue-dark-5);
246
+
247
+ --accent-foreground: black;
248
+ }
@@ -0,0 +1,20 @@
1
+ const isDev = process.env.NODE_ENV !== "production";
2
+
3
+ export const log = {
4
+ debug(...args: unknown[]) {
5
+ // biome-ignore lint/suspicious/noConsole: generated runtime logger intentionally writes render diagnostics.
6
+ if (isDev) console.debug("[publish.os:debug]", ...args);
7
+ },
8
+ info(...args: unknown[]) {
9
+ // biome-ignore lint/suspicious/noConsole: generated runtime logger intentionally writes render diagnostics.
10
+ console.log("[publish.os]", ...args);
11
+ },
12
+ warn(...args: unknown[]) {
13
+ // biome-ignore lint/suspicious/noConsole: generated runtime logger intentionally writes render diagnostics.
14
+ console.warn("[publish.os:warn]", ...args);
15
+ },
16
+ error(...args: unknown[]) {
17
+ // biome-ignore lint/suspicious/noConsole: generated runtime logger intentionally writes render diagnostics.
18
+ console.error("[publish.os:error]", ...args);
19
+ },
20
+ };
@@ -0,0 +1,28 @@
1
+ import manifest from "@manifest";
2
+ import RootLayout from "@source/layout";
3
+ import type { Metadata } from "next";
4
+ import type { ReactNode } from "react";
5
+ import { Providers } from "./providers";
6
+ import "./globals.css";
7
+
8
+ export const metadata: Metadata = {
9
+ title: {
10
+ default: manifest.site.title,
11
+ template: `%s · ${manifest.site.title}`,
12
+ },
13
+ description: manifest.site.description,
14
+ };
15
+
16
+ export default function AppRootLayout({ children }: { children: ReactNode }) {
17
+ return (
18
+ <html lang="en" suppressHydrationWarning>
19
+ <body>
20
+ <Providers>
21
+ <RootLayout site={manifest.site} tree={manifest.tree}>
22
+ {children}
23
+ </RootLayout>
24
+ </Providers>
25
+ </body>
26
+ </html>
27
+ );
28
+ }
@@ -0,0 +1,7 @@
1
+ import manifest from "@manifest";
2
+ import { createGroupLayout } from "@publish.os/nextjs/layouts/group";
3
+ import Layout from "@source/{{GROUP}}/layout";
4
+
5
+ const route = { group: "{{GROUP}}", manifest, Layout } as const;
6
+
7
+ export default createGroupLayout(route);
@@ -0,0 +1,12 @@
1
+ import manifest from "@manifest";
2
+ import {
3
+ createGroupMetadata,
4
+ createGroupPage,
5
+ } from "@publish.os/nextjs/pages/group";
6
+ import IndexPage from "@source/{{GROUP}}/page";
7
+ import type { Metadata } from "next";
8
+
9
+ const route = { group: "{{GROUP}}", manifest, IndexPage } as const;
10
+
11
+ export default createGroupPage(route);
12
+ export const metadata: Metadata = createGroupMetadata(route);
@@ -0,0 +1,13 @@
1
+ import manifest from "@manifest";
2
+ import {
3
+ createLeafMetadata,
4
+ createLeafPage,
5
+ createLeafStaticParams,
6
+ } from "@publish.os/nextjs/pages/leaf";
7
+ import Leaf from "@source/{{GROUP}}/leaf";
8
+
9
+ const route = { group: "{{GROUP}}", manifest, Leaf } as const;
10
+
11
+ export default createLeafPage(route);
12
+ export const generateMetadata = createLeafMetadata(route);
13
+ export const generateStaticParams = createLeafStaticParams(route);
@@ -0,0 +1,4 @@
1
+ import manifest from "@manifest";
2
+ import { {{FACTORY}} } from "@publish.os/nextjs/routes/{{ROUTE_MODULE}}";
3
+
4
+ export const GET = {{FACTORY}}(manifest);
@@ -0,0 +1,12 @@
1
+ import manifest from "@manifest";
2
+ import {
3
+ createRootMetadata,
4
+ createRootPage,
5
+ } from "@publish.os/nextjs/pages/root";
6
+ import RootPage from "@source/page";
7
+ import type { Metadata } from "next";
8
+
9
+ const route = { manifest, RootPage } as const;
10
+
11
+ export default createRootPage(route);
12
+ export const metadata: Metadata = createRootMetadata(route);
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node