create-croissant 0.1.57 → 0.1.59

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 (74) hide show
  1. package/package.json +2 -1
  2. package/template/apps/platform/package.json +1 -0
  3. package/template/apps/platform/src/components/access-denied.tsx +32 -0
  4. package/template/apps/platform/src/components/app-sidebar.tsx +30 -50
  5. package/template/apps/platform/src/lib/auth-utils.ts +17 -3
  6. package/template/apps/platform/src/routes/__root.tsx +1 -1
  7. package/template/apps/platform/src/routes/_auth/account.tsx +7 -9
  8. package/template/apps/platform/src/routes/_auth/dashboard.tsx +8 -7
  9. package/template/apps/platform/src/routes/_auth/examples/client-orpc-auth.tsx +6 -9
  10. package/template/apps/platform/src/routes/_auth/examples/ssr-orpc-auth.tsx +8 -9
  11. package/template/apps/platform/src/routes/_auth.tsx +2 -2
  12. package/template/apps/platform/src/routes/_public.tsx +2 -2
  13. package/template/apps/platform/src/routes/api/auth/$.ts +25 -15
  14. package/template/apps/platform/src/routes/api/rpc.$.ts +15 -8
  15. package/template/docker-compose.yml +1 -3
  16. package/template/package.json +1 -12
  17. package/template/packages/auth/package.json +2 -2
  18. package/template/packages/auth/src/lib/auth.ts +10 -0
  19. package/template/apps/desktop/.vscode/extensions.json +0 -3
  20. package/template/apps/desktop/README.md +0 -7
  21. package/template/apps/desktop/index.html +0 -14
  22. package/template/apps/desktop/package.json +0 -40
  23. package/template/apps/desktop/public/tauri.svg +0 -6
  24. package/template/apps/desktop/public/vite.svg +0 -1
  25. package/template/apps/desktop/src/App.css +0 -116
  26. package/template/apps/desktop/src/App.tsx +0 -51
  27. package/template/apps/desktop/src/assets/react.svg +0 -1
  28. package/template/apps/desktop/src/components/app-sidebar.tsx +0 -186
  29. package/template/apps/desktop/src/components/login-form.tsx +0 -160
  30. package/template/apps/desktop/src/components/search-form.tsx +0 -19
  31. package/template/apps/desktop/src/components/signup-form.tsx +0 -206
  32. package/template/apps/desktop/src/components/version-switcher.tsx +0 -54
  33. package/template/apps/desktop/src/env.d.ts +0 -1
  34. package/template/apps/desktop/src/lib/auth-client.ts +0 -5
  35. package/template/apps/desktop/src/lib/orpc.ts +0 -10
  36. package/template/apps/desktop/src/main.tsx +0 -12
  37. package/template/apps/desktop/src/routeTree.gen.ts +0 -240
  38. package/template/apps/desktop/src/router.tsx +0 -19
  39. package/template/apps/desktop/src/routes/__root.tsx +0 -52
  40. package/template/apps/desktop/src/routes/_auth/account.tsx +0 -275
  41. package/template/apps/desktop/src/routes/_auth/dashboard.tsx +0 -58
  42. package/template/apps/desktop/src/routes/_auth/examples/client-orpc-auth.tsx +0 -46
  43. package/template/apps/desktop/src/routes/_auth.tsx +0 -23
  44. package/template/apps/desktop/src/routes/_public/examples/client-orpc.tsx +0 -330
  45. package/template/apps/desktop/src/routes/_public/index.tsx +0 -66
  46. package/template/apps/desktop/src/routes/_public/login.tsx +0 -34
  47. package/template/apps/desktop/src/routes/_public/signup.tsx +0 -31
  48. package/template/apps/desktop/src/routes/_public.tsx +0 -23
  49. package/template/apps/desktop/src/vite-env.d.ts +0 -1
  50. package/template/apps/desktop/src-tauri/Cargo.toml +0 -25
  51. package/template/apps/desktop/src-tauri/build.rs +0 -3
  52. package/template/apps/desktop/src-tauri/capabilities/default.json +0 -7
  53. package/template/apps/desktop/src-tauri/icons/128x128.png +0 -0
  54. package/template/apps/desktop/src-tauri/icons/128x128@2x.png +0 -0
  55. package/template/apps/desktop/src-tauri/icons/32x32.png +0 -0
  56. package/template/apps/desktop/src-tauri/icons/Square107x107Logo.png +0 -0
  57. package/template/apps/desktop/src-tauri/icons/Square142x142Logo.png +0 -0
  58. package/template/apps/desktop/src-tauri/icons/Square150x150Logo.png +0 -0
  59. package/template/apps/desktop/src-tauri/icons/Square284x284Logo.png +0 -0
  60. package/template/apps/desktop/src-tauri/icons/Square30x30Logo.png +0 -0
  61. package/template/apps/desktop/src-tauri/icons/Square310x310Logo.png +0 -0
  62. package/template/apps/desktop/src-tauri/icons/Square44x44Logo.png +0 -0
  63. package/template/apps/desktop/src-tauri/icons/Square71x71Logo.png +0 -0
  64. package/template/apps/desktop/src-tauri/icons/Square89x89Logo.png +0 -0
  65. package/template/apps/desktop/src-tauri/icons/StoreLogo.png +0 -0
  66. package/template/apps/desktop/src-tauri/icons/icon.icns +0 -0
  67. package/template/apps/desktop/src-tauri/icons/icon.ico +0 -0
  68. package/template/apps/desktop/src-tauri/icons/icon.png +0 -0
  69. package/template/apps/desktop/src-tauri/src/lib.rs +0 -14
  70. package/template/apps/desktop/src-tauri/src/main.rs +0 -6
  71. package/template/apps/desktop/src-tauri/tauri.conf.json +0 -35
  72. package/template/apps/desktop/tsconfig.json +0 -17
  73. package/template/apps/desktop/tsconfig.node.json +0 -10
  74. package/template/apps/desktop/vite.config.ts +0 -40
@@ -1,330 +0,0 @@
1
- import * as React from "react";
2
- import { createFileRoute } from "@tanstack/react-router";
3
- import { Check, Pencil, Plus, Trash2 } from "lucide-react";
4
- import { toast } from "sonner";
5
- import { useForm } from "@tanstack/react-form";
6
- import { z } from "zod";
7
-
8
- import { Button } from "@workspace/ui/components/button";
9
- import { Input } from "@workspace/ui/components/input";
10
- import { Field, FieldError, FieldLabel } from "@workspace/ui/components/field";
11
-
12
- import type { router } from "@workspace/orpc/router";
13
- import type { InferRouterOutputs } from "@orpc/server";
14
- import {
15
- usePlanets,
16
- useCreatePlanet,
17
- useUpdatePlanet,
18
- useDeletePlanet,
19
- } from "@workspace/orpc/react";
20
-
21
- type Outputs = InferRouterOutputs<typeof router>;
22
- type Planet = Outputs["planets"]["getPlanets"][number];
23
-
24
- const planetSchema = z.object({
25
- name: z.string().min(1),
26
- description: z.string(),
27
- distance: z.string().refine((val) => !isNaN(parseFloat(val)), {
28
- message: "Must be a number",
29
- }),
30
- diameter: z.string().refine((val) => !isNaN(parseFloat(val)), {
31
- message: "Must be a number",
32
- }),
33
- });
34
-
35
- export const Route = createFileRoute("/_public/examples/client-orpc")({
36
- head: () => ({
37
- meta: [
38
- {
39
- title: "Client + oRPC Example | Croissant Stack",
40
- },
41
- {
42
- name: "description",
43
- content: "Explore client-side data fetching and mutations with oRPC in Croissant Stack.",
44
- },
45
- ],
46
- }),
47
- component: ClientORPC,
48
- });
49
-
50
- function ClientORPC() {
51
- const [editingId, setEditingId] = React.useState<number | null>(null);
52
-
53
- const { data: planets = [], isLoading } = usePlanets();
54
-
55
- const form = useForm({
56
- defaultValues: {
57
- name: "",
58
- description: "",
59
- distance: "0",
60
- diameter: "0",
61
- },
62
- validators: {
63
- onChange: planetSchema,
64
- },
65
- onSubmit: async ({ value }) => {
66
- if (editingId) {
67
- await updateMutation.mutateAsync({
68
- id: editingId,
69
- name: value.name,
70
- description: value.description,
71
- distanceFromSun: parseFloat(value.distance),
72
- diameter: parseFloat(value.diameter),
73
- hasRings: false,
74
- });
75
- } else {
76
- await createMutation.mutateAsync({
77
- name: value.name,
78
- description: value.description,
79
- distanceFromSun: parseFloat(value.distance),
80
- diameter: parseFloat(value.diameter),
81
- hasRings: false,
82
- });
83
- }
84
- },
85
- });
86
-
87
- const resetForm = () => {
88
- form.reset();
89
- setEditingId(null);
90
- };
91
-
92
- const createMutation = useCreatePlanet({
93
- onSuccess: () => {
94
- resetForm();
95
- toast.success("Planet added successfully");
96
- },
97
- onError: (err) => {
98
- toast.error(err.message || "Failed to add planet");
99
- },
100
- });
101
-
102
- const updateMutation = useUpdatePlanet({
103
- onSuccess: () => {
104
- resetForm();
105
- toast.success("Planet updated successfully");
106
- },
107
- onError: (err) => {
108
- toast.error(err.message || "Failed to update planet");
109
- },
110
- });
111
-
112
- const deleteMutation = useDeletePlanet({
113
- onSuccess: () => {
114
- toast.success("Planet deleted successfully");
115
- },
116
- onError: (err) => {
117
- toast.error(err.message || "Failed to delete planet");
118
- },
119
- });
120
-
121
- const handleDelete = async (id: number) => {
122
- if (!confirm("Are you sure you want to delete this planet?")) return;
123
- await deleteMutation.mutateAsync({ id });
124
- };
125
-
126
- const startEdit = (planet: Planet) => {
127
- setEditingId(planet.id);
128
- form.setFieldValue("name", planet.name);
129
- form.setFieldValue("description", planet.description || "");
130
- form.setFieldValue("distance", planet.distanceFromSun.toString());
131
- form.setFieldValue("diameter", planet.diameter.toString());
132
- };
133
-
134
- return (
135
- <div className="flex flex-col gap-8">
136
- <div>
137
- <h1 className="text-2xl font-bold mb-2">Client + oRPC CRUD</h1>
138
- <p className="text-muted-foreground">
139
- Manage planets directly from the client using TanStack Query, TanStack Form and oRPC.
140
- </p>
141
- </div>
142
-
143
- <div className="rounded-lg border p-6 bg-muted/30">
144
- <h2 className="font-semibold mb-4 flex items-center gap-2">
145
- {editingId ? <Pencil className="h-4 w-4" /> : <Plus className="h-4 w-4" />}
146
- {editingId ? "Edit Planet" : "Add New Planet"}
147
- </h2>
148
- <form
149
- onSubmit={(e) => {
150
- e.preventDefault();
151
- e.stopPropagation();
152
- form.handleSubmit();
153
- }}
154
- >
155
- <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
156
- <form.Field
157
- name="name"
158
- children={(field) => (
159
- <Field
160
- data-invalid={field.state.meta.isTouched && field.state.meta.errors.length > 0}
161
- >
162
- <FieldLabel htmlFor={field.name}>Name</FieldLabel>
163
- <Input
164
- id={field.name}
165
- name={field.name}
166
- value={field.state.value}
167
- onBlur={field.handleBlur}
168
- onChange={(e) => field.handleChange(e.target.value)}
169
- placeholder="Mars"
170
- />
171
- {field.state.meta.isTouched && <FieldError errors={field.state.meta.errors} />}
172
- </Field>
173
- )}
174
- />
175
- <form.Field
176
- name="description"
177
- children={(field) => (
178
- <Field
179
- data-invalid={field.state.meta.isTouched && field.state.meta.errors.length > 0}
180
- >
181
- <FieldLabel htmlFor={field.name}>Description</FieldLabel>
182
- <Input
183
- id={field.name}
184
- name={field.name}
185
- value={field.state.value}
186
- onBlur={field.handleBlur}
187
- onChange={(e) => field.handleChange(e.target.value)}
188
- placeholder="The red planet"
189
- />
190
- {field.state.meta.isTouched && <FieldError errors={field.state.meta.errors} />}
191
- </Field>
192
- )}
193
- />
194
- <form.Field
195
- name="distance"
196
- children={(field) => (
197
- <Field
198
- data-invalid={field.state.meta.isTouched && field.state.meta.errors.length > 0}
199
- >
200
- <FieldLabel htmlFor={field.name}>Distance (M km)</FieldLabel>
201
- <Input
202
- id={field.name}
203
- name={field.name}
204
- type="number"
205
- value={field.state.value}
206
- onBlur={field.handleBlur}
207
- onChange={(e) => field.handleChange(e.target.value)}
208
- />
209
- {field.state.meta.isTouched && <FieldError errors={field.state.meta.errors} />}
210
- </Field>
211
- )}
212
- />
213
- <form.Field
214
- name="diameter"
215
- children={(field) => (
216
- <Field
217
- data-invalid={field.state.meta.isTouched && field.state.meta.errors.length > 0}
218
- >
219
- <FieldLabel htmlFor={field.name}>Diameter (km)</FieldLabel>
220
- <Input
221
- id={field.name}
222
- name={field.name}
223
- type="number"
224
- value={field.state.value}
225
- onBlur={field.handleBlur}
226
- onChange={(e) => field.handleChange(e.target.value)}
227
- />
228
- {field.state.meta.isTouched && <FieldError errors={field.state.meta.errors} />}
229
- </Field>
230
- )}
231
- />
232
- </div>
233
- <div className="mt-6 flex gap-2">
234
- <form.Subscribe
235
- selector={(state) => ({
236
- canSubmit: state.canSubmit,
237
- isSubmitting: state.isSubmitting,
238
- })}
239
- >
240
- {(state: { canSubmit: boolean; isSubmitting: boolean }) => (
241
- <>
242
- {editingId ? (
243
- <>
244
- <Button
245
- type="submit"
246
- className="flex items-center gap-2"
247
- disabled={
248
- !state.canSubmit || state.isSubmitting || updateMutation.isPending
249
- }
250
- >
251
- <Check className="h-4 w-4" />{" "}
252
- {state.isSubmitting || updateMutation.isPending
253
- ? "Saving..."
254
- : "Save Changes"}
255
- </Button>
256
- <Button
257
- variant="outline"
258
- type="button"
259
- onClick={resetForm}
260
- disabled={state.isSubmitting || updateMutation.isPending}
261
- >
262
- Cancel
263
- </Button>
264
- </>
265
- ) : (
266
- <Button
267
- type="submit"
268
- className="flex items-center gap-2"
269
- disabled={!state.canSubmit || state.isSubmitting || createMutation.isPending}
270
- >
271
- <Plus className="h-4 w-4" />{" "}
272
- {state.isSubmitting || createMutation.isPending ? "Adding..." : "Add Planet"}
273
- </Button>
274
- )}
275
- </>
276
- )}
277
- </form.Subscribe>
278
- </div>
279
- </form>
280
- </div>
281
-
282
- <div className="space-y-4">
283
- <h2 className="font-semibold text-lg">Current Planets</h2>
284
- {isLoading ? (
285
- <p>Loading planets...</p>
286
- ) : planets.length === 0 ? (
287
- <p className="text-gray-500 italic">No planets found.</p>
288
- ) : (
289
- <div className="grid grid-cols-1 gap-3">
290
- {planets.map((planet) => (
291
- <div
292
- key={planet.id}
293
- className="flex items-center justify-between rounded-lg border p-4 bg-background shadow-sm hover:shadow-md transition-shadow"
294
- >
295
- <div className="flex-1">
296
- <div className="flex items-center gap-2">
297
- <span className="font-bold text-lg">{planet.name}</span>
298
- <span className="text-xs bg-muted px-2 py-0.5 rounded-full text-muted-foreground">
299
- ID: {planet.id}
300
- </span>
301
- </div>
302
- <p className="text-sm text-muted-foreground">
303
- {planet.description || "No description provided."}
304
- </p>
305
- <div className="mt-2 flex gap-4 text-xs text-muted-foreground font-mono">
306
- <span>Distance: {planet.distanceFromSun} M km</span>
307
- <span>Diameter: {planet.diameter} km</span>
308
- </div>
309
- </div>
310
- <div className="flex gap-2 ml-4">
311
- <Button variant="outline" size="icon" onClick={() => startEdit(planet)}>
312
- <Pencil className="h-4 w-4" />
313
- </Button>
314
- <Button
315
- variant="destructive"
316
- size="icon"
317
- onClick={() => handleDelete(planet.id)}
318
- disabled={deleteMutation.isPending}
319
- >
320
- <Trash2 className="h-4 w-4" />
321
- </Button>
322
- </div>
323
- </div>
324
- ))}
325
- </div>
326
- )}
327
- </div>
328
- </div>
329
- );
330
- }
@@ -1,66 +0,0 @@
1
- import { Link, createFileRoute } from "@tanstack/react-router";
2
- import { Button } from "@workspace/ui/components/button";
3
- import type { AppRouter } from "@workspace/orpc/router";
4
- import type { InferRouterOutputs } from "@orpc/server";
5
- import { orpc } from "@/lib/orpc";
6
-
7
- type Outputs = InferRouterOutputs<AppRouter>;
8
- type Planet = Outputs["planets"]["getPlanets"][number];
9
-
10
- export const Route = createFileRoute("/_public/")({
11
- loader: async () => {
12
- const [helloRes, planets] = await Promise.all([
13
- orpc.hello({ name: "Croissant Stack Desktop" }),
14
- orpc.planets.getPlanets(),
15
- ]);
16
- return {
17
- message: helloRes.message,
18
- planets,
19
- };
20
- },
21
- component: App,
22
- });
23
-
24
- function App() {
25
- const { message, planets } = Route.useLoaderData();
26
-
27
- return (
28
- <div className="flex min-h-svh p-6">
29
- <div className="flex max-w-lg min-w-0 flex-col gap-4 text-sm leading-loose">
30
- <div>
31
- <h1 className="font-medium text-2xl mb-4">Desktop Project ready!</h1>
32
- <p>
33
- oRPC integration: <span className="font-bold">{message}</span>
34
- </p>
35
-
36
- <div className="mt-8">
37
- <h2 className="text-xl font-semibold mb-2">Planets from Database:</h2>
38
- {planets.length === 0 ? (
39
- <p className="text-gray-500 italic">
40
- No planets found in the database. Run `db:push` and seed data if needed.
41
- </p>
42
- ) : (
43
- <ul className="grid grid-cols-1 gap-2">
44
- {planets.map((planet: Planet) => (
45
- <li key={planet.id} className="rounded-md border p-3 shadow-sm">
46
- <span className="font-bold">{planet.name}</span> - {planet.description}
47
- </li>
48
- ))}
49
- </ul>
50
- )}
51
- </div>
52
-
53
- <div className="mt-8 flex gap-2">
54
- <Link to="/login">
55
- <Button>Go to Login</Button>
56
- </Link>
57
- <Link to="/dashboard">
58
- <Button variant="outline">Go to Dashboard</Button>
59
- </Link>
60
- </div>
61
- <p className="mt-4 text-gray-500">You may now add components and start building.</p>
62
- </div>
63
- </div>
64
- </div>
65
- );
66
- }
@@ -1,34 +0,0 @@
1
- import { createFileRoute } from "@tanstack/react-router";
2
- import { LoginForm } from "@/components/login-form";
3
-
4
- export const Route = createFileRoute("/_public/login")({
5
- head: () => ({
6
- meta: [
7
- {
8
- title: "Sign In | Croissant Stack",
9
- },
10
- {
11
- name: "description",
12
- content: "Sign in to your Croissant Stack account.",
13
- },
14
- {
15
- name: "robots",
16
- content: "noindex, follow",
17
- },
18
- ],
19
- }),
20
- headers: () => ({
21
- "Cache-Control": "public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400",
22
- }),
23
- component: Login,
24
- });
25
-
26
- function Login() {
27
- return (
28
- <div className="flex min-h-svh items-center justify-center p-6">
29
- <div className="w-full max-w-sm">
30
- <LoginForm />
31
- </div>
32
- </div>
33
- );
34
- }
@@ -1,31 +0,0 @@
1
- import { createFileRoute } from "@tanstack/react-router";
2
- import { SignupForm } from "@/components/signup-form";
3
-
4
- export const Route = createFileRoute("/_public/signup")({
5
- head: () => ({
6
- meta: [
7
- {
8
- title: "Create an Account | Croissant Stack",
9
- },
10
- {
11
- name: "description",
12
- content:
13
- "Join Croissant Stack today. Create an account to start building with the best stack.",
14
- },
15
- ],
16
- }),
17
- headers: () => ({
18
- "Cache-Control": "public, max-age=3600, s-maxage=3600, stale-while-revalidate=86400",
19
- }),
20
- component: Signup,
21
- });
22
-
23
- function Signup() {
24
- return (
25
- <div className="flex min-h-svh items-center justify-center p-6">
26
- <div className="w-full max-w-sm">
27
- <SignupForm />
28
- </div>
29
- </div>
30
- );
31
- }
@@ -1,23 +0,0 @@
1
- import { Outlet, createFileRoute } from "@tanstack/react-router";
2
- import { SidebarProvider, SidebarTrigger } from "@workspace/ui/components/sidebar";
3
- import { PublicSidebar } from "@/components/app-sidebar";
4
-
5
- export const Route = createFileRoute("/_public")({
6
- component: PublicLayout,
7
- });
8
-
9
- function PublicLayout() {
10
- return (
11
- <SidebarProvider>
12
- <PublicSidebar />
13
- <main className="flex flex-1 flex-col overflow-hidden">
14
- <header className="flex h-16 shrink-0 items-center gap-2 border-b px-4">
15
- <SidebarTrigger />
16
- </header>
17
- <div className="flex-1 overflow-auto p-4">
18
- <Outlet />
19
- </div>
20
- </main>
21
- </SidebarProvider>
22
- );
23
- }
@@ -1 +0,0 @@
1
- /// <reference types="vite/client" />
@@ -1,25 +0,0 @@
1
- [package]
2
- name = "desktop"
3
- version = "0.1.0"
4
- description = "A Tauri App"
5
- authors = ["you"]
6
- edition = "2021"
7
-
8
- # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
9
-
10
- [lib]
11
- # The `_lib` suffix may seem redundant but it is necessary
12
- # to make the lib name unique and wouldn't conflict with the bin name.
13
- # This seems to be only an issue on Windows, see https://github.com/rust-lang/cargo/issues/8519
14
- name = "desktop_lib"
15
- crate-type = ["staticlib", "cdylib", "rlib"]
16
-
17
- [build-dependencies]
18
- tauri-build = { version = "2", features = [] }
19
-
20
- [dependencies]
21
- tauri = { version = "2", features = [] }
22
- tauri-plugin-opener = "2"
23
- serde = { version = "1", features = ["derive"] }
24
- serde_json = "1"
25
-
@@ -1,3 +0,0 @@
1
- fn main() {
2
- tauri_build::build()
3
- }
@@ -1,7 +0,0 @@
1
- {
2
- "$schema": "../gen/schemas/desktop-schema.json",
3
- "identifier": "default",
4
- "description": "Capability for the main window",
5
- "windows": ["main"],
6
- "permissions": ["core:default", "opener:default"]
7
- }
@@ -1,14 +0,0 @@
1
- // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
2
- #[tauri::command]
3
- fn greet(name: &str) -> String {
4
- format!("Hello, {}! You've been greeted from Rust!", name)
5
- }
6
-
7
- #[cfg_attr(mobile, tauri::mobile_entry_point)]
8
- pub fn run() {
9
- tauri::Builder::default()
10
- .plugin(tauri_plugin_opener::init())
11
- .invoke_handler(tauri::generate_handler![greet])
12
- .run(tauri::generate_context!())
13
- .expect("error while running tauri application");
14
- }
@@ -1,6 +0,0 @@
1
- // Prevents additional console window on Windows in release, DO NOT REMOVE!!
2
- #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
3
-
4
- fn main() {
5
- desktop_lib::run()
6
- }
@@ -1,35 +0,0 @@
1
- {
2
- "$schema": "https://schema.tauri.app/config/2",
3
- "productName": "desktop",
4
- "version": "0.1.0",
5
- "identifier": "com.croissantlabs.desktop",
6
- "build": {
7
- "beforeDevCommand": "pnpm dev",
8
- "devUrl": "http://localhost:1420",
9
- "beforeBuildCommand": "pnpm build",
10
- "frontendDist": "../dist"
11
- },
12
- "app": {
13
- "windows": [
14
- {
15
- "title": "desktop",
16
- "width": 800,
17
- "height": 600
18
- }
19
- ],
20
- "security": {
21
- "csp": null
22
- }
23
- },
24
- "bundle": {
25
- "active": true,
26
- "targets": "all",
27
- "icon": [
28
- "icons/32x32.png",
29
- "icons/128x128.png",
30
- "icons/128x128@2x.png",
31
- "icons/icon.icns",
32
- "icons/icon.ico"
33
- ]
34
- }
35
- }
@@ -1,17 +0,0 @@
1
- {
2
- "extends": "@workspace/config-typescript/react.json",
3
- "include": ["**/*.ts", "**/*.tsx", "vite.config.ts"],
4
- "compilerOptions": {
5
- "target": "ES2022",
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "moduleResolution": "bundler",
9
- "allowImportingTsExtensions": true,
10
- "verbatimModuleSyntax": true,
11
- "jsx": "react-jsx",
12
- "paths": {
13
- "@/*": ["./src/*"],
14
- "@workspace/ui/*": ["../../packages/ui/src/*"]
15
- }
16
- }
17
- }
@@ -1,10 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "composite": true,
4
- "skipLibCheck": true,
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "allowSyntheticDefaultImports": true
8
- },
9
- "include": ["vite.config.ts"]
10
- }