create-prisma 0.3.2 → 0.4.0-pr.32.60.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.
- package/README.md +86 -117
- package/dist/cli.mjs +1 -1
- package/dist/{create-DOr8R2_6.mjs → create-Dm_HiTCj.mjs} +221 -120
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/templates/create/astro/src/pages/index.astro.hbs +39 -49
- package/templates/create/elysia/README.md.hbs +32 -0
- package/templates/create/elysia/deno.json.hbs +5 -0
- package/templates/create/elysia/package.json.hbs +21 -0
- package/templates/create/elysia/prisma/schema.prisma.hbs +25 -0
- package/templates/create/elysia/prisma/seed.ts.hbs +42 -0
- package/templates/create/elysia/prisma.config.ts.hbs +15 -0
- package/templates/create/elysia/src/index.ts.hbs +43 -0
- package/templates/create/elysia/src/lib/prisma.ts.hbs +56 -0
- package/templates/create/elysia/tsconfig.json +14 -0
- package/templates/create/hono/README.md.hbs +3 -2
- package/templates/create/hono/package.json.hbs +3 -4
- package/templates/create/hono/prisma/schema.prisma.hbs +4 -0
- package/templates/create/hono/prisma/seed.ts.hbs +5 -1
- package/templates/create/hono/prisma.config.ts.hbs +15 -0
- package/templates/create/hono/src/index.ts.hbs +8 -2
- package/templates/create/hono/src/lib/prisma.ts.hbs +6 -3
- package/templates/create/nest/.yarnrc.yml.hbs +3 -0
- package/templates/create/nest/README.md.hbs +32 -0
- package/templates/create/nest/deno.json.hbs +5 -0
- package/templates/create/nest/package.json.hbs +24 -0
- package/templates/create/nest/prisma/schema.prisma.hbs +25 -0
- package/templates/create/nest/prisma/seed.ts.hbs +44 -0
- package/templates/create/nest/prisma.config.ts.hbs +15 -0
- package/templates/create/nest/src/app.controller.ts.hbs +11 -0
- package/templates/create/nest/src/app.module.ts.hbs +20 -0
- package/templates/create/nest/src/lib/prisma.ts.hbs +58 -0
- package/templates/create/nest/src/main.ts.hbs +27 -0
- package/templates/create/nest/src/prisma.service.ts.hbs +10 -0
- package/templates/create/nest/src/users.controller.ts.hbs +15 -0
- package/templates/create/nest/src/users.service.ts.hbs +19 -0
- package/templates/create/nest/tsconfig.json +16 -0
- package/templates/create/next/src/app/globals.css +38 -46
- package/templates/create/nuxt/app/pages/index.vue.hbs +45 -55
- package/templates/create/svelte/src/routes/+page.svelte.hbs +78 -99
- package/templates/create/tanstack-start/prisma/schema.prisma.hbs +0 -1
- package/templates/create/tanstack-start/src/routes/index.tsx.hbs +28 -30
- package/templates/create/tanstack-start/src/styles.css +80 -121
- package/templates/create/turborepo/apps/api/package.json.hbs +0 -2
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +7 -1
- package/templates/create/hono/prisma.config.ts +0 -13
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createPrismaClient } from "../src/lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
2
|
+
|
|
3
|
+
const prisma = createPrismaClient();
|
|
4
|
+
|
|
5
|
+
async function main() {
|
|
6
|
+
{{#if (eq schemaPreset "basic")}}
|
|
7
|
+
const users = await Promise.all([
|
|
8
|
+
prisma.user.upsert({
|
|
9
|
+
where: { email: "alice@prisma.io" },
|
|
10
|
+
update: { name: "Alice" },
|
|
11
|
+
create: {
|
|
12
|
+
email: "alice@prisma.io",
|
|
13
|
+
name: "Alice",
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
prisma.user.upsert({
|
|
17
|
+
where: { email: "bob@prisma.io" },
|
|
18
|
+
update: { name: "Bob" },
|
|
19
|
+
create: {
|
|
20
|
+
email: "bob@prisma.io",
|
|
21
|
+
name: "Bob",
|
|
22
|
+
},
|
|
23
|
+
}),
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
console.log(`Seeded ${users.length} users.`);
|
|
27
|
+
{{else}}
|
|
28
|
+
console.log("No seed data defined for the empty schema preset.");
|
|
29
|
+
{{/if}}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
main()
|
|
33
|
+
.then(async () => {
|
|
34
|
+
await prisma.$disconnect();
|
|
35
|
+
})
|
|
36
|
+
.catch(async (error) => {
|
|
37
|
+
console.error(error);
|
|
38
|
+
await prisma.$disconnect();
|
|
39
|
+
{{#if (eq packageManager "deno")}}
|
|
40
|
+
Deno.exit(1);
|
|
41
|
+
{{else}}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
{{/if}}
|
|
44
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
import { defineConfig, env } from "prisma/config";
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
schema: "prisma/schema.prisma",
|
|
8
|
+
migrations: {
|
|
9
|
+
path: "prisma/migrations",
|
|
10
|
+
seed: "{{#if (eq packageManager "deno")}}deno run -A --env-file=.env ./prisma/seed.ts{{else}}{{#if (eq packageManager "bun")}}bun ./prisma/seed.ts{{else}}tsx prisma/seed.ts{{/if}}{{/if}}",
|
|
11
|
+
},
|
|
12
|
+
datasource: {
|
|
13
|
+
url: env("DATABASE_URL"),
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Module } from "@nestjs/common";
|
|
2
|
+
import { AppController } from "./app.controller{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
3
|
+
import { PrismaService } from "./prisma.service{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
4
|
+
{{#if (eq schemaPreset "basic")}}
|
|
5
|
+
import { UsersController } from "./users.controller{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
6
|
+
import { UsersService } from "./users.service{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
7
|
+
{{/if}}
|
|
8
|
+
|
|
9
|
+
@Module({
|
|
10
|
+
imports: [],
|
|
11
|
+
controllers: [
|
|
12
|
+
AppController{{#if (eq schemaPreset "basic")}},
|
|
13
|
+
UsersController{{/if}}
|
|
14
|
+
],
|
|
15
|
+
providers: [
|
|
16
|
+
PrismaService{{#if (eq schemaPreset "basic")}},
|
|
17
|
+
UsersService{{/if}}
|
|
18
|
+
],
|
|
19
|
+
})
|
|
20
|
+
export class AppModule {}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
|
|
5
|
+
import { PrismaClient } from "../generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
6
|
+
{{#if (eq provider "postgresql")}}
|
|
7
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
8
|
+
{{/if}}
|
|
9
|
+
{{#if (eq provider "cockroachdb")}}
|
|
10
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
11
|
+
{{/if}}
|
|
12
|
+
{{#if (eq provider "mysql")}}
|
|
13
|
+
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
14
|
+
{{/if}}
|
|
15
|
+
{{#if (eq provider "sqlite")}}
|
|
16
|
+
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
17
|
+
{{/if}}
|
|
18
|
+
{{#if (eq provider "sqlserver")}}
|
|
19
|
+
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
20
|
+
{{/if}}
|
|
21
|
+
|
|
22
|
+
const rawDatabaseUrl = {{#if (eq packageManager "deno")}}Deno.env.get("DATABASE_URL"){{else}}process.env.DATABASE_URL{{/if}};
|
|
23
|
+
{{#if (eq provider "sqlite")}}
|
|
24
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim() || "file:./dev.db";
|
|
25
|
+
{{else}}
|
|
26
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim();
|
|
27
|
+
if (!databaseUrl) {
|
|
28
|
+
throw new Error("DATABASE_URL is required");
|
|
29
|
+
}
|
|
30
|
+
{{/if}}
|
|
31
|
+
|
|
32
|
+
{{#if (eq provider "postgresql")}}
|
|
33
|
+
const adapter = new PrismaPg({
|
|
34
|
+
connectionString: databaseUrl,
|
|
35
|
+
});
|
|
36
|
+
{{/if}}
|
|
37
|
+
{{#if (eq provider "cockroachdb")}}
|
|
38
|
+
const adapter = new PrismaPg({
|
|
39
|
+
connectionString: databaseUrl,
|
|
40
|
+
});
|
|
41
|
+
{{/if}}
|
|
42
|
+
{{#if (eq provider "mysql")}}
|
|
43
|
+
const adapter = new PrismaMariaDb(databaseUrl);
|
|
44
|
+
{{/if}}
|
|
45
|
+
{{#if (eq provider "sqlite")}}
|
|
46
|
+
const adapter = new PrismaBetterSqlite3({
|
|
47
|
+
url: databaseUrl,
|
|
48
|
+
});
|
|
49
|
+
{{/if}}
|
|
50
|
+
{{#if (eq provider "sqlserver")}}
|
|
51
|
+
const adapter = new PrismaMssql(databaseUrl);
|
|
52
|
+
{{/if}}
|
|
53
|
+
|
|
54
|
+
export const prismaClientOptions = { adapter };
|
|
55
|
+
|
|
56
|
+
export function createPrismaClient() {
|
|
57
|
+
return new PrismaClient(prismaClientOptions);
|
|
58
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
3
|
+
import "dotenv/config";
|
|
4
|
+
{{/if}}
|
|
5
|
+
|
|
6
|
+
import { NestFactory } from "@nestjs/core";
|
|
7
|
+
|
|
8
|
+
import { AppModule } from "./app.module{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
9
|
+
|
|
10
|
+
async function bootstrap() {
|
|
11
|
+
const app = await NestFactory.create(AppModule);
|
|
12
|
+
const rawPort = ({{#if (eq packageManager "deno")}}Deno.env.get("PORT"){{else}}process.env.PORT{{/if}} ?? "").trim();
|
|
13
|
+
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
14
|
+
const port =
|
|
15
|
+
Number.isFinite(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
16
|
+
await app.listen(port);
|
|
17
|
+
console.log(`Server running at http://localhost:${port}`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
bootstrap().catch((error) => {
|
|
21
|
+
console.error("Failed to start server", error);
|
|
22
|
+
{{#if (eq packageManager "deno")}}
|
|
23
|
+
Deno.exit(1);
|
|
24
|
+
{{else}}
|
|
25
|
+
process.exit(1);
|
|
26
|
+
{{/if}}
|
|
27
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Injectable } from "@nestjs/common";
|
|
2
|
+
import { PrismaClient } from "./generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
3
|
+
import { prismaClientOptions } from "./lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
4
|
+
|
|
5
|
+
@Injectable()
|
|
6
|
+
export class PrismaService extends PrismaClient {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(prismaClientOptions);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{{#if (eq schemaPreset "basic")}}
|
|
2
|
+
import { Controller, Get } from "@nestjs/common";
|
|
3
|
+
|
|
4
|
+
import { UsersService } from "./users.service{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
5
|
+
|
|
6
|
+
@Controller("users")
|
|
7
|
+
export class UsersController {
|
|
8
|
+
constructor(private readonly usersService: UsersService) {}
|
|
9
|
+
|
|
10
|
+
@Get()
|
|
11
|
+
findAll() {
|
|
12
|
+
return this.usersService.findAll();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
{{/if}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{{#if (eq schemaPreset "basic")}}
|
|
2
|
+
import { Injectable } from "@nestjs/common";
|
|
3
|
+
|
|
4
|
+
import { PrismaService } from "./prisma.service{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
5
|
+
|
|
6
|
+
@Injectable()
|
|
7
|
+
export class UsersService {
|
|
8
|
+
constructor(private readonly prisma: PrismaService) {}
|
|
9
|
+
|
|
10
|
+
async findAll() {
|
|
11
|
+
return this.prisma.user.findMany({
|
|
12
|
+
take: 10,
|
|
13
|
+
orderBy: {
|
|
14
|
+
createdAt: "desc",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
{{/if}}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"verbatimModuleSyntax": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"forceConsistentCasingInFileNames": true,
|
|
11
|
+
"emitDecoratorMetadata": true,
|
|
12
|
+
"experimentalDecorators": true,
|
|
13
|
+
"outDir": "dist"
|
|
14
|
+
},
|
|
15
|
+
"include": ["src/**/*.ts"]
|
|
16
|
+
}
|
|
@@ -6,56 +6,50 @@
|
|
|
6
6
|
box-sizing: border-box;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
html {
|
|
10
|
-
font-size: 16px;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
9
|
body {
|
|
14
10
|
margin: 0;
|
|
15
|
-
font-family:
|
|
16
|
-
background: #
|
|
17
|
-
color: #
|
|
11
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
12
|
+
background: #fff;
|
|
13
|
+
color: #111;
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
.shell {
|
|
21
|
-
width:
|
|
17
|
+
max-width: 40rem;
|
|
22
18
|
margin: 0 auto;
|
|
23
|
-
padding:
|
|
19
|
+
padding: 3rem 1.5rem;
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
.hero {
|
|
27
|
-
margin-bottom:
|
|
23
|
+
margin-bottom: 1.5rem;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
26
|
.eyebrow {
|
|
31
|
-
margin: 0 0 0.
|
|
32
|
-
color: #
|
|
33
|
-
font-size: 0.
|
|
34
|
-
font-weight:
|
|
35
|
-
letter-spacing: 0.
|
|
27
|
+
margin: 0 0 0.5rem;
|
|
28
|
+
color: #666;
|
|
29
|
+
font-size: 0.75rem;
|
|
30
|
+
font-weight: 600;
|
|
31
|
+
letter-spacing: 0.06em;
|
|
36
32
|
text-transform: uppercase;
|
|
37
33
|
}
|
|
38
34
|
|
|
39
35
|
h1 {
|
|
40
36
|
margin: 0;
|
|
41
|
-
|
|
42
|
-
font-
|
|
43
|
-
line-height:
|
|
37
|
+
font-size: 1.25rem;
|
|
38
|
+
font-weight: 600;
|
|
39
|
+
line-height: 1.4;
|
|
44
40
|
}
|
|
45
41
|
|
|
46
42
|
.lede {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
margin: 0.5rem 0 0;
|
|
44
|
+
color: #666;
|
|
45
|
+
font-size: 0.875rem;
|
|
46
|
+
line-height: 1.6;
|
|
51
47
|
}
|
|
52
48
|
|
|
53
49
|
.panel {
|
|
54
|
-
|
|
55
|
-
border:
|
|
56
|
-
|
|
57
|
-
background: #ffffff;
|
|
58
|
-
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.06);
|
|
50
|
+
border: 1px solid #e5e5e5;
|
|
51
|
+
border-radius: 0.5rem;
|
|
52
|
+
padding: 1rem;
|
|
59
53
|
}
|
|
60
54
|
|
|
61
55
|
.panelHeader {
|
|
@@ -63,22 +57,25 @@ h1 {
|
|
|
63
57
|
align-items: center;
|
|
64
58
|
justify-content: space-between;
|
|
65
59
|
gap: 1rem;
|
|
66
|
-
margin-bottom:
|
|
60
|
+
margin-bottom: 0.75rem;
|
|
67
61
|
}
|
|
68
62
|
|
|
69
63
|
h2 {
|
|
70
64
|
margin: 0;
|
|
71
|
-
font-size:
|
|
65
|
+
font-size: 0.875rem;
|
|
66
|
+
font-weight: 600;
|
|
72
67
|
}
|
|
73
68
|
|
|
74
69
|
.panelHeader span,
|
|
75
70
|
.empty,
|
|
76
71
|
time {
|
|
77
|
-
color: #
|
|
72
|
+
color: #888;
|
|
73
|
+
font-size: 0.8rem;
|
|
78
74
|
}
|
|
79
75
|
|
|
80
76
|
.panel p {
|
|
81
|
-
color: #
|
|
77
|
+
color: #666;
|
|
78
|
+
font-size: 0.8rem;
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
.users {
|
|
@@ -86,7 +83,7 @@ time {
|
|
|
86
83
|
margin: 0;
|
|
87
84
|
padding: 0;
|
|
88
85
|
display: grid;
|
|
89
|
-
gap: 0.
|
|
86
|
+
gap: 0.5rem;
|
|
90
87
|
}
|
|
91
88
|
|
|
92
89
|
.users li {
|
|
@@ -94,34 +91,29 @@ time {
|
|
|
94
91
|
align-items: center;
|
|
95
92
|
justify-content: space-between;
|
|
96
93
|
gap: 1rem;
|
|
97
|
-
padding:
|
|
98
|
-
border
|
|
99
|
-
|
|
100
|
-
border: 1px solid #dbe2ea;
|
|
94
|
+
padding: 0.625rem 0.75rem;
|
|
95
|
+
border: 1px solid #eee;
|
|
96
|
+
border-radius: 0.375rem;
|
|
101
97
|
}
|
|
102
98
|
|
|
103
99
|
.users p {
|
|
104
|
-
margin: 0.
|
|
100
|
+
margin: 0.125rem 0 0;
|
|
105
101
|
}
|
|
106
102
|
|
|
107
103
|
time {
|
|
108
|
-
font-size: 0.
|
|
104
|
+
font-size: 0.75rem;
|
|
109
105
|
white-space: nowrap;
|
|
110
106
|
}
|
|
111
107
|
|
|
112
108
|
code {
|
|
113
|
-
padding: 0.
|
|
114
|
-
border-radius: 0.
|
|
115
|
-
background: #
|
|
109
|
+
padding: 0.125rem 0.25rem;
|
|
110
|
+
border-radius: 0.25rem;
|
|
111
|
+
background: #f5f5f5;
|
|
116
112
|
font-family: SFMono-Regular, Consolas, monospace;
|
|
117
|
-
font-size: 0.
|
|
113
|
+
font-size: 0.875em;
|
|
118
114
|
}
|
|
119
115
|
|
|
120
116
|
@media (max-width: 640px) {
|
|
121
|
-
.shell {
|
|
122
|
-
padding-top: 3rem;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
117
|
.users li,
|
|
126
118
|
.panelHeader {
|
|
127
119
|
flex-direction: column;
|
|
@@ -90,13 +90,13 @@ function formatCreatedAt(value: string): string {
|
|
|
90
90
|
<p>Start from <code>server/api/users.get.ts</code> for server-side data access.</p>
|
|
91
91
|
</div>
|
|
92
92
|
</li>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
<li>
|
|
94
|
+
<div>
|
|
95
|
+
<strong>Generated client output</strong>
|
|
96
96
|
<p>Prisma Client is generated into <code>server/generated/prisma</code>.</p>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
</div>
|
|
98
|
+
</li>
|
|
99
|
+
</ul>
|
|
100
100
|
</section>
|
|
101
101
|
{{/if}}
|
|
102
102
|
</main>
|
|
@@ -105,53 +105,48 @@ function formatCreatedAt(value: string): string {
|
|
|
105
105
|
<style>
|
|
106
106
|
body {
|
|
107
107
|
margin: 0;
|
|
108
|
-
font-family:
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
sans-serif;
|
|
112
|
-
background: #f7f8fb;
|
|
113
|
-
color: #0f172a;
|
|
108
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
109
|
+
background: #fff;
|
|
110
|
+
color: #111;
|
|
114
111
|
}
|
|
115
112
|
|
|
116
113
|
.shell {
|
|
117
|
-
width:
|
|
114
|
+
max-width: 40rem;
|
|
118
115
|
margin: 0 auto;
|
|
119
|
-
padding:
|
|
116
|
+
padding: 3rem 1.5rem;
|
|
120
117
|
}
|
|
121
118
|
|
|
122
119
|
.hero {
|
|
123
|
-
margin-bottom:
|
|
120
|
+
margin-bottom: 1.5rem;
|
|
124
121
|
}
|
|
125
122
|
|
|
126
123
|
.eyebrow {
|
|
127
|
-
margin: 0 0 0.
|
|
128
|
-
color: #
|
|
129
|
-
font-size: 0.
|
|
130
|
-
font-weight:
|
|
131
|
-
letter-spacing: 0.
|
|
124
|
+
margin: 0 0 0.5rem;
|
|
125
|
+
color: #666;
|
|
126
|
+
font-size: 0.75rem;
|
|
127
|
+
font-weight: 600;
|
|
128
|
+
letter-spacing: 0.06em;
|
|
132
129
|
text-transform: uppercase;
|
|
133
130
|
}
|
|
134
131
|
|
|
135
132
|
h1 {
|
|
136
133
|
margin: 0;
|
|
137
|
-
|
|
138
|
-
font-
|
|
139
|
-
line-height:
|
|
134
|
+
font-size: 1.25rem;
|
|
135
|
+
font-weight: 600;
|
|
136
|
+
line-height: 1.4;
|
|
140
137
|
}
|
|
141
138
|
|
|
142
139
|
.lede {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
140
|
+
margin: 0.5rem 0 0;
|
|
141
|
+
color: #666;
|
|
142
|
+
font-size: 0.875rem;
|
|
143
|
+
line-height: 1.6;
|
|
147
144
|
}
|
|
148
145
|
|
|
149
146
|
.panel {
|
|
150
|
-
|
|
151
|
-
border:
|
|
152
|
-
|
|
153
|
-
background: #ffffff;
|
|
154
|
-
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.06);
|
|
147
|
+
border: 1px solid #e5e5e5;
|
|
148
|
+
border-radius: 0.5rem;
|
|
149
|
+
padding: 1rem;
|
|
155
150
|
}
|
|
156
151
|
|
|
157
152
|
.panel-header {
|
|
@@ -159,22 +154,25 @@ h1 {
|
|
|
159
154
|
align-items: center;
|
|
160
155
|
justify-content: space-between;
|
|
161
156
|
gap: 1rem;
|
|
162
|
-
margin-bottom:
|
|
157
|
+
margin-bottom: 0.75rem;
|
|
163
158
|
}
|
|
164
159
|
|
|
165
160
|
h2 {
|
|
166
161
|
margin: 0;
|
|
167
|
-
font-size:
|
|
162
|
+
font-size: 0.875rem;
|
|
163
|
+
font-weight: 600;
|
|
168
164
|
}
|
|
169
165
|
|
|
170
166
|
.panel-header span,
|
|
171
167
|
.empty,
|
|
172
168
|
time {
|
|
173
|
-
color: #
|
|
169
|
+
color: #888;
|
|
170
|
+
font-size: 0.8rem;
|
|
174
171
|
}
|
|
175
172
|
|
|
176
173
|
.panel p {
|
|
177
|
-
color: #
|
|
174
|
+
color: #666;
|
|
175
|
+
font-size: 0.8rem;
|
|
178
176
|
}
|
|
179
177
|
|
|
180
178
|
.users {
|
|
@@ -182,7 +180,7 @@ time {
|
|
|
182
180
|
margin: 0;
|
|
183
181
|
padding: 0;
|
|
184
182
|
display: grid;
|
|
185
|
-
gap: 0.
|
|
183
|
+
gap: 0.5rem;
|
|
186
184
|
}
|
|
187
185
|
|
|
188
186
|
.users li {
|
|
@@ -190,37 +188,29 @@ time {
|
|
|
190
188
|
align-items: center;
|
|
191
189
|
justify-content: space-between;
|
|
192
190
|
gap: 1rem;
|
|
193
|
-
padding:
|
|
194
|
-
border
|
|
195
|
-
|
|
196
|
-
border: 1px solid #dbe2ea;
|
|
191
|
+
padding: 0.625rem 0.75rem;
|
|
192
|
+
border: 1px solid #eee;
|
|
193
|
+
border-radius: 0.375rem;
|
|
197
194
|
}
|
|
198
195
|
|
|
199
196
|
.users p {
|
|
200
|
-
margin: 0.
|
|
197
|
+
margin: 0.125rem 0 0;
|
|
201
198
|
}
|
|
202
199
|
|
|
203
200
|
time {
|
|
204
|
-
font-size: 0.
|
|
201
|
+
font-size: 0.75rem;
|
|
205
202
|
white-space: nowrap;
|
|
206
203
|
}
|
|
207
204
|
|
|
208
205
|
code {
|
|
209
|
-
padding: 0.
|
|
210
|
-
border-radius: 0.
|
|
211
|
-
background: #
|
|
212
|
-
font-family:
|
|
213
|
-
|
|
214
|
-
Consolas,
|
|
215
|
-
monospace;
|
|
216
|
-
font-size: 0.95em;
|
|
206
|
+
padding: 0.125rem 0.25rem;
|
|
207
|
+
border-radius: 0.25rem;
|
|
208
|
+
background: #f5f5f5;
|
|
209
|
+
font-family: SFMono-Regular, Consolas, monospace;
|
|
210
|
+
font-size: 0.875em;
|
|
217
211
|
}
|
|
218
212
|
|
|
219
213
|
@media (max-width: 640px) {
|
|
220
|
-
.shell {
|
|
221
|
-
padding-top: 3rem;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
214
|
.users li,
|
|
225
215
|
.panel-header {
|
|
226
216
|
flex-direction: column;
|