+2
-8
README.md
+2
-8
README.md
···
85
85
86
86
#### Install the root certificate on your machine
87
87
88
-
First, get your Caddy container ID:
89
-
90
-
```bash
91
-
docker ps
92
-
```
93
-
94
-
Then copy the cert out:
88
+
Copy the cert out:
95
89
96
90
```bash
97
-
docker cp <caddy_container_id>:/data/pki/authorities/grain/root.crt ./grain-root.crt
91
+
docker cp caddy:/data/pki/authorities/grain/root.crt ./grain-root.crt
98
92
```
99
93
100
94
Once you have grain-root.crt, install it:
+1
-1
deno.json
+1
-1
deno.json
···
2
2
"imports": {
3
3
"$lexicon/": "./__generated__/",
4
4
"@atproto/syntax": "npm:@atproto/syntax@^0.4.0",
5
-
"@bigmoves/bff": "jsr:@bigmoves/bff@0.3.0-beta.30",
5
+
"@bigmoves/bff": "jsr:@bigmoves/bff@0.3.0-beta.31",
6
6
"@std/http": "jsr:@std/http@^1.0.17",
7
7
"@std/path": "jsr:@std/path@^1.0.9",
8
8
"@tailwindcss/cli": "npm:@tailwindcss/cli@^4.1.4",
+36
-377
deno.lock
+36
-377
deno.lock
···
1
1
{
2
2
"version": "5",
3
3
"specifiers": {
4
-
"jsr:@deno/gfm@0.10": "0.10.0",
5
-
"jsr:@denosaurs/emoji@0.3": "0.3.1",
6
-
"jsr:@std/assert@^1.0.12": "1.0.13",
4
+
"jsr:@bigmoves/atproto-oauth-client@0.2": "0.2.0",
5
+
"jsr:@bigmoves/bff@0.3.0-beta.31": "0.3.0-beta.31",
7
6
"jsr:@std/assert@^1.0.13": "1.0.13",
8
-
"jsr:@std/async@^1.0.12": "1.0.12",
9
-
"jsr:@std/cache@0.2": "0.2.0",
10
-
"jsr:@std/cli@^1.0.16": "1.0.18",
11
-
"jsr:@std/cli@^1.0.18": "1.0.18",
12
-
"jsr:@std/data-structures@^1.0.6": "1.0.7",
7
+
"jsr:@std/cli@^1.0.18": "1.0.19",
13
8
"jsr:@std/encoding@^1.0.10": "1.0.10",
14
9
"jsr:@std/fmt@^1.0.8": "1.0.8",
15
-
"jsr:@std/fs@^1.0.16": "1.0.17",
16
10
"jsr:@std/html@^1.0.4": "1.0.4",
17
11
"jsr:@std/http@^1.0.13": "1.0.17",
18
12
"jsr:@std/http@^1.0.17": "1.0.17",
···
23
17
"jsr:@std/path@^1.0.9": "1.1.0",
24
18
"jsr:@std/path@^1.1.0": "1.1.0",
25
19
"jsr:@std/streams@^1.0.9": "1.0.9",
26
-
"jsr:@std/testing@^1.0.11": "1.0.11",
27
20
"npm:@atproto-labs/handle-resolver-node@~0.1.14": "0.1.15",
28
21
"npm:@atproto-labs/simple-store@~0.1.2": "0.1.2",
29
22
"npm:@atproto/api@~0.15.7": "0.15.7",
···
37
30
"npm:@atproto/syntax@0.4": "0.4.0",
38
31
"npm:@atproto/xrpc-server@*": "0.7.18",
39
32
"npm:@tailwindcss/cli@*": "4.1.7",
40
-
"npm:@tailwindcss/cli@^4.0.12": "4.1.7",
41
-
"npm:@tailwindcss/cli@^4.1.3": "4.1.7",
42
33
"npm:@tailwindcss/cli@^4.1.4": "4.1.7",
43
34
"npm:@types/node@*": "22.15.15",
44
35
"npm:clsx@^2.1.1": "2.1.1",
45
36
"npm:date-fns@^4.1.0": "4.1.0",
46
-
"npm:github-slugger@2": "2.0.0",
47
-
"npm:he@^1.2.0": "1.2.0",
48
37
"npm:jose@5.9.6": "5.9.6",
49
-
"npm:katex@0.16": "0.16.22",
50
-
"npm:marked-alert@2": "2.1.2_marked@12.0.2",
51
-
"npm:marked-footnote@^1.2.0": "1.2.4_marked@12.0.2",
52
-
"npm:marked-gfm-heading-id@^3.1.0": "3.2.0_marked@12.0.2",
53
-
"npm:marked@12": "12.0.2",
54
38
"npm:multiformats@*": "13.3.4",
55
39
"npm:multiformats@^13.3.2": "13.3.4",
56
40
"npm:popmotion@^11.0.5": "11.0.5",
57
41
"npm:preact-render-to-string@^6.5.13": "6.5.13_preact@10.26.6",
58
42
"npm:preact@^10.26.5": "10.26.6",
59
-
"npm:prismjs@^1.29.0": "1.30.0",
60
-
"npm:sanitize-html@^2.13.0": "2.17.0",
61
-
"npm:sharp@~0.34.1": "0.34.1",
62
43
"npm:tailwind-merge@^3.2.0": "3.3.0",
63
-
"npm:tailwindcss@^4.0.12": "4.1.7",
64
-
"npm:tailwindcss@^4.1.3": "4.1.7",
65
44
"npm:tailwindcss@^4.1.4": "4.1.7",
66
45
"npm:typed-htmx@~0.3.1": "0.3.1"
67
46
},
68
47
"jsr": {
48
+
"@bigmoves/atproto-oauth-client@0.2.0": {
49
+
"integrity": "5c3ca124dd52eff51dace83790779ebe48c4b41559b799e16c8750bd415f2124",
50
+
"dependencies": [
51
+
"npm:@atproto-labs/handle-resolver-node",
52
+
"npm:@atproto-labs/simple-store",
53
+
"npm:@atproto/jwk",
54
+
"npm:@atproto/oauth-client",
55
+
"npm:@atproto/oauth-types",
56
+
"npm:jose"
57
+
]
58
+
},
69
59
"@bigmoves/bff@0.3.0-beta.21": {
70
60
"integrity": "1c83ac3abca2a9671b1ddadcdb38ed628704c5a14765ec20c54a4d05c46757dd",
71
61
"dependencies": [
···
74
64
"npm:tailwind-merge"
75
65
]
76
66
},
77
-
"@deno/gfm@0.10.0": {
78
-
"integrity": "51708205e3559a4aeb6afb29d07c5bfafe7941f91bb360351ef6621de9a39527",
67
+
"@bigmoves/bff@0.3.0-beta.31": {
68
+
"integrity": "2f0ec89088ff8099abeaec25af5a5998894c1dbdbed66cc6d3b0a9b2500b18e0",
79
69
"dependencies": [
80
-
"jsr:@denosaurs/emoji",
81
-
"npm:github-slugger",
82
-
"npm:he",
83
-
"npm:katex",
84
-
"npm:marked",
85
-
"npm:marked-alert",
86
-
"npm:marked-footnote",
87
-
"npm:marked-gfm-heading-id",
88
-
"npm:prismjs",
89
-
"npm:sanitize-html"
70
+
"jsr:@bigmoves/atproto-oauth-client",
71
+
"jsr:@std/assert",
72
+
"jsr:@std/fmt",
73
+
"jsr:@std/http@^1.0.13",
74
+
"jsr:@std/path@^1.0.8",
75
+
"npm:@atproto/api",
76
+
"npm:@atproto/common",
77
+
"npm:@atproto/identity",
78
+
"npm:@atproto/lexicon@~0.4.11",
79
+
"npm:@atproto/oauth-client",
80
+
"npm:@atproto/syntax",
81
+
"npm:clsx",
82
+
"npm:multiformats@^13.3.2",
83
+
"npm:preact",
84
+
"npm:preact-render-to-string",
85
+
"npm:tailwind-merge"
90
86
]
91
-
},
92
-
"@denosaurs/emoji@0.3.1": {
93
-
"integrity": "b0aed5f55dec99e83da7c9637fe0a36d1d6252b7c99deaaa3fc5dea3fcf3da8b"
94
87
},
95
88
"@std/assert@1.0.13": {
96
89
"integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29",
···
98
91
"jsr:@std/internal"
99
92
]
100
93
},
101
-
"@std/async@1.0.12": {
102
-
"integrity": "d1bfcec459e8012846fe4e38dfc4241ab23240ecda3d8d6dfcf6d81a632e803d"
103
-
},
104
-
"@std/cache@0.2.0": {
105
-
"integrity": "63a2ccd5a9e7c03e430f7d34dfcfd0d0cfc90731a1eaf8208f4c66e418fc3035"
106
-
},
107
-
"@std/cli@1.0.18": {
108
-
"integrity": "33846eab6a7cac52156cc105a798451df06965693606e4668adfe0436a155fd7"
109
-
},
110
-
"@std/data-structures@1.0.7": {
111
-
"integrity": "16932d2c8d281f65eaaa2209af2473209881e33b1ced54cd1b015e7b4cdbb0d2"
94
+
"@std/cli@1.0.19": {
95
+
"integrity": "b3601a54891f89f3f738023af11960c4e6f7a45dc76cde39a6861124cba79e88"
112
96
},
113
97
"@std/encoding@1.0.10": {
114
98
"integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1"
···
116
100
"@std/fmt@1.0.8": {
117
101
"integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7"
118
102
},
119
-
"@std/fs@1.0.17": {
120
-
"integrity": "1c00c632677c1158988ef7a004cb16137f870aafdb8163b9dce86ec652f3952b",
121
-
"dependencies": [
122
-
"jsr:@std/path@^1.0.9"
123
-
]
124
-
},
125
103
"@std/html@1.0.4": {
126
104
"integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e"
127
105
},
128
106
"@std/http@1.0.17": {
129
107
"integrity": "98aec8ab4080d95c21f731e3008f69c29c5012d12f1b4e553f85935db601569f",
130
108
"dependencies": [
131
-
"jsr:@std/cli@^1.0.18",
109
+
"jsr:@std/cli",
132
110
"jsr:@std/encoding",
133
111
"jsr:@std/fmt",
134
112
"jsr:@std/html",
···
152
130
},
153
131
"@std/streams@1.0.9": {
154
132
"integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035"
155
-
},
156
-
"@std/testing@1.0.11": {
157
-
"integrity": "12b3db12d34f0f385a26248933bde766c0f8c5ad8b6ab34d4d38f528ab852f48",
158
-
"dependencies": [
159
-
"jsr:@std/assert@^1.0.12",
160
-
"jsr:@std/async",
161
-
"jsr:@std/data-structures",
162
-
"jsr:@std/fs",
163
-
"jsr:@std/internal",
164
-
"jsr:@std/path@^1.0.8"
165
-
]
166
133
}
167
134
},
168
135
"npm": {
···
419
386
"tslib@2.8.1"
420
387
]
421
388
},
422
-
"@img/sharp-darwin-arm64@0.34.1": {
423
-
"integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==",
424
-
"optionalDependencies": [
425
-
"@img/sharp-libvips-darwin-arm64"
426
-
],
427
-
"os": ["darwin"],
428
-
"cpu": ["arm64"]
429
-
},
430
-
"@img/sharp-darwin-x64@0.34.1": {
431
-
"integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==",
432
-
"optionalDependencies": [
433
-
"@img/sharp-libvips-darwin-x64"
434
-
],
435
-
"os": ["darwin"],
436
-
"cpu": ["x64"]
437
-
},
438
-
"@img/sharp-libvips-darwin-arm64@1.1.0": {
439
-
"integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
440
-
"os": ["darwin"],
441
-
"cpu": ["arm64"]
442
-
},
443
-
"@img/sharp-libvips-darwin-x64@1.1.0": {
444
-
"integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
445
-
"os": ["darwin"],
446
-
"cpu": ["x64"]
447
-
},
448
-
"@img/sharp-libvips-linux-arm64@1.1.0": {
449
-
"integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
450
-
"os": ["linux"],
451
-
"cpu": ["arm64"]
452
-
},
453
-
"@img/sharp-libvips-linux-arm@1.1.0": {
454
-
"integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
455
-
"os": ["linux"],
456
-
"cpu": ["arm"]
457
-
},
458
-
"@img/sharp-libvips-linux-ppc64@1.1.0": {
459
-
"integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
460
-
"os": ["linux"],
461
-
"cpu": ["ppc64"]
462
-
},
463
-
"@img/sharp-libvips-linux-s390x@1.1.0": {
464
-
"integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
465
-
"os": ["linux"],
466
-
"cpu": ["s390x"]
467
-
},
468
-
"@img/sharp-libvips-linux-x64@1.1.0": {
469
-
"integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
470
-
"os": ["linux"],
471
-
"cpu": ["x64"]
472
-
},
473
-
"@img/sharp-libvips-linuxmusl-arm64@1.1.0": {
474
-
"integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
475
-
"os": ["linux"],
476
-
"cpu": ["arm64"]
477
-
},
478
-
"@img/sharp-libvips-linuxmusl-x64@1.1.0": {
479
-
"integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
480
-
"os": ["linux"],
481
-
"cpu": ["x64"]
482
-
},
483
-
"@img/sharp-linux-arm64@0.34.1": {
484
-
"integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==",
485
-
"optionalDependencies": [
486
-
"@img/sharp-libvips-linux-arm64"
487
-
],
488
-
"os": ["linux"],
489
-
"cpu": ["arm64"]
490
-
},
491
-
"@img/sharp-linux-arm@0.34.1": {
492
-
"integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==",
493
-
"optionalDependencies": [
494
-
"@img/sharp-libvips-linux-arm"
495
-
],
496
-
"os": ["linux"],
497
-
"cpu": ["arm"]
498
-
},
499
-
"@img/sharp-linux-s390x@0.34.1": {
500
-
"integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==",
501
-
"optionalDependencies": [
502
-
"@img/sharp-libvips-linux-s390x"
503
-
],
504
-
"os": ["linux"],
505
-
"cpu": ["s390x"]
506
-
},
507
-
"@img/sharp-linux-x64@0.34.1": {
508
-
"integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==",
509
-
"optionalDependencies": [
510
-
"@img/sharp-libvips-linux-x64"
511
-
],
512
-
"os": ["linux"],
513
-
"cpu": ["x64"]
514
-
},
515
-
"@img/sharp-linuxmusl-arm64@0.34.1": {
516
-
"integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==",
517
-
"optionalDependencies": [
518
-
"@img/sharp-libvips-linuxmusl-arm64"
519
-
],
520
-
"os": ["linux"],
521
-
"cpu": ["arm64"]
522
-
},
523
-
"@img/sharp-linuxmusl-x64@0.34.1": {
524
-
"integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==",
525
-
"optionalDependencies": [
526
-
"@img/sharp-libvips-linuxmusl-x64"
527
-
],
528
-
"os": ["linux"],
529
-
"cpu": ["x64"]
530
-
},
531
-
"@img/sharp-wasm32@0.34.1": {
532
-
"integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==",
533
-
"dependencies": [
534
-
"@emnapi/runtime"
535
-
],
536
-
"cpu": ["wasm32"]
537
-
},
538
-
"@img/sharp-win32-ia32@0.34.1": {
539
-
"integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==",
540
-
"os": ["win32"],
541
-
"cpu": ["ia32"]
542
-
},
543
-
"@img/sharp-win32-x64@0.34.1": {
544
-
"integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==",
545
-
"os": ["win32"],
546
-
"cpu": ["x64"]
547
-
},
548
389
"@ipld/dag-cbor@7.0.3": {
549
390
"integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==",
550
391
"dependencies": [
···
919
760
"clsx@2.1.1": {
920
761
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
921
762
},
922
-
"color-convert@2.0.1": {
923
-
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
924
-
"dependencies": [
925
-
"color-name"
926
-
]
927
-
},
928
-
"color-name@1.1.4": {
929
-
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
930
-
},
931
-
"color-string@1.9.1": {
932
-
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
933
-
"dependencies": [
934
-
"color-name",
935
-
"simple-swizzle"
936
-
]
937
-
},
938
-
"color@4.2.3": {
939
-
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
940
-
"dependencies": [
941
-
"color-convert",
942
-
"color-string"
943
-
]
944
-
},
945
-
"commander@8.3.0": {
946
-
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
947
-
},
948
763
"content-disposition@0.5.4": {
949
764
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
950
765
"dependencies": [
···
969
784
"ms@2.0.0"
970
785
]
971
786
},
972
-
"deepmerge@4.3.1": {
973
-
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
974
-
},
975
787
"depd@2.0.0": {
976
788
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
977
789
},
···
985
797
"detect-libc@2.0.4": {
986
798
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="
987
799
},
988
-
"dom-serializer@2.0.0": {
989
-
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
990
-
"dependencies": [
991
-
"domelementtype",
992
-
"domhandler",
993
-
"entities"
994
-
]
995
-
},
996
-
"domelementtype@2.3.0": {
997
-
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
998
-
},
999
-
"domhandler@5.0.3": {
1000
-
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
1001
-
"dependencies": [
1002
-
"domelementtype"
1003
-
]
1004
-
},
1005
-
"domutils@3.2.2": {
1006
-
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
1007
-
"dependencies": [
1008
-
"dom-serializer",
1009
-
"domelementtype",
1010
-
"domhandler"
1011
-
]
1012
-
},
1013
800
"dunder-proto@1.0.1": {
1014
801
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1015
802
"dependencies": [
···
1034
821
"tapable"
1035
822
]
1036
823
},
1037
-
"entities@4.5.0": {
1038
-
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
1039
-
},
1040
824
"es-define-property@1.0.1": {
1041
825
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
1042
826
},
···
1051
835
},
1052
836
"escape-html@1.0.3": {
1053
837
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1054
-
},
1055
-
"escape-string-regexp@4.0.0": {
1056
-
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
1057
838
},
1058
839
"etag@1.8.1": {
1059
840
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
···
1158
939
"es-object-atoms"
1159
940
]
1160
941
},
1161
-
"github-slugger@2.0.0": {
1162
-
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
1163
-
},
1164
942
"gopd@1.2.0": {
1165
943
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
1166
944
},
···
1179
957
"function-bind"
1180
958
]
1181
959
},
1182
-
"he@1.2.0": {
1183
-
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
1184
-
"bin": true
1185
-
},
1186
960
"hey-listen@1.0.8": {
1187
961
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
1188
962
},
1189
-
"htmlparser2@8.0.2": {
1190
-
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
1191
-
"dependencies": [
1192
-
"domelementtype",
1193
-
"domhandler",
1194
-
"domutils",
1195
-
"entities"
1196
-
]
1197
-
},
1198
963
"http-errors@2.0.0": {
1199
964
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1200
965
"dependencies": [
···
1223
988
"ipaddr.js@2.2.0": {
1224
989
"integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="
1225
990
},
1226
-
"is-arrayish@0.3.2": {
1227
-
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
1228
-
},
1229
991
"is-extglob@2.1.1": {
1230
992
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
1231
993
},
···
1238
1000
"is-number@7.0.0": {
1239
1001
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
1240
1002
},
1241
-
"is-plain-object@5.0.0": {
1242
-
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
1243
-
},
1244
1003
"iso-datestring-validator@2.2.2": {
1245
1004
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
1246
1005
},
···
1250
1009
},
1251
1010
"jose@5.9.6": {
1252
1011
"integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="
1253
-
},
1254
-
"katex@0.16.22": {
1255
-
"integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==",
1256
-
"dependencies": [
1257
-
"commander"
1258
-
],
1259
-
"bin": true
1260
1012
},
1261
1013
"lightningcss-darwin-arm64@1.30.1": {
1262
1014
"integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
···
1335
1087
"@jridgewell/sourcemap-codec"
1336
1088
]
1337
1089
},
1338
-
"marked-alert@2.1.2_marked@12.0.2": {
1339
-
"integrity": "sha512-EFNRZ08d8L/iEIPLTlQMDjvwIsj03gxWCczYTht6DCiHJIZhMk4NK5gtPY9UqAYb09eV5VGT+jD4lp396E0I+w==",
1340
-
"dependencies": [
1341
-
"marked"
1342
-
]
1343
-
},
1344
-
"marked-footnote@1.2.4_marked@12.0.2": {
1345
-
"integrity": "sha512-DB2Kl+wFh6YwZd70qABMY6WUkG1UuyqoNTFoDfGyG79Pz24neYtLBkB+45a7o72V7gkfvbC3CGzIYFobxfMT1Q==",
1346
-
"dependencies": [
1347
-
"marked"
1348
-
]
1349
-
},
1350
-
"marked-gfm-heading-id@3.2.0_marked@12.0.2": {
1351
-
"integrity": "sha512-Xfxpr5lXLDLY10XqzSCA9l2dDaiabQUgtYM9hw8yunyVsB/xYBRpiic6BOiY/EAJw1ik1eWr1ET1HKOAPZBhXg==",
1352
-
"dependencies": [
1353
-
"github-slugger",
1354
-
"marked"
1355
-
]
1356
-
},
1357
-
"marked@12.0.2": {
1358
-
"integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
1359
-
"bin": true
1360
-
},
1361
1090
"math-intrinsics@1.1.0": {
1362
1091
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
1363
1092
},
···
1418
1147
"multiformats@9.9.0": {
1419
1148
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
1420
1149
},
1421
-
"nanoid@3.3.11": {
1422
-
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1423
-
"bin": true
1424
-
},
1425
1150
"negotiator@0.6.3": {
1426
1151
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1427
1152
},
···
1446
1171
"dependencies": [
1447
1172
"ee-first"
1448
1173
]
1449
-
},
1450
-
"parse-srcset@1.0.2": {
1451
-
"integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="
1452
1174
},
1453
1175
"parseurl@1.3.3": {
1454
1176
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
···
1498
1220
"tslib@2.4.0"
1499
1221
]
1500
1222
},
1501
-
"postcss@8.5.3": {
1502
-
"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
1503
-
"dependencies": [
1504
-
"nanoid",
1505
-
"picocolors",
1506
-
"source-map-js"
1507
-
]
1508
-
},
1509
1223
"preact-render-to-string@6.5.13_preact@10.26.6": {
1510
1224
"integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==",
1511
1225
"dependencies": [
···
1514
1228
},
1515
1229
"preact@10.26.6": {
1516
1230
"integrity": "sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g=="
1517
-
},
1518
-
"prismjs@1.30.0": {
1519
-
"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="
1520
1231
},
1521
1232
"process-warning@3.0.0": {
1522
1233
"integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
···
1586
1297
"safer-buffer@2.1.2": {
1587
1298
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1588
1299
},
1589
-
"sanitize-html@2.17.0": {
1590
-
"integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==",
1591
-
"dependencies": [
1592
-
"deepmerge",
1593
-
"escape-string-regexp",
1594
-
"htmlparser2",
1595
-
"is-plain-object",
1596
-
"parse-srcset",
1597
-
"postcss"
1598
-
]
1599
-
},
1600
-
"semver@7.7.2": {
1601
-
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
1602
-
"bin": true
1603
-
},
1604
1300
"send@0.19.0": {
1605
1301
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
1606
1302
"dependencies": [
···
1631
1327
"setprototypeof@1.2.0": {
1632
1328
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1633
1329
},
1634
-
"sharp@0.34.1": {
1635
-
"integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==",
1636
-
"dependencies": [
1637
-
"color",
1638
-
"detect-libc@2.0.4",
1639
-
"semver"
1640
-
],
1641
-
"optionalDependencies": [
1642
-
"@img/sharp-darwin-arm64",
1643
-
"@img/sharp-darwin-x64",
1644
-
"@img/sharp-libvips-darwin-arm64",
1645
-
"@img/sharp-libvips-darwin-x64",
1646
-
"@img/sharp-libvips-linux-arm",
1647
-
"@img/sharp-libvips-linux-arm64",
1648
-
"@img/sharp-libvips-linux-ppc64",
1649
-
"@img/sharp-libvips-linux-s390x",
1650
-
"@img/sharp-libvips-linux-x64",
1651
-
"@img/sharp-libvips-linuxmusl-arm64",
1652
-
"@img/sharp-libvips-linuxmusl-x64",
1653
-
"@img/sharp-linux-arm",
1654
-
"@img/sharp-linux-arm64",
1655
-
"@img/sharp-linux-s390x",
1656
-
"@img/sharp-linux-x64",
1657
-
"@img/sharp-linuxmusl-arm64",
1658
-
"@img/sharp-linuxmusl-x64",
1659
-
"@img/sharp-wasm32",
1660
-
"@img/sharp-win32-ia32",
1661
-
"@img/sharp-win32-x64"
1662
-
],
1663
-
"scripts": true
1664
-
},
1665
1330
"side-channel-list@1.0.0": {
1666
1331
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
1667
1332
"dependencies": [
···
1696
1361
"side-channel-list",
1697
1362
"side-channel-map",
1698
1363
"side-channel-weakmap"
1699
-
]
1700
-
},
1701
-
"simple-swizzle@0.2.2": {
1702
-
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
1703
-
"dependencies": [
1704
-
"is-arrayish"
1705
1364
]
1706
1365
},
1707
1366
"sonic-boom@3.8.1": {
···
1826
1485
},
1827
1486
"workspace": {
1828
1487
"dependencies": [
1829
-
"jsr:@bigmoves/bff@0.3.0-beta.30",
1488
+
"jsr:@bigmoves/bff@0.3.0-beta.31",
1830
1489
"jsr:@std/http@^1.0.17",
1831
1490
"jsr:@std/path@^1.0.9",
1832
1491
"npm:@atproto/syntax@0.4",
+1
fly.toml
+1
fly.toml
+7
local-infra/pds.env
+7
local-infra/pds.env
···
14
14
PDS_EMAIL_FROM_ADDRESS=admin@grain.social
15
15
PDS_SERVICE_NAME=Grain Social
16
16
PDS_INVITE_REQUIRED=0
17
+
PDS_OAUTH_PROVIDER_NAME=Grain Social
18
+
PDS_HOME_URL=http://localhost:8080
19
+
PDS_LIGHT_COLOR=#fff
20
+
PDS_DARK_COLOR=#09090b
21
+
PDS_PRIMARY_COLOR=#00a6f4
22
+
PDS_PRIMARY_COLOR_CONTRAST=#fff
23
+
PDS_PRIMARY_COLOR_HUE=#fff
+8
services/pds/fly.toml
+8
services/pds/fly.toml
···
21
21
PDS_HOSTNAME = 'ansel.grainsocial.network'
22
22
PDS_REPORT_SERVICE_DID = 'did:plc:ar7c4by46qjdydhdevvrndac'
23
23
PDS_REPORT_SERVICE_URL = 'https://mod.bsky.app'
24
+
PDS_SERVICE_HANDLE_DOMAINS = '.grain.social'
25
+
PDS_SERVICE_NAME = 'Grain Social'
26
+
PDS_HOME_URL = 'https://grain.social'
27
+
PDS_LIGHT_COLOR = '#fff'
28
+
PDS_DARK_COLOR = '#09090b'
29
+
PDS_PRIMARY_COLOR = '#00a6f4'
30
+
PDS_PRIMARY_COLOR_CONTRAST = '#fff'
31
+
PDS_PRIMARY_COLOR_HUE = '#fff'
24
32
25
33
[[mounts]]
26
34
source = 'pdsdata'
+47
src/components/CreateAccountDialog.tsx
+47
src/components/CreateAccountDialog.tsx
···
1
+
import { OAUTH_ROUTES } from "@bigmoves/bff";
2
+
import { Button, Dialog } from "@bigmoves/bff/components";
3
+
import { PDS_HOST_URL } from "../env.ts";
4
+
5
+
export function CreateAccountDialog({}: Readonly<{}>) {
6
+
return (
7
+
<Dialog id="photo-alt-dialog" class="z-100">
8
+
<Dialog.Content class="dark:bg-zinc-950 relative">
9
+
<Dialog.X class="fill-zinc-950 dark:fill-zinc-50" />
10
+
<Dialog.Title>Choose your handle</Dialog.Title>
11
+
<div className="flex flex-col space-y-4 my-10">
12
+
<form hx-post={OAUTH_ROUTES.signup} hx-swap="none" class="w-full">
13
+
<input
14
+
type="hidden"
15
+
name="pdsHostUrl"
16
+
value="https://bsky.social"
17
+
/>
18
+
<Button
19
+
type="submit"
20
+
variant="primary"
21
+
class="w-full"
22
+
>
23
+
user.bsky.social
24
+
</Button>
25
+
</form>
26
+
<form hx-post={OAUTH_ROUTES.signup} hx-swap="none" class="w-full">
27
+
<input
28
+
type="hidden"
29
+
name="pdsHostUrl"
30
+
value={PDS_HOST_URL}
31
+
/>
32
+
<Button
33
+
type="submit"
34
+
variant="primary"
35
+
class="w-full"
36
+
>
37
+
user.grain.social
38
+
</Button>
39
+
</form>
40
+
<p>
41
+
Note: <b>.grain.social</b> handles are currently invite only.
42
+
</p>
43
+
</div>
44
+
</Dialog.Content>
45
+
</Dialog>
46
+
);
47
+
}
+9
-5
src/components/Layout.tsx
+9
-5
src/components/Layout.tsx
···
111
111
)
112
112
: (
113
113
<div class="flex items-center space-x-4">
114
-
<form hx-post="/signup" hx-swap="none" class="inline">
115
-
<Button variant="secondary" type="submit">
116
-
Create account
117
-
</Button>
118
-
</form>
114
+
<Button
115
+
variant="secondary"
116
+
hx-get={`/dialogs/create-account`}
117
+
hx-trigger="click"
118
+
hx-target="body"
119
+
hx-swap="afterbegin"
120
+
>
121
+
Create account
122
+
</Button>
119
123
<Button variant="secondary" asChild>
120
124
<a href="/login">
121
125
Sign in
+9
-1
src/components/LoginPage.tsx
+9
-1
src/components/LoginPage.tsx
···
8
8
class="flex justify-center items-center w-full h-[calc(100vh-56px)] relative"
9
9
style="background-image: url('https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:bcgltzqazw5tb6k2g3ttenbj/bafkreiewhwu3ro5dv7omedphb62db4koa7qtvyzfhiiypg3ru4tvuxkrjy@jpeg'); background-size: cover; background-position: center;"
10
10
>
11
-
<Login hx-target="#login" error={error} errorClass="text-white" />
11
+
<Login
12
+
hx-target="#login"
13
+
error={error}
14
+
errorClass="text-white"
15
+
inputPlaceholder="Enter your handle or pds host"
16
+
submitText="Login"
17
+
infoText="e.g., user.bsky.social, user.grain.social, example.com, https://pds.example.com"
18
+
infoClass="text-white text-sm! bg-zinc-950/70 p-4 font-mono"
19
+
/>
12
20
<div class="absolute bottom-2 right-2 text-white text-sm">
13
21
Photo by{" "}
14
22
<a
+1
src/main.tsx
+1
src/main.tsx
···
57
57
route("/profile/:handle/gallery/:rkey", galleryHandler),
58
58
route("/upload", uploadHandler),
59
59
route("/onboard", onboardHandler),
60
+
route("/dialogs/create-account", dialogHandlers.createAccount),
60
61
route("/dialogs/gallery/new", dialogHandlers.createGallery),
61
62
route("/dialogs/gallery/:rkey", dialogHandlers.editGallery),
62
63
route("/dialogs/gallery/:rkey/sort", dialogHandlers.sortGallery),
+9
src/routes/dialogs.tsx
+9
src/routes/dialogs.tsx
···
6
6
import { BffContext, RouteHandler, WithBffMeta } from "@bigmoves/bff";
7
7
import { wrap } from "popmotion";
8
8
import { AvatarDialog } from "../components/AvatarDialog.tsx";
9
+
import { CreateAccountDialog } from "../components/CreateAccountDialog.tsx";
9
10
import { GalleryCreateEditDialog } from "../components/GalleryCreateEditDialog.tsx";
10
11
import { GallerySortDialog } from "../components/GallerySortDialog.tsx";
11
12
import { PhotoAltDialog } from "../components/PhotoAltDialog.tsx";
···
153
154
/>,
154
155
);
155
156
};
157
+
158
+
export const createAccount: RouteHandler = (
159
+
_req,
160
+
_params,
161
+
ctx: BffContext<State>,
162
+
) => {
163
+
return ctx.html(<CreateAccountDialog />);
164
+
};
+16
static/styles.css
+16
static/styles.css
···
285
285
.my-4 {
286
286
margin-block: calc(var(--spacing) * 4);
287
287
}
288
+
.my-10 {
289
+
margin-block: calc(var(--spacing) * 10);
290
+
}
288
291
.my-30 {
289
292
margin-block: calc(var(--spacing) * 30);
290
293
}
···
581
584
.bg-zinc-950 {
582
585
background-color: var(--color-zinc-950);
583
586
}
587
+
.bg-zinc-950\/70 {
588
+
background-color: color-mix(in srgb, oklch(14.1% 0.005 285.823) 70%, transparent);
589
+
@supports (color: color-mix(in lab, red, red)) {
590
+
background-color: color-mix(in oklab, var(--color-zinc-950) 70%, transparent);
591
+
}
592
+
}
584
593
.fill-zinc-950 {
585
594
fill: var(--color-zinc-950);
586
595
}
···
632
641
.font-\[\'Jersey_20\'\] {
633
642
font-family: 'Jersey 20';
634
643
}
644
+
.font-mono {
645
+
font-family: var(--font-mono);
646
+
}
635
647
.text-2xl {
636
648
font-size: var(--text-2xl);
637
649
line-height: var(--tw-leading, var(--text-2xl--line-height));
···
643
655
.text-sm {
644
656
font-size: var(--text-sm);
645
657
line-height: var(--tw-leading, var(--text-sm--line-height));
658
+
}
659
+
.text-sm\! {
660
+
font-size: var(--text-sm) !important;
661
+
line-height: var(--tw-leading, var(--text-sm--line-height)) !important;
646
662
}
647
663
.text-xl {
648
664
font-size: var(--text-xl);