create-newt-app 0.33.2 → 0.34.0

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/dist/index.js CHANGED
@@ -11,7 +11,7 @@ import { existsSync, promises } from "fs";
11
11
  import path from "path";
12
12
  import https from "node:https";
13
13
  //#region package.json
14
- var version = "0.33.2";
14
+ var version = "0.34.0";
15
15
  var engines = { "node": ">=24.0.0" };
16
16
  //#endregion
17
17
  //#region src/templates/root/index.ts
@@ -31,7 +31,8 @@ const root$2 = { templates: [
31
31
  "db:migrate": "turbo run migrate",
32
32
  "db:generate": "turbo run generate"
33
33
  },
34
- "devDependencies": {
34
+ "devDependencies": {<% if (shadcn && linter === "oxc") { %>
35
+ "@shadcn/lint": "<%= versions["@shadcn/lint"] %>",<% } %>
35
36
  "@types/node": "<%= versions["@types/node"] %>",
36
37
  "turbo": "<%= versions.turbo %>",
37
38
  "typescript": "<%= versions.typescript %>"
@@ -219,7 +220,9 @@ BETTER_AUTH_SECRET=generate-with-openssl-rand-base64-32
219
220
  # This is NOT the Next.js you know
220
221
 
221
222
  This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in \`node_modules/next/dist/docs/\` before writing any code. Heed deprecation notices.
222
- <!-- END:nextjs-agent-rules -->`
223
+ <!-- END:nextjs-agent-rules --><% if (shadcn) { %>
224
+
225
+ After making changes, run \`pnpm lint:check\` and fix all errors.<% } %>`
223
226
  },
224
227
  {
225
228
  filename: "CLAUDE.md",
@@ -458,7 +461,7 @@ export default function Home() {
458
461
  const { data: session, isPending } = authClient.useSession();
459
462
 
460
463
  const { data: hello } = useQuery({
461
- queryKey: ['hello'],
464
+ queryKey: ['hello', session?.user.id],
462
465
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
463
466
  });
464
467
 
@@ -820,10 +823,8 @@ const api$1 = { templates: [
820
823
  "outDir": "./dist",
821
824
  "rootDir": "./src",
822
825
  "skipLibCheck": true,
823
- "strictNullChecks": true,
826
+ "strict": true,
824
827
  "forceConsistentCasingInFileNames": true,
825
- "noImplicitAny": false,
826
- "strictBindCallApply": false,
827
828
  "noFallthroughCasesInSwitch": false,
828
829
  "types": [<% if (testing === 'jest') { %>"jest", <% } %><% if (testing === 'vitest') { %>"vitest/globals", <% } %>"node"]
829
830
  },
@@ -1497,6 +1498,7 @@ const versions = {
1497
1498
  "@nestjs/testing": "^11.0.1",
1498
1499
  "@next/eslint-plugin-next": "^16.3.4",
1499
1500
  "@oxlint/plugins": "^1.74.0",
1501
+ "@shadcn/lint": "^0.1.0",
1500
1502
  "@shadcn/react": "^0.2.1",
1501
1503
  "@stylexjs/babel-plugin": "0.19.0",
1502
1504
  "@stylexjs/postcss-plugin": "0.19.0",
@@ -1522,6 +1524,7 @@ const versions = {
1522
1524
  "class-variance-authority": "^0.7.1",
1523
1525
  clsx: "^2.1.1",
1524
1526
  cmdk: "^1.1.1",
1527
+ cn: "^0.3.0",
1525
1528
  "date-fns": "^4.2.1",
1526
1529
  dotenv: "^17.3.1",
1527
1530
  "dotenv-cli": "^11.0.0",
@@ -1540,7 +1543,7 @@ const versions = {
1540
1543
  next: "16.3.4",
1541
1544
  "next-themes": "^0.4.6",
1542
1545
  oxfmt: "^0.59.0",
1543
- oxlint: "^1.74.0",
1546
+ oxlint: "^1.80.0",
1544
1547
  pg: "^8.14.1",
1545
1548
  prettier: "^3.7.4",
1546
1549
  react: "^19.2.4",
@@ -1591,8 +1594,8 @@ const shadcnUi = {
1591
1594
  "@shadcn/react": "<%= versions["@shadcn/react"] %>",
1592
1595
  "shadcn": "<%= versions.shadcn %>",
1593
1596
  "class-variance-authority": "<%= versions["class-variance-authority"] %>",
1594
- "clsx": "<%= versions.clsx %>",
1595
1597
  "cmdk": "<%= versions.cmdk %>",
1598
+ "cn": "<%= versions.cn %>",
1596
1599
  "date-fns": "<%= versions["date-fns"] %>",
1597
1600
  "embla-carousel-react": "<%= versions["embla-carousel-react"] %>",
1598
1601
  "input-otp": "<%= versions["input-otp"] %>",
@@ -1602,7 +1605,6 @@ const shadcnUi = {
1602
1605
  "react-resizable-panels": "<%= versions["react-resizable-panels"] %>",
1603
1606
  "recharts": "<%= versions.recharts %>",
1604
1607
  "sonner": "<%= versions.sonner %>",
1605
- "tailwind-merge": "<%= versions["tailwind-merge"] %>",
1606
1608
  "tw-animate-css": "<%= versions["tw-animate-css"] %>"
1607
1609
  },
1608
1610
  "peerDependencies": {
@@ -1623,12 +1625,7 @@ const shadcnUi = {
1623
1625
  },
1624
1626
  {
1625
1627
  filename: "packages/ui/src/lib/utils.ts",
1626
- template: `import { clsx, type ClassValue } from "clsx"
1627
- import { twMerge } from "tailwind-merge"
1628
-
1629
- export function cn(...inputs: ClassValue[]) {
1630
- return twMerge(clsx(inputs))
1631
- }
1628
+ template: `export { cn } from "cn"
1632
1629
  `
1633
1630
  },
1634
1631
  {
@@ -1820,7 +1817,10 @@ export default config;`
1820
1817
  "extends": "@<%= projectName %>/typescript-config/react-library.json",
1821
1818
  "compilerOptions": {
1822
1819
  "outDir": "dist",
1823
- "strictNullChecks": true
1820
+ "strictNullChecks": true,
1821
+ "paths": {
1822
+ "@<%= projectName %>/ui/*": ["./src/*"]
1823
+ }
1824
1824
  },
1825
1825
  "include": ["src"],
1826
1826
  "exclude": ["node_modules", "dist"]
@@ -1936,13 +1936,13 @@ import { Button } from '@<%= projectName %>/ui/button';
1936
1936
  import { Link } from '@<%= projectName %>/ui/link';
1937
1937
  import { Logo } from '@<%= projectName %>/ui/logo';
1938
1938
  import { ModeToggle } from '@<%= projectName %>/ui/mode-toggle';
1939
- import { Card, CardContent, CardHeader, CardTitle } from '@<%= projectName %>/ui/card';
1939
+ import { Card, CardContent, CardHeader } from '@<%= projectName %>/ui/card';
1940
1940
 
1941
1941
  export default function Home() {
1942
1942
  const { data: session, isPending } = authClient.useSession();
1943
1943
 
1944
1944
  const { data: hello } = useQuery({
1945
- queryKey: ['hello'],
1945
+ queryKey: ['hello', session?.user.id],
1946
1946
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
1947
1947
  });
1948
1948
 
@@ -1957,7 +1957,7 @@ export default function Home() {
1957
1957
  </div>
1958
1958
 
1959
1959
  <div className="flex items-center gap-3 py-2">
1960
- <Logo className="w-10 h-auto text-foreground" />
1960
+ <Logo className="w-10 h-auto" />
1961
1961
  <div>
1962
1962
  <h1 className="text-4xl font-black tracking-tight"><%= projectName %></h1>
1963
1963
  <p className="text-sm text-muted-foreground tracking-widest uppercase">
@@ -1968,9 +1968,9 @@ export default function Home() {
1968
1968
 
1969
1969
  <Card>
1970
1970
  <CardHeader>
1971
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1971
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1972
1972
  next.js
1973
- </CardTitle>
1973
+ </p>
1974
1974
  </CardHeader>
1975
1975
  <CardContent>
1976
1976
  <p className="font-mono text-sm text-muted-foreground">apps/web/app/layout.tsx</p>
@@ -1980,9 +1980,9 @@ export default function Home() {
1980
1980
 
1981
1981
  <Card>
1982
1982
  <CardHeader>
1983
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1983
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1984
1984
  nest.js
1985
- </CardTitle>
1985
+ </p>
1986
1986
  </CardHeader>
1987
1987
  <CardContent>
1988
1988
  <p className="font-mono text-sm text-muted-foreground">GET /api/hello</p>
@@ -1994,9 +1994,9 @@ export default function Home() {
1994
1994
 
1995
1995
  <Card>
1996
1996
  <CardHeader>
1997
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1997
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
1998
1998
  better-auth
1999
- </CardTitle>
1999
+ </p>
2000
2000
  </CardHeader>
2001
2001
  <CardContent>
2002
2002
  {isPending ? (
@@ -2185,8 +2185,7 @@ export function AuthForm() {
2185
2185
  {
2186
2186
  filename: "packages/ui/src/components/accordion.tsx",
2187
2187
  template: `import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"
2188
-
2189
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2188
+ import { cn } from "cn"
2190
2189
  import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"
2191
2190
 
2192
2191
  function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
@@ -2264,8 +2263,8 @@ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
2264
2263
 
2265
2264
  import * as React from "react"
2266
2265
  import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog"
2266
+ import { cn } from "cn"
2267
2267
 
2268
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2269
2268
  import { Button } from "@<%= projectName %>/ui/components/button"
2270
2269
 
2271
2270
  function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {
@@ -2453,8 +2452,7 @@ export {
2453
2452
  filename: "packages/ui/src/components/alert.tsx",
2454
2453
  template: `import * as React from "react"
2455
2454
  import { cva, type VariantProps } from "class-variance-authority"
2456
-
2457
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2455
+ import { cn } from "cn"
2458
2456
 
2459
2457
  const alertVariants = cva(
2460
2458
  "group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
@@ -2531,7 +2529,7 @@ export { Alert, AlertTitle, AlertDescription, AlertAction }
2531
2529
  },
2532
2530
  {
2533
2531
  filename: "packages/ui/src/components/aspect-ratio.tsx",
2534
- template: `import { cn } from "@<%= projectName %>/ui/lib/utils"
2532
+ template: `import { cn } from "cn"
2535
2533
 
2536
2534
  function AspectRatio({
2537
2535
  ratio,
@@ -2561,8 +2559,7 @@ export { AspectRatio }
2561
2559
 
2562
2560
  import * as React from "react"
2563
2561
  import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar"
2564
-
2565
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2562
+ import { cn } from "cn"
2566
2563
 
2567
2564
  function Avatar({
2568
2565
  className,
@@ -2673,8 +2670,7 @@ export {
2673
2670
  template: `import { mergeProps } from "@base-ui/react/merge-props"
2674
2671
  import { useRender } from "@base-ui/react/use-render"
2675
2672
  import { cva, type VariantProps } from "class-variance-authority"
2676
-
2677
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2673
+ import { cn } from "cn"
2678
2674
 
2679
2675
  const badgeVariants = cva(
2680
2676
  "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
@@ -2729,8 +2725,7 @@ export { Badge, badgeVariants }
2729
2725
  template: `import * as React from "react"
2730
2726
  import { mergeProps } from "@base-ui/react/merge-props"
2731
2727
  import { useRender } from "@base-ui/react/use-render"
2732
-
2733
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2728
+ import { cn } from "cn"
2734
2729
  import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react"
2735
2730
 
2736
2731
  function Breadcrumb({ className, ...props }: React.ComponentProps<"nav">) {
@@ -2857,8 +2852,7 @@ export {
2857
2852
  filename: "packages/ui/src/components/button.tsx",
2858
2853
  template: `import { Button as ButtonPrimitive } from "@base-ui/react/button"
2859
2854
  import { cva, type VariantProps } from "class-variance-authority"
2860
-
2861
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2855
+ import { cn } from "cn"
2862
2856
 
2863
2857
  const buttonVariants = cva(
2864
2858
  "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -2920,6 +2914,7 @@ export { Button, buttonVariants }
2920
2914
  template: `"use client"
2921
2915
 
2922
2916
  import * as React from "react"
2917
+ import { cn } from "cn"
2923
2918
  import {
2924
2919
  DayPicker,
2925
2920
  getDefaultClassNames,
@@ -2927,7 +2922,6 @@ import {
2927
2922
  type Locale,
2928
2923
  } from "react-day-picker"
2929
2924
 
2930
- import { cn } from "@<%= projectName %>/ui/lib/utils"
2931
2925
  import { Button, buttonVariants } from "@<%= projectName %>/ui/components/button"
2932
2926
  import { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from "lucide-react"
2933
2927
 
@@ -3143,8 +3137,7 @@ export { Calendar, CalendarDayButton }
3143
3137
  {
3144
3138
  filename: "packages/ui/src/components/card.tsx",
3145
3139
  template: `import * as React from "react"
3146
-
3147
- import { cn } from "@<%= projectName %>/ui/lib/utils"
3140
+ import { cn } from "cn"
3148
3141
 
3149
3142
  function Card({
3150
3143
  className,
@@ -3252,11 +3245,11 @@ export {
3252
3245
  template: `"use client"
3253
3246
 
3254
3247
  import * as React from "react"
3248
+ import { cn } from "cn"
3255
3249
  import useEmblaCarousel, {
3256
3250
  type UseEmblaCarouselType,
3257
3251
  } from "embla-carousel-react"
3258
3252
 
3259
- import { cn } from "@<%= projectName %>/ui/lib/utils"
3260
3253
  import { Button } from "@<%= projectName %>/ui/components/button"
3261
3254
  import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"
3262
3255
 
@@ -3498,11 +3491,10 @@ export {
3498
3491
  template: `"use client"
3499
3492
 
3500
3493
  import * as React from "react"
3494
+ import { cn } from "cn"
3501
3495
  import * as RechartsPrimitive from "recharts"
3502
3496
  import type { TooltipValueType } from "recharts"
3503
3497
 
3504
- import { cn } from "@<%= projectName %>/ui/lib/utils"
3505
-
3506
3498
  // Format: { THEME_NAME: CSS_SELECTOR }
3507
3499
  const THEMES = { light: "", dark: ".dark" } as const
3508
3500
 
@@ -3875,8 +3867,7 @@ export {
3875
3867
  template: `"use client"
3876
3868
 
3877
3869
  import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox"
3878
-
3879
- import { cn } from "@<%= projectName %>/ui/lib/utils"
3870
+ import { cn } from "cn"
3880
3871
  import { CheckIcon } from "lucide-react"
3881
3872
 
3882
3873
  function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {
@@ -3934,8 +3925,8 @@ export { Collapsible, CollapsibleTrigger, CollapsibleContent }
3934
3925
 
3935
3926
  import * as React from "react"
3936
3927
  import { Command as CommandPrimitive } from "cmdk"
3928
+ import { cn } from "cn"
3937
3929
 
3938
- import { cn } from "@<%= projectName %>/ui/lib/utils"
3939
3930
  import {
3940
3931
  Dialog,
3941
3932
  DialogContent,
@@ -4134,8 +4125,8 @@ export {
4134
4125
 
4135
4126
  import * as React from "react"
4136
4127
  import { Combobox as ComboboxPrimitive } from "@base-ui/react"
4128
+ import { cn } from "cn"
4137
4129
 
4138
- import { cn } from "@<%= projectName %>/ui/lib/utils"
4139
4130
  import { Button } from "@<%= projectName %>/ui/components/button"
4140
4131
  import {
4141
4132
  InputGroup,
@@ -4435,8 +4426,7 @@ export {
4435
4426
 
4436
4427
  import * as React from "react"
4437
4428
  import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu"
4438
-
4439
- import { cn } from "@<%= projectName %>/ui/lib/utils"
4429
+ import { cn } from "cn"
4440
4430
  import { ChevronRightIcon, CheckIcon } from "lucide-react"
4441
4431
 
4442
4432
  function ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {
@@ -4710,8 +4700,8 @@ export {
4710
4700
 
4711
4701
  import * as React from "react"
4712
4702
  import { Dialog as DialogPrimitive } from "@base-ui/react/dialog"
4703
+ import { cn } from "cn"
4713
4704
 
4714
- import { cn } from "@<%= projectName %>/ui/lib/utils"
4715
4705
  import { Button } from "@<%= projectName %>/ui/components/button"
4716
4706
  import { XIcon } from "lucide-react"
4717
4707
 
@@ -4884,8 +4874,7 @@ export {
4884
4874
 
4885
4875
  import * as React from "react"
4886
4876
  import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer"
4887
-
4888
- import { cn } from "@<%= projectName %>/ui/lib/utils"
4877
+ import { cn } from "cn"
4889
4878
 
4890
4879
  type DrawerContextProps = {
4891
4880
  hasSnapPoints: boolean
@@ -5116,8 +5105,7 @@ export {
5116
5105
 
5117
5106
  import * as React from "react"
5118
5107
  import { Menu as MenuPrimitive } from "@base-ui/react/menu"
5119
-
5120
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5108
+ import { cn } from "cn"
5121
5109
  import { ChevronRightIcon, CheckIcon } from "lucide-react"
5122
5110
 
5123
5111
  function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
@@ -5385,8 +5373,7 @@ export {
5385
5373
  {
5386
5374
  filename: "packages/ui/src/components/empty.tsx",
5387
5375
  template: `import { cva, type VariantProps } from "class-variance-authority"
5388
-
5389
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5376
+ import { cn } from "cn"
5390
5377
 
5391
5378
  function Empty({ className, ...props }: React.ComponentProps<"div">) {
5392
5379
  return (
@@ -5496,8 +5483,8 @@ export {
5496
5483
 
5497
5484
  import { useMemo } from "react"
5498
5485
  import { cva, type VariantProps } from "class-variance-authority"
5486
+ import { cn } from "cn"
5499
5487
 
5500
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5501
5488
  import { Label } from "@<%= projectName %>/ui/components/label"
5502
5489
  import { Separator } from "@<%= projectName %>/ui/components/separator"
5503
5490
 
@@ -5737,8 +5724,7 @@ export {
5737
5724
  template: `"use client"
5738
5725
 
5739
5726
  import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card"
5740
-
5741
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5727
+ import { cn } from "cn"
5742
5728
 
5743
5729
  function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) {
5744
5730
  return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />
@@ -5792,8 +5778,8 @@ export { HoverCard, HoverCardTrigger, HoverCardContent }
5792
5778
  template: `import { mergeProps } from "@base-ui/react/merge-props"
5793
5779
  import { useRender } from "@base-ui/react/use-render"
5794
5780
  import { cva, type VariantProps } from "class-variance-authority"
5781
+ import { cn } from "cn"
5795
5782
 
5796
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5797
5783
  import { Separator } from "@<%= projectName %>/ui/components/separator"
5798
5784
 
5799
5785
  const buttonGroupVariants = cva(
@@ -5884,8 +5870,8 @@ export {
5884
5870
 
5885
5871
  import * as React from "react"
5886
5872
  import { cva, type VariantProps } from "class-variance-authority"
5873
+ import { cn } from "cn"
5887
5874
 
5888
- import { cn } from "@<%= projectName %>/ui/lib/utils"
5889
5875
  import { Button } from "@<%= projectName %>/ui/components/button"
5890
5876
  import { Input } from "@<%= projectName %>/ui/components/input"
5891
5877
  import { Textarea } from "@<%= projectName %>/ui/components/textarea"
@@ -6046,8 +6032,8 @@ export {
6046
6032
  import { mergeProps } from "@base-ui/react/merge-props"
6047
6033
  import { useRender } from "@base-ui/react/use-render"
6048
6034
  import { cva, type VariantProps } from "class-variance-authority"
6035
+ import { cn } from "cn"
6049
6036
 
6050
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6051
6037
  import { Separator } from "@<%= projectName %>/ui/components/separator"
6052
6038
 
6053
6039
  function ItemGroup({ className, ...props }: React.ComponentProps<"div">) {
@@ -6247,7 +6233,7 @@ export {
6247
6233
  },
6248
6234
  {
6249
6235
  filename: "packages/ui/src/components/kbd.tsx",
6250
- template: `import { cn } from "@<%= projectName %>/ui/lib/utils"
6236
+ template: `import { cn } from "cn"
6251
6237
 
6252
6238
  function Kbd({ className, ...props }: React.ComponentProps<"kbd">) {
6253
6239
  return (
@@ -6278,8 +6264,7 @@ export { Kbd, KbdGroup }
6278
6264
  {
6279
6265
  filename: "packages/ui/src/components/native-select.tsx",
6280
6266
  template: `import * as React from "react"
6281
-
6282
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6267
+ import { cn } from "cn"
6283
6268
  import { ChevronDownIcon } from "lucide-react"
6284
6269
 
6285
6270
  type NativeSelectProps = Omit<React.ComponentProps<"select">, "size"> & {
@@ -6342,7 +6327,7 @@ export { NativeSelect, NativeSelectOptGroup, NativeSelectOption }
6342
6327
  },
6343
6328
  {
6344
6329
  filename: "packages/ui/src/components/spinner.tsx",
6345
- template: `import { cn } from "@<%= projectName %>/ui/lib/utils"
6330
+ template: `import { cn } from "cn"
6346
6331
  import { Loader2Icon } from "lucide-react"
6347
6332
 
6348
6333
  function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
@@ -6359,9 +6344,8 @@ export { Spinner }
6359
6344
  template: `"use client"
6360
6345
 
6361
6346
  import * as React from "react"
6347
+ import { cn } from "cn"
6362
6348
  import { OTPInput, OTPInputContext } from "input-otp"
6363
-
6364
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6365
6349
  import { MinusIcon } from "lucide-react"
6366
6350
 
6367
6351
  function InputOTP({
@@ -6449,8 +6433,7 @@ export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }
6449
6433
  filename: "packages/ui/src/components/input.tsx",
6450
6434
  template: `import * as React from "react"
6451
6435
  import { Input as InputPrimitive } from "@base-ui/react/input"
6452
-
6453
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6436
+ import { cn } from "cn"
6454
6437
 
6455
6438
  function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6456
6439
  return (
@@ -6474,8 +6457,7 @@ export { Input }
6474
6457
  template: `"use client"
6475
6458
 
6476
6459
  import * as React from "react"
6477
-
6478
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6460
+ import { cn } from "cn"
6479
6461
 
6480
6462
  function Label({ className, ...props }: React.ComponentProps<"label">) {
6481
6463
  return (
@@ -6500,8 +6482,8 @@ export { Label }
6500
6482
  import * as React from "react"
6501
6483
  import { Menu as MenuPrimitive } from "@base-ui/react/menu"
6502
6484
  import { Menubar as MenubarPrimitive } from "@base-ui/react/menubar"
6485
+ import { cn } from "cn"
6503
6486
 
6504
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6505
6487
  import {
6506
6488
  DropdownMenu,
6507
6489
  DropdownMenuContent,
@@ -6781,8 +6763,7 @@ export {
6781
6763
  filename: "packages/ui/src/components/navigation-menu.tsx",
6782
6764
  template: `import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu"
6783
6765
  import { cva } from "class-variance-authority"
6784
-
6785
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6766
+ import { cn } from "cn"
6786
6767
  import { ChevronDownIcon } from "lucide-react"
6787
6768
 
6788
6769
  function NavigationMenu({
@@ -6952,8 +6933,8 @@ export {
6952
6933
  {
6953
6934
  filename: "packages/ui/src/components/pagination.tsx",
6954
6935
  template: `import * as React from "react"
6936
+ import { cn } from "cn"
6955
6937
 
6956
- import { cn } from "@<%= projectName %>/ui/lib/utils"
6957
6938
  import { Button } from "@<%= projectName %>/ui/components/button"
6958
6939
  import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from "lucide-react"
6959
6940
 
@@ -7089,8 +7070,7 @@ export {
7089
7070
 
7090
7071
  import * as React from "react"
7091
7072
  import { Popover as PopoverPrimitive } from "@base-ui/react/popover"
7092
-
7093
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7073
+ import { cn } from "cn"
7094
7074
 
7095
7075
  function Popover({ ...props }: PopoverPrimitive.Root.Props) {
7096
7076
  return <PopoverPrimitive.Root data-slot="popover" {...props} />
@@ -7182,8 +7162,7 @@ export {
7182
7162
  template: `"use client"
7183
7163
 
7184
7164
  import { Progress as ProgressPrimitive } from "@base-ui/react/progress"
7185
-
7186
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7165
+ import { cn } from "cn"
7187
7166
 
7188
7167
  function Progress({
7189
7168
  className,
@@ -7270,8 +7249,7 @@ export {
7270
7249
 
7271
7250
  import { Radio as RadioPrimitive } from "@base-ui/react/radio"
7272
7251
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group"
7273
-
7274
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7252
+ import { cn } from "cn"
7275
7253
 
7276
7254
  function RadioGroup({ className, ...props }: RadioGroupPrimitive.Props) {
7277
7255
  return (
@@ -7310,10 +7288,9 @@ export { RadioGroup, RadioGroupItem }
7310
7288
  filename: "packages/ui/src/components/resizable.tsx",
7311
7289
  template: `"use client"
7312
7290
 
7291
+ import { cn } from "cn"
7313
7292
  import * as ResizablePrimitive from "react-resizable-panels"
7314
7293
 
7315
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7316
-
7317
7294
  function ResizablePanelGroup({
7318
7295
  className,
7319
7296
  ...props
@@ -7366,8 +7343,7 @@ export { ResizableHandle, ResizablePanel, ResizablePanelGroup }
7366
7343
 
7367
7344
  import * as React from "react"
7368
7345
  import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area"
7369
-
7370
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7346
+ import { cn } from "cn"
7371
7347
 
7372
7348
  function ScrollArea({
7373
7349
  className,
@@ -7425,8 +7401,7 @@ export { ScrollArea, ScrollBar }
7425
7401
 
7426
7402
  import * as React from "react"
7427
7403
  import { Select as SelectPrimitive } from "@base-ui/react/select"
7428
-
7429
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7404
+ import { cn } from "cn"
7430
7405
  import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
7431
7406
 
7432
7407
  const Select = SelectPrimitive.Root
@@ -7629,8 +7604,7 @@ export {
7629
7604
  template: `"use client"
7630
7605
 
7631
7606
  import { Separator as SeparatorPrimitive } from "@base-ui/react/separator"
7632
-
7633
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7607
+ import { cn } from "cn"
7634
7608
 
7635
7609
  function Separator({
7636
7610
  className,
@@ -7659,8 +7633,8 @@ export { Separator }
7659
7633
 
7660
7634
  import * as React from "react"
7661
7635
  import { Dialog as SheetPrimitive } from "@base-ui/react/dialog"
7636
+ import { cn } from "cn"
7662
7637
 
7663
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7664
7638
  import { Button } from "@<%= projectName %>/ui/components/button"
7665
7639
  import { XIcon } from "lucide-react"
7666
7640
 
@@ -7803,9 +7777,9 @@ import * as React from "react"
7803
7777
  import { mergeProps } from "@base-ui/react/merge-props"
7804
7778
  import { useRender } from "@base-ui/react/use-render"
7805
7779
  import { cva, type VariantProps } from "class-variance-authority"
7780
+ import { cn } from "cn"
7806
7781
 
7807
7782
  import { useIsMobile } from "@<%= projectName %>/ui/hooks/use-mobile"
7808
- import { cn } from "@<%= projectName %>/ui/lib/utils"
7809
7783
  import { Button } from "@<%= projectName %>/ui/components/button"
7810
7784
  import { Input } from "@<%= projectName %>/ui/components/input"
7811
7785
  import { Separator } from "@<%= projectName %>/ui/components/separator"
@@ -8524,7 +8498,7 @@ export {
8524
8498
  },
8525
8499
  {
8526
8500
  filename: "packages/ui/src/components/skeleton.tsx",
8527
- template: `import { cn } from "@<%= projectName %>/ui/lib/utils"
8501
+ template: `import { cn } from "cn"
8528
8502
 
8529
8503
  function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
8530
8504
  return (
@@ -8542,8 +8516,7 @@ export { Skeleton }
8542
8516
  {
8543
8517
  filename: "packages/ui/src/components/slider.tsx",
8544
8518
  template: `import { Slider as SliderPrimitive } from "@base-ui/react/slider"
8545
-
8546
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8519
+ import { cn } from "cn"
8547
8520
 
8548
8521
  function Slider({
8549
8522
  className,
@@ -8653,8 +8626,7 @@ export { Toaster }
8653
8626
  template: `"use client"
8654
8627
 
8655
8628
  import { Switch as SwitchPrimitive } from "@base-ui/react/switch"
8656
-
8657
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8629
+ import { cn } from "cn"
8658
8630
 
8659
8631
  function Switch({
8660
8632
  className,
@@ -8689,8 +8661,7 @@ export { Switch }
8689
8661
  template: `"use client"
8690
8662
 
8691
8663
  import * as React from "react"
8692
-
8693
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8664
+ import { cn } from "cn"
8694
8665
 
8695
8666
  function Table({ className, ...props }: React.ComponentProps<"table">) {
8696
8667
  return (
@@ -8810,8 +8781,7 @@ export {
8810
8781
 
8811
8782
  import { Tabs as TabsPrimitive } from "@base-ui/react/tabs"
8812
8783
  import { cva, type VariantProps } from "class-variance-authority"
8813
-
8814
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8784
+ import { cn } from "cn"
8815
8785
 
8816
8786
  function Tabs({
8817
8787
  className,
@@ -8893,8 +8863,7 @@ export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }
8893
8863
  {
8894
8864
  filename: "packages/ui/src/components/textarea.tsx",
8895
8865
  template: `import * as React from "react"
8896
-
8897
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8866
+ import { cn } from "cn"
8898
8867
 
8899
8868
  function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
8900
8869
  return (
@@ -8920,8 +8889,8 @@ import * as React from "react"
8920
8889
  import { Toggle as TogglePrimitive } from "@base-ui/react/toggle"
8921
8890
  import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group"
8922
8891
  import { type VariantProps } from "class-variance-authority"
8892
+ import { cn } from "cn"
8923
8893
 
8924
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8925
8894
  import { toggleVariants } from "@<%= projectName %>/ui/components/toggle"
8926
8895
 
8927
8896
  const ToggleGroupContext = React.createContext<
@@ -9011,8 +8980,7 @@ export { ToggleGroup, ToggleGroupItem }
9011
8980
 
9012
8981
  import { Toggle as TogglePrimitive } from "@base-ui/react/toggle"
9013
8982
  import { cva, type VariantProps } from "class-variance-authority"
9014
-
9015
- import { cn } from "@<%= projectName %>/ui/lib/utils"
8983
+ import { cn } from "cn"
9016
8984
 
9017
8985
  const toggleVariants = cva(
9018
8986
  "group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -9059,8 +9027,7 @@ export { Toggle, toggleVariants }
9059
9027
  template: `"use client"
9060
9028
 
9061
9029
  import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip"
9062
-
9063
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9030
+ import { cn } from "cn"
9064
9031
 
9065
9032
  function TooltipProvider({
9066
9033
  delay = 0,
@@ -9155,8 +9122,8 @@ export function ModeToggle() {
9155
9122
  import { mergeProps } from "@base-ui/react/merge-props"
9156
9123
  import { useRender } from "@base-ui/react/use-render"
9157
9124
  import { cva, type VariantProps } from "class-variance-authority"
9125
+ import { cn } from "cn"
9158
9126
 
9159
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9160
9127
  import { Button } from "@<%= projectName %>/ui/components/button"
9161
9128
 
9162
9129
  const attachmentVariants = cva(
@@ -9366,8 +9333,7 @@ export {
9366
9333
  import { mergeProps } from "@base-ui/react/merge-props"
9367
9334
  import { useRender } from "@base-ui/react/use-render"
9368
9335
  import { cva, type VariantProps } from "class-variance-authority"
9369
-
9370
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9336
+ import { cn } from "cn"
9371
9337
 
9372
9338
  function BubbleGroup({ className, ...props }: React.ComponentProps<"div">) {
9373
9339
  return (
@@ -9498,8 +9464,7 @@ export { BubbleGroup, Bubble, BubbleContent, BubbleReactions }
9498
9464
  import { mergeProps } from "@base-ui/react/merge-props"
9499
9465
  import { useRender } from "@base-ui/react/use-render"
9500
9466
  import { cva, type VariantProps } from "class-variance-authority"
9501
-
9502
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9467
+ import { cn } from "cn"
9503
9468
 
9504
9469
  const markerVariants = cva(
9505
9470
  "group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground",
@@ -9570,8 +9535,7 @@ export { Marker, MarkerIcon, MarkerContent, markerVariants }
9570
9535
  {
9571
9536
  filename: "packages/ui/src/components/message.tsx",
9572
9537
  template: `import * as React from "react"
9573
-
9574
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9538
+ import { cn } from "cn"
9575
9539
 
9576
9540
  function MessageGroup({ className, ...props }: React.ComponentProps<"div">) {
9577
9541
  return (
@@ -9674,8 +9638,8 @@ import {
9674
9638
  useMessageScrollerScrollable,
9675
9639
  useMessageScrollerVisibility,
9676
9640
  } from "@shadcn/react/message-scroller"
9641
+ import { cn } from "cn"
9677
9642
 
9678
- import { cn } from "@<%= projectName %>/ui/lib/utils"
9679
9643
  import { Button } from "@<%= projectName %>/ui/components/button"
9680
9644
  import { ArrowDownIcon } from "lucide-react"
9681
9645
 
@@ -9709,7 +9673,7 @@ function MessageScrollerViewport({
9709
9673
  <MessageScrollerPrimitive.Viewport
9710
9674
  data-slot="message-scroller-viewport"
9711
9675
  className={cn(
9712
- "size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent",
9676
+ "size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent data-pending-scroll:invisible",
9713
9677
  className
9714
9678
  )}
9715
9679
  {...props}
@@ -10295,7 +10259,7 @@ export default function Home() {
10295
10259
  const { data: session, isPending } = authClient.useSession();
10296
10260
 
10297
10261
  const { data: hello } = useQuery({
10298
- queryKey: ['hello'],
10262
+ queryKey: ['hello', session?.user.id],
10299
10263
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
10300
10264
  });
10301
10265
 
@@ -10676,7 +10640,8 @@ var package_json_default$1 = {
10676
10640
  },
10677
10641
  "devDependencies": {
10678
10642
  "@eslint/js": "<%= versions["@eslint/js"] %>",
10679
- "@next/eslint-plugin-next": "<%= versions["@next/eslint-plugin-next"] %>",
10643
+ "@next/eslint-plugin-next": "<%= versions["@next/eslint-plugin-next"] %>",<% if (shadcn) { %>
10644
+ "@shadcn/lint": "<%= versions["@shadcn/lint"] %>",<% } %>
10680
10645
  "eslint": "<%= versions.eslint %>",
10681
10646
  "eslint-config-prettier": "<%= versions["eslint-config-prettier"] %>",
10682
10647
  "eslint-plugin-only-warn": "<%= versions["eslint-plugin-only-warn"] %>",
@@ -10738,7 +10703,8 @@ import pluginReactHooks from "eslint-plugin-react-hooks";
10738
10703
  import pluginReact from "eslint-plugin-react";
10739
10704
  import globals from "globals";
10740
10705
  import pluginNext from "@next/eslint-plugin-next";
10741
- import { config as baseConfig } from "./base.js";
10706
+ import { config as baseConfig } from "./base.js";<% if (shadcn) { %>
10707
+ import { plugin as shadcn } from "@shadcn/lint";<% } %>
10742
10708
 
10743
10709
  /**
10744
10710
  * A custom ESLint configuration for libraries that use Next.js.
@@ -10786,7 +10752,16 @@ export const nextJsConfig = [
10786
10752
  // React scope no longer necessary with new JSX transform.
10787
10753
  "react/react-in-jsx-scope": "off",
10788
10754
  },
10789
- },
10755
+ },<% if (shadcn) { %>
10756
+ {
10757
+ plugins: { shadcn },
10758
+ rules: {
10759
+ "shadcn/no-restyle": ["error", { allow: ["layout"] }],
10760
+ "shadcn/no-raw-colors": "error",
10761
+ "shadcn/no-arbitrary-values": ["error", { allow: ["layout"] }],
10762
+ "shadcn/require-static-classes": "error",
10763
+ },
10764
+ },<% } %>
10790
10765
  ];`
10791
10766
  };
10792
10767
  //#endregion
@@ -10799,7 +10774,8 @@ import tseslint from "typescript-eslint";
10799
10774
  import pluginReactHooks from "eslint-plugin-react-hooks";
10800
10775
  import pluginReact from "eslint-plugin-react";
10801
10776
  import globals from "globals";
10802
- import { config as baseConfig } from "./base.js";
10777
+ import { config as baseConfig } from "./base.js";<% if (shadcn) { %>
10778
+ import { plugin as shadcn } from "@shadcn/lint";<% } %>
10803
10779
 
10804
10780
  /**
10805
10781
  * A custom ESLint configuration for libraries that use React.
@@ -10831,7 +10807,24 @@ export const config = [
10831
10807
  "react/react-in-jsx-scope": "off",
10832
10808
  "react/prop-types": "off",
10833
10809
  },
10810
+ },<% if (shadcn) { %>
10811
+ {
10812
+ plugins: { shadcn },
10813
+ rules: {
10814
+ "shadcn/no-restyle": ["error", { allow: ["layout"] }],
10815
+ "shadcn/no-raw-colors": "error",
10816
+ "shadcn/no-arbitrary-values": ["error", { allow: ["layout"] }],
10817
+ "shadcn/require-static-classes": "error",
10818
+ },
10834
10819
  },
10820
+ {
10821
+ files: ["src/components/**"],
10822
+ rules: {
10823
+ "shadcn/no-restyle": "off",
10824
+ "shadcn/no-arbitrary-values": "off",
10825
+ "shadcn/require-static-classes": "off",
10826
+ },
10827
+ },<% } %>
10835
10828
  ];`
10836
10829
  };
10837
10830
  //#endregion
@@ -10899,6 +10892,13 @@ var prettierrc_default = {
10899
10892
  template: `{}`
10900
10893
  };
10901
10894
  //#endregion
10895
+ //#region src/templates/root/templates/prettierignore.ts
10896
+ var prettierignore_default = {
10897
+ filename: ".prettierignore",
10898
+ template: `pnpm-lock.yaml
10899
+ `
10900
+ };
10901
+ //#endregion
10902
10902
  //#region src/templates/eslint-config/index.ts
10903
10903
  const web = "apps/web";
10904
10904
  const api = "apps/api";
@@ -10913,7 +10913,8 @@ const eslintConfig = {
10913
10913
  eslint_config_default$2,
10914
10914
  eslint_config_default$1,
10915
10915
  eslint_config_default,
10916
- prettierrc_default
10916
+ prettierrc_default,
10917
+ prettierignore_default
10917
10918
  ],
10918
10919
  packages: [
10919
10920
  {
@@ -11034,9 +11035,9 @@ var oxlintrc_default = {
11034
11035
  "categories": {
11035
11036
  "correctness": "error"
11036
11037
  }<% if (antiSlop) { %>,
11037
- "ignorePatterns": ["tools/oxlint/anti-slop/**"],
11038
- "jsPlugins": [{ "name": "anti-slop", "specifier": "./tools/oxlint/anti-slop/index.ts" }],
11039
- "rules": {
11038
+ "ignorePatterns": ["tools/oxlint/anti-slop/**"]<% } %><% if (antiSlop || shadcn) { %>,
11039
+ "jsPlugins": [<% if (antiSlop) { %>{ "name": "anti-slop", "specifier": "./tools/oxlint/anti-slop/index.ts" }<% } %><% if (antiSlop && shadcn) { %>, <% } %><% if (shadcn) { %>"@shadcn/lint"<% } %>],
11040
+ "rules": {<% if (antiSlop) { %>
11040
11041
  "anti-slop/no-chained-type-assertions": "error",
11041
11042
  "anti-slop/no-conditional-empty-object-spread": "error",
11042
11043
  "anti-slop/no-known-value-widening": "error",
@@ -11051,12 +11052,16 @@ var oxlintrc_default = {
11051
11052
  "anti-slop/no-unknown-type-aliases": "error",
11052
11053
  "anti-slop/no-unsafe-dictionary-type": "error",
11053
11054
  "anti-slop/no-widen-then-assert": "error",
11054
- "anti-slop/require-safety-comment-for-type-assertion": "error"
11055
- }<% if (shadcn) { %>,
11055
+ "anti-slop/require-safety-comment-for-type-assertion": "error"<% if (shadcn) { %>,<% } %><% } %><% if (shadcn) { %>
11056
+ "shadcn/no-restyle": ["error", { "allow": ["layout"] }],
11057
+ "shadcn/no-raw-colors": "error",
11058
+ "shadcn/no-arbitrary-values": ["error", { "allow": ["layout"] }],
11059
+ "shadcn/require-static-classes": "error"<% } %>
11060
+ }<% } %><% if (shadcn) { %>,
11056
11061
  "overrides": [
11057
11062
  {
11058
11063
  "files": ["packages/ui/src/components/**"],
11059
- "rules": {
11064
+ "rules": {<% if (antiSlop) { %>
11060
11065
  "anti-slop/no-chained-type-assertions": "off",
11061
11066
  "anti-slop/no-conditional-empty-object-spread": "off",
11062
11067
  "anti-slop/no-known-value-widening": "off",
@@ -11071,10 +11076,13 @@ var oxlintrc_default = {
11071
11076
  "anti-slop/no-unknown-type-aliases": "off",
11072
11077
  "anti-slop/no-unsafe-dictionary-type": "off",
11073
11078
  "anti-slop/no-widen-then-assert": "off",
11074
- "anti-slop/require-safety-comment-for-type-assertion": "off"
11079
+ "anti-slop/require-safety-comment-for-type-assertion": "off",<% } %>
11080
+ "shadcn/no-restyle": "off",
11081
+ "shadcn/no-arbitrary-values": "off",
11082
+ "shadcn/require-static-classes": "off"
11075
11083
  }
11076
11084
  }
11077
- ]<% } %><% } %>
11085
+ ]<% } %>
11078
11086
  }`
11079
11087
  };
11080
11088
  //#endregion
@@ -11877,10 +11885,8 @@ const nestDiOnly = { templates: [
11877
11885
  "outDir": "./dist",
11878
11886
  "rootDir": "./src",
11879
11887
  "skipLibCheck": true,
11880
- "strictNullChecks": true,
11888
+ "strict": true,
11881
11889
  "forceConsistentCasingInFileNames": true,
11882
- "noImplicitAny": false,
11883
- "strictBindCallApply": false,
11884
11890
  "noFallthroughCasesInSwitch": false,
11885
11891
  "types": [<% if (testing === 'jest') { %>"jest", <% } %><% if (testing === 'vitest') { %>"vitest/globals", <% } %>"node"]
11886
11892
  },
@@ -12818,7 +12824,7 @@ export default function Home() {
12818
12824
  const { data: session, isPending } = authClient.useSession();
12819
12825
 
12820
12826
  const { data: hello } = useQuery({
12821
- queryKey: ['hello'],
12827
+ queryKey: ['hello', session?.user.id],
12822
12828
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
12823
12829
  });
12824
12830
 
@@ -13014,9 +13020,8 @@ export function TodoList({
13014
13020
  </span>
13015
13021
  <Button
13016
13022
  variant="ghost"
13017
- size="sm"
13023
+ size="icon-sm"
13018
13024
  onClick={() => deleteMutation.mutate(todo.id)}
13019
- className="text-muted-foreground hover:text-destructive h-7 w-7 p-0"
13020
13025
  >
13021
13026
  ×
13022
13027
  </Button>
@@ -13046,13 +13051,13 @@ import { Link } from '@<%= projectName %>/ui/link';
13046
13051
  import { Logo } from '@<%= projectName %>/ui/logo';
13047
13052
  import { TodoList } from '@/app/todo-list';
13048
13053
  import { ModeToggle } from '@<%= projectName %>/ui/mode-toggle';
13049
- import { Card, CardContent, CardHeader, CardTitle } from '@<%= projectName %>/ui/card';
13054
+ import { Card, CardContent, CardHeader } from '@<%= projectName %>/ui/card';
13050
13055
 
13051
13056
  export default function Home() {
13052
13057
  const { data: session, isPending } = authClient.useSession();
13053
13058
 
13054
13059
  const { data: hello } = useQuery({
13055
- queryKey: ['hello'],
13060
+ queryKey: ['hello', session?.user.id],
13056
13061
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
13057
13062
  });
13058
13063
 
@@ -13067,7 +13072,7 @@ export default function Home() {
13067
13072
  </div>
13068
13073
 
13069
13074
  <div className="flex items-center gap-3 py-2">
13070
- <Logo className="w-10 h-auto text-foreground" />
13075
+ <Logo className="w-10 h-auto" />
13071
13076
  <div>
13072
13077
  <h1 className="text-4xl font-black tracking-tight"><%= projectName %></h1>
13073
13078
  <p className="text-sm text-muted-foreground tracking-widest uppercase">
@@ -13078,9 +13083,9 @@ export default function Home() {
13078
13083
 
13079
13084
  <Card>
13080
13085
  <CardHeader>
13081
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13086
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13082
13087
  next.js
13083
- </CardTitle>
13088
+ </p>
13084
13089
  </CardHeader>
13085
13090
  <CardContent>
13086
13091
  <p className="font-mono text-sm text-muted-foreground">apps/web/app/layout.tsx</p>
@@ -13090,9 +13095,9 @@ export default function Home() {
13090
13095
 
13091
13096
  <Card>
13092
13097
  <CardHeader>
13093
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13098
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13094
13099
  nest.js
13095
- </CardTitle>
13100
+ </p>
13096
13101
  </CardHeader>
13097
13102
  <CardContent>
13098
13103
  <p className="font-mono text-sm text-muted-foreground">GET /api/hello</p>
@@ -13104,9 +13109,9 @@ export default function Home() {
13104
13109
 
13105
13110
  <Card>
13106
13111
  <CardHeader>
13107
- <CardTitle className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13112
+ <p className="text-xs font-mono uppercase tracking-widest text-muted-foreground">
13108
13113
  better-auth
13109
- </CardTitle>
13114
+ </p>
13110
13115
  </CardHeader>
13111
13116
  <CardContent>
13112
13117
  {isPending ? (
@@ -13400,7 +13405,7 @@ export default function Home() {
13400
13405
  const { data: session, isPending } = authClient.useSession();
13401
13406
 
13402
13407
  const { data: hello } = useQuery({
13403
- queryKey: ['hello'],
13408
+ queryKey: ['hello', session?.user.id],
13404
13409
  queryFn: () => fetch('/api/hello').then((r) => r.json()),
13405
13410
  });
13406
13411