@proofkit/cli 1.2.0-beta.2 → 2.0.0-beta.11
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/CHANGELOG.md +39 -0
- package/dist/index.js +108 -98
- package/dist/index.js.map +1 -1
- package/package.json +46 -48
- package/template/extras/emailTemplates/auth-code.tsx +7 -26
- package/template/extras/emailTemplates/generic.tsx +8 -31
- package/template/extras/fmaddon-auth/emails/auth-code.tsx +7 -26
- package/template/extras/src/app/api/auth/[...nextauth]/route.ts +1 -1
- package/template/extras/src/server/next-auth/base.ts +3 -3
- package/template/nextjs-mantine/package.json +5 -4
- package/template/nextjs-shadcn/biome.json +18 -13
- package/template/nextjs-shadcn/package.json +9 -7
- package/template/nextjs-shadcn/proofkit.json +1 -1
- package/template/nextjs-shadcn/src/components/mode-toggle.tsx +39 -0
- package/template/nextjs-shadcn/src/components/ui/button.tsx +61 -0
- package/template/nextjs-shadcn/src/components/ui/dropdown-menu.tsx +267 -0
- package/template/nextjs-shadcn/src/components/ui/sonner.tsx +31 -0
- package/template/pages/nextjs/table-infinite/actions.ts +1 -1
- package/template/pages/nextjs/table-infinite-edit/actions.ts +1 -1
- package/template/vite-wv/package.json +5 -2
- package/template/vite-wv/src/routeTree.gen.ts +1 -1
- package/template/vite-wv/src/routes/index.tsx +8 -20
- package/template/vite-wv/src/routes/secondary.tsx +4 -6
- package/template/extras/config/_eslint.js +0 -27
- package/template/extras/config/_prettier.config.js +0 -6
- package/template/nextjs-mantine/.prettierrc +0 -3
- package/template/nextjs-shadcn/.prettierrc +0 -3
- package/template/vite-wv/.prettierrc +0 -3
- /package/dist/{index.d.ts → index-BitR4XBZ.d.ts} +0 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Check, ChevronRight, Circle } from "lucide-react";
|
|
4
|
+
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
5
|
+
import type * as React from "react";
|
|
6
|
+
|
|
7
|
+
import { cn } from "@/lib/utils";
|
|
8
|
+
|
|
9
|
+
function DropdownMenu({
|
|
10
|
+
...props
|
|
11
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
|
|
12
|
+
return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function DropdownMenuPortal({
|
|
16
|
+
...props
|
|
17
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
|
|
18
|
+
return (
|
|
19
|
+
<DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function DropdownMenuTrigger({
|
|
24
|
+
...props
|
|
25
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
|
|
26
|
+
return (
|
|
27
|
+
<DropdownMenuPrimitive.Trigger
|
|
28
|
+
className="select-none"
|
|
29
|
+
data-slot="dropdown-menu-trigger"
|
|
30
|
+
{...props}
|
|
31
|
+
/>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function DropdownMenuContent({
|
|
36
|
+
className,
|
|
37
|
+
sideOffset = 4,
|
|
38
|
+
...props
|
|
39
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
|
|
40
|
+
return (
|
|
41
|
+
<DropdownMenuPrimitive.Portal>
|
|
42
|
+
<DropdownMenuPrimitive.Content
|
|
43
|
+
className={cn(
|
|
44
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] space-y-0.5 overflow-hidden rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in",
|
|
45
|
+
className
|
|
46
|
+
)}
|
|
47
|
+
data-slot="dropdown-menu-content"
|
|
48
|
+
sideOffset={sideOffset}
|
|
49
|
+
{...props}
|
|
50
|
+
/>
|
|
51
|
+
</DropdownMenuPrimitive.Portal>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function DropdownMenuGroup({
|
|
56
|
+
...props
|
|
57
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
|
|
58
|
+
return (
|
|
59
|
+
<DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function DropdownMenuItem({
|
|
64
|
+
className,
|
|
65
|
+
inset,
|
|
66
|
+
variant,
|
|
67
|
+
...props
|
|
68
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
69
|
+
inset?: boolean;
|
|
70
|
+
variant?: "destructive";
|
|
71
|
+
}) {
|
|
72
|
+
return (
|
|
73
|
+
<DropdownMenuPrimitive.Item
|
|
74
|
+
className={cn(
|
|
75
|
+
"relative flex cursor-default select-none items-center gap-2 rounded-md px-2 py-1.5 text-foreground text-sm outline-hidden transition-colors data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg:not([class*=size-])]:size-4 [&_svg:not([role=img]):not([class*=text-])]:opacity-60 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
76
|
+
"focus:bg-accent focus:text-foreground",
|
|
77
|
+
"data-[active=true]:bg-accent data-[active=true]:text-accent-foreground",
|
|
78
|
+
inset && "ps-8",
|
|
79
|
+
variant === "destructive" &&
|
|
80
|
+
"text-destructive hover:bg-destructive/5 hover:text-destructive focus:bg-destructive/5 focus:text-destructive data-[active=true]:bg-destructive/5",
|
|
81
|
+
className
|
|
82
|
+
)}
|
|
83
|
+
data-slot="dropdown-menu-item"
|
|
84
|
+
{...props}
|
|
85
|
+
/>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function DropdownMenuCheckboxItem({
|
|
90
|
+
className,
|
|
91
|
+
children,
|
|
92
|
+
checked,
|
|
93
|
+
...props
|
|
94
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
|
|
95
|
+
return (
|
|
96
|
+
<DropdownMenuPrimitive.CheckboxItem
|
|
97
|
+
checked={checked}
|
|
98
|
+
className={cn(
|
|
99
|
+
"relative flex cursor-default select-none items-center rounded-md py-1.5 ps-8 pe-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
|
|
100
|
+
className
|
|
101
|
+
)}
|
|
102
|
+
data-slot="dropdown-menu-checkbox-item"
|
|
103
|
+
{...props}
|
|
104
|
+
>
|
|
105
|
+
<span className="absolute start-2 flex h-3.5 w-3.5 items-center justify-center text-muted-foreground">
|
|
106
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
107
|
+
<Check className="h-4 w-4 text-primary" />
|
|
108
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
109
|
+
</span>
|
|
110
|
+
{children}
|
|
111
|
+
</DropdownMenuPrimitive.CheckboxItem>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function DropdownMenuRadioItem({
|
|
116
|
+
className,
|
|
117
|
+
children,
|
|
118
|
+
...props
|
|
119
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
|
|
120
|
+
return (
|
|
121
|
+
<DropdownMenuPrimitive.RadioItem
|
|
122
|
+
className={cn(
|
|
123
|
+
"relative flex cursor-default select-none items-center rounded-md py-1.5 ps-6 pe-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
|
|
124
|
+
className
|
|
125
|
+
)}
|
|
126
|
+
data-slot="dropdown-menu-radio-item"
|
|
127
|
+
{...props}
|
|
128
|
+
>
|
|
129
|
+
<span className="absolute start-1.5 flex h-3.5 w-3.5 items-center justify-center">
|
|
130
|
+
<DropdownMenuPrimitive.ItemIndicator>
|
|
131
|
+
<Circle className="h-1.5 w-1.5 fill-primary stroke-primary" />
|
|
132
|
+
</DropdownMenuPrimitive.ItemIndicator>
|
|
133
|
+
</span>
|
|
134
|
+
{children}
|
|
135
|
+
</DropdownMenuPrimitive.RadioItem>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function DropdownMenuLabel({
|
|
140
|
+
className,
|
|
141
|
+
inset,
|
|
142
|
+
...props
|
|
143
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
144
|
+
inset?: boolean;
|
|
145
|
+
}) {
|
|
146
|
+
return (
|
|
147
|
+
<DropdownMenuPrimitive.Label
|
|
148
|
+
className={cn(
|
|
149
|
+
"px-2 py-1.5 font-medium text-muted-foreground text-xs",
|
|
150
|
+
inset && "ps-8",
|
|
151
|
+
className
|
|
152
|
+
)}
|
|
153
|
+
data-slot="dropdown-menu-label"
|
|
154
|
+
{...props}
|
|
155
|
+
/>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function DropdownMenuRadioGroup({
|
|
160
|
+
...props
|
|
161
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
|
|
162
|
+
return (
|
|
163
|
+
<DropdownMenuPrimitive.RadioGroup
|
|
164
|
+
data-slot="dropdown-menu-radio-group"
|
|
165
|
+
{...props}
|
|
166
|
+
/>
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function DropdownMenuSeparator({
|
|
171
|
+
className,
|
|
172
|
+
...props
|
|
173
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
|
|
174
|
+
return (
|
|
175
|
+
<DropdownMenuPrimitive.Separator
|
|
176
|
+
className={cn("-mx-2 my-1.5 h-px bg-muted", className)}
|
|
177
|
+
data-slot="dropdown-menu-separator"
|
|
178
|
+
{...props}
|
|
179
|
+
/>
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function DropdownMenuShortcut({
|
|
184
|
+
className,
|
|
185
|
+
...props
|
|
186
|
+
}: React.HTMLAttributes<HTMLSpanElement>) {
|
|
187
|
+
return (
|
|
188
|
+
<span
|
|
189
|
+
className={cn("ms-auto text-xs tracking-widest opacity-60", className)}
|
|
190
|
+
data-slot="dropdown-menu-shortcut"
|
|
191
|
+
{...props}
|
|
192
|
+
/>
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function DropdownMenuSub({
|
|
197
|
+
...props
|
|
198
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
|
|
199
|
+
return (
|
|
200
|
+
<DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function DropdownMenuSubTrigger({
|
|
205
|
+
className,
|
|
206
|
+
inset,
|
|
207
|
+
children,
|
|
208
|
+
...props
|
|
209
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
210
|
+
inset?: boolean;
|
|
211
|
+
}) {
|
|
212
|
+
return (
|
|
213
|
+
<DropdownMenuPrimitive.SubTrigger
|
|
214
|
+
className={cn(
|
|
215
|
+
"flex cursor-default select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden",
|
|
216
|
+
"focus:bg-accent focus:text-foreground",
|
|
217
|
+
"data-[state=open]:bg-accent data-[state=open]:text-foreground",
|
|
218
|
+
"data-[here=true]:bg-accent data-[here=true]:text-foreground",
|
|
219
|
+
"[&>svg]:pointer-events-none [&>svg]:size-4 [&>svg]:shrink-0 [&_svg:not([role=img]):not([class*=text-])]:opacity-60",
|
|
220
|
+
inset && "ps-8",
|
|
221
|
+
className
|
|
222
|
+
)}
|
|
223
|
+
data-slot="dropdown-menu-sub-trigger"
|
|
224
|
+
{...props}
|
|
225
|
+
>
|
|
226
|
+
{children}
|
|
227
|
+
<ChevronRight
|
|
228
|
+
className="ms-auto size-3.5! rtl:rotate-180"
|
|
229
|
+
data-slot="dropdown-menu-sub-trigger-indicator"
|
|
230
|
+
/>
|
|
231
|
+
</DropdownMenuPrimitive.SubTrigger>
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function DropdownMenuSubContent({
|
|
236
|
+
className,
|
|
237
|
+
...props
|
|
238
|
+
}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
|
|
239
|
+
return (
|
|
240
|
+
<DropdownMenuPrimitive.SubContent
|
|
241
|
+
className={cn(
|
|
242
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] space-y-0.5 overflow-hidden rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in",
|
|
243
|
+
className
|
|
244
|
+
)}
|
|
245
|
+
data-slot="dropdown-menu-sub-content"
|
|
246
|
+
{...props}
|
|
247
|
+
/>
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export {
|
|
252
|
+
DropdownMenu,
|
|
253
|
+
DropdownMenuCheckboxItem,
|
|
254
|
+
DropdownMenuContent,
|
|
255
|
+
DropdownMenuGroup,
|
|
256
|
+
DropdownMenuItem,
|
|
257
|
+
DropdownMenuLabel,
|
|
258
|
+
DropdownMenuPortal,
|
|
259
|
+
DropdownMenuRadioGroup,
|
|
260
|
+
DropdownMenuRadioItem,
|
|
261
|
+
DropdownMenuSeparator,
|
|
262
|
+
DropdownMenuShortcut,
|
|
263
|
+
DropdownMenuSub,
|
|
264
|
+
DropdownMenuSubContent,
|
|
265
|
+
DropdownMenuSubTrigger,
|
|
266
|
+
DropdownMenuTrigger,
|
|
267
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useTheme } from "next-themes";
|
|
4
|
+
import { Toaster as Sonner } from "sonner";
|
|
5
|
+
|
|
6
|
+
type ToasterProps = React.ComponentProps<typeof Sonner>;
|
|
7
|
+
|
|
8
|
+
function Toaster({ ...props }: ToasterProps) {
|
|
9
|
+
const { theme = "system" } = useTheme();
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<Sonner
|
|
13
|
+
theme={theme as ToasterProps["theme"]}
|
|
14
|
+
className="toaster group"
|
|
15
|
+
toastOptions={{
|
|
16
|
+
classNames: {
|
|
17
|
+
toast:
|
|
18
|
+
"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
|
|
19
|
+
description: "group-[.toast]:text-muted-foreground",
|
|
20
|
+
actionButton:
|
|
21
|
+
"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
|
|
22
|
+
cancelButton:
|
|
23
|
+
"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
|
|
24
|
+
},
|
|
25
|
+
}}
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { Toaster };
|
|
@@ -19,7 +19,7 @@ export const fetchData = __ACTION_CLIENT__
|
|
|
19
19
|
})
|
|
20
20
|
)
|
|
21
21
|
.action(async ({ parsedInput: { offset, sorting, columnFilters } }) => {
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
const getOptions: clientTypes.ListParams<__TYPE_NAME__, any> & {
|
|
24
24
|
query: clientTypes.Query<__TYPE_NAME__>[];
|
|
25
25
|
} = {
|
|
@@ -24,7 +24,7 @@ export const fetchData = __ACTION_CLIENT__
|
|
|
24
24
|
})
|
|
25
25
|
)
|
|
26
26
|
.action(async ({ parsedInput: { offset, sorting, columnFilters } }) => {
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
const getOptions: clientTypes.ListParams<__TYPE_NAME__, any> & {
|
|
29
29
|
query: clientTypes.Query<__TYPE_NAME__>[];
|
|
30
30
|
} = {
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
"serve": "vite preview",
|
|
13
13
|
"start": "vite",
|
|
14
14
|
"typegen": "proofkit typegen",
|
|
15
|
-
"upload": "node scripts/upload.js"
|
|
15
|
+
"upload": "node scripts/upload.js",
|
|
16
|
+
"lint": "biome check",
|
|
17
|
+
"format": "biome format --write"
|
|
16
18
|
},
|
|
17
19
|
"dependencies": {
|
|
18
20
|
"@mantine/core": "^7.15.1",
|
|
@@ -33,8 +35,9 @@
|
|
|
33
35
|
"zod": "^3.24.1"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
|
-
"@
|
|
38
|
+
"@biomejs/biome": "2.3.11",
|
|
37
39
|
"@tanstack/react-query-devtools": "^5.69.0",
|
|
40
|
+
"ultracite": "7.0.8",
|
|
38
41
|
"@tanstack/react-router-devtools": "^1.114.27",
|
|
39
42
|
"@tanstack/router-plugin": "^1.114.27",
|
|
40
43
|
"@types/node": "^22.13.13",
|
|
@@ -1,17 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
3
|
-
import {
|
|
4
|
-
Anchor,
|
|
5
|
-
Box,
|
|
6
|
-
Code,
|
|
7
|
-
Container,
|
|
8
|
-
Image,
|
|
9
|
-
px,
|
|
10
|
-
Stack,
|
|
11
|
-
Text,
|
|
12
|
-
Title,
|
|
13
|
-
} from "@mantine/core";
|
|
1
|
+
import { Anchor, Box, Code, Container, Image, px, Stack, Text, Title } from "@mantine/core";
|
|
14
2
|
import { IconExternalLink } from "@tabler/icons-react";
|
|
3
|
+
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
15
4
|
|
|
16
5
|
export const Route = createFileRoute("/")({
|
|
17
6
|
component: HomeComponent,
|
|
@@ -22,20 +11,20 @@ function HomeComponent() {
|
|
|
22
11
|
<Container mt="5rem">
|
|
23
12
|
<Stack gap="xl" ta="center">
|
|
24
13
|
<Image
|
|
25
|
-
src="https://raw.githubusercontent.com/proofgeist/proofkit/dde6366c529104658dfba67a8fc2910a8644fc64/docs/src/assets/proofkit.png"
|
|
26
14
|
alt="ProofKit"
|
|
15
|
+
mah={px("16rem")}
|
|
16
|
+
src="https://raw.githubusercontent.com/proofgeist/proofkit/dde6366c529104658dfba67a8fc2910a8644fc64/docs/src/assets/proofkit.png"
|
|
27
17
|
style={{
|
|
28
18
|
marginRight: "auto",
|
|
29
19
|
marginLeft: "auto",
|
|
30
20
|
}}
|
|
31
21
|
w={"auto"}
|
|
32
|
-
mah={px("16rem")}
|
|
33
22
|
/>
|
|
34
23
|
<Title order={1}>Welcome!</Title>
|
|
35
24
|
|
|
36
25
|
<Text style={{ textWrap: "balance" }}>
|
|
37
|
-
This is the base template page. To add more pages, components, or
|
|
38
|
-
|
|
26
|
+
This is the base template page. To add more pages, components, or other features, run the ProofKit CLI from
|
|
27
|
+
within your project.
|
|
39
28
|
</Text>
|
|
40
29
|
<Code block>pnpm proofkit</Code>
|
|
41
30
|
|
|
@@ -45,17 +34,16 @@ function HomeComponent() {
|
|
|
45
34
|
<Box>
|
|
46
35
|
<Anchor
|
|
47
36
|
href="https://proofkit.dev"
|
|
48
|
-
target="_blank"
|
|
49
37
|
rel="proofkit-app"
|
|
50
38
|
style={{ display: "inline-flex", alignItems: "center", gap: 4 }}
|
|
39
|
+
target="_blank"
|
|
51
40
|
>
|
|
52
41
|
ProofKit Docs <IconExternalLink size={px("1rem")} />
|
|
53
42
|
</Anchor>
|
|
54
43
|
</Box>
|
|
55
44
|
|
|
56
45
|
<Text c="dimmed" size="sm">
|
|
57
|
-
Need to build multiple webviewer widgets?
|
|
58
|
-
<Link to="/secondary">Check out the secondary page</Link>
|
|
46
|
+
Need to build multiple webviewer widgets? <Link to="/secondary">Check out the secondary page</Link>
|
|
59
47
|
</Text>
|
|
60
48
|
</Stack>
|
|
61
49
|
</Container>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
3
1
|
import { Code, Container, Stack, Text, Title } from "@mantine/core";
|
|
2
|
+
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
4
3
|
|
|
5
4
|
export const Route = createFileRoute("/secondary")({
|
|
6
5
|
component: RouteComponent,
|
|
@@ -12,12 +11,11 @@ function RouteComponent() {
|
|
|
12
11
|
<Stack gap="xl" ta="center">
|
|
13
12
|
<Title order={1}>Secondary Page</Title>
|
|
14
13
|
<Text>
|
|
15
|
-
Use hidden pages like this to embed multiple webviewer widgets into a
|
|
16
|
-
|
|
14
|
+
Use hidden pages like this to embed multiple webviewer widgets into a single HTML bundle for your FileMaker
|
|
15
|
+
solution.
|
|
17
16
|
</Text>
|
|
18
17
|
<Text>
|
|
19
|
-
See how to navigate via a FileMaker script in the
|
|
20
|
-
<Code>EXAMPLE: Navigation</Code> script
|
|
18
|
+
See how to navigate via a FileMaker script in the <Code>EXAMPLE: Navigation</Code> script
|
|
21
19
|
</Text>
|
|
22
20
|
<Text c="dimmed" size="sm">
|
|
23
21
|
<Link to="/">Go back to the home page</Link>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/** @type {import("eslint").Linter.Config} */
|
|
2
|
-
export const _initialConfig = {
|
|
3
|
-
parser: "@typescript-eslint/parser",
|
|
4
|
-
parserOptions: { project: true },
|
|
5
|
-
plugins: ["@typescript-eslint"],
|
|
6
|
-
extends: [
|
|
7
|
-
"next/core-web-vitals",
|
|
8
|
-
"plugin:@typescript-eslint/recommended-type-checked",
|
|
9
|
-
"plugin:@typescript-eslint/stylistic-type-checked",
|
|
10
|
-
],
|
|
11
|
-
rules: {
|
|
12
|
-
"@typescript-eslint/array-type": "off",
|
|
13
|
-
"@typescript-eslint/consistent-type-definitions": "off",
|
|
14
|
-
"@typescript-eslint/consistent-type-imports": [
|
|
15
|
-
"warn",
|
|
16
|
-
{ prefer: "type-imports", fixStyle: "inline-type-imports" },
|
|
17
|
-
],
|
|
18
|
-
"@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }],
|
|
19
|
-
"@typescript-eslint/require-await": "off",
|
|
20
|
-
"@typescript-eslint/no-explicit-any": "warn",
|
|
21
|
-
"@typescript-eslint/no-misused-promises": [
|
|
22
|
-
"error",
|
|
23
|
-
{ checksVoidReturn: { attributes: false } },
|
|
24
|
-
],
|
|
25
|
-
"@typescript-eslint/no-floating-promises": "warn",
|
|
26
|
-
},
|
|
27
|
-
};
|
|
File without changes
|