create-zhx-monorepo 0.1.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.
Files changed (125) hide show
  1. package/README.md +34 -0
  2. package/bin/index.js +65 -0
  3. package/package.json +18 -0
  4. package/templates/monorepo-starter/.vscode/settings.json +3 -0
  5. package/templates/monorepo-starter/README.md +42 -0
  6. package/templates/monorepo-starter/apps/web/components.json +20 -0
  7. package/templates/monorepo-starter/apps/web/eslint.config.mjs +4 -0
  8. package/templates/monorepo-starter/apps/web/next-env.d.ts +6 -0
  9. package/templates/monorepo-starter/apps/web/next.config.mjs +6 -0
  10. package/templates/monorepo-starter/apps/web/package.json +31 -0
  11. package/templates/monorepo-starter/apps/web/postcss.config.mjs +1 -0
  12. package/templates/monorepo-starter/apps/web/public/.gitkeep +0 -0
  13. package/templates/monorepo-starter/apps/web/sitemap.config.cjs +6 -0
  14. package/templates/monorepo-starter/apps/web/src/app/(auth)/layout.tsx +7 -0
  15. package/templates/monorepo-starter/apps/web/src/app/(root)/layout.tsx +15 -0
  16. package/templates/monorepo-starter/apps/web/src/app/(root)/page.tsx +14 -0
  17. package/templates/monorepo-starter/apps/web/src/app/globals.css +1 -0
  18. package/templates/monorepo-starter/apps/web/src/app/layout.tsx +24 -0
  19. package/templates/monorepo-starter/apps/web/src/components/Footer.tsx +9 -0
  20. package/templates/monorepo-starter/apps/web/src/components/Header.tsx +11 -0
  21. package/templates/monorepo-starter/apps/web/src/components/ThemeSwitch.tsx +34 -0
  22. package/templates/monorepo-starter/apps/web/src/hooks/.gitkeep +0 -0
  23. package/templates/monorepo-starter/apps/web/src/lib/.gitkeep +0 -0
  24. package/templates/monorepo-starter/apps/web/src/providers/index.tsx +10 -0
  25. package/templates/monorepo-starter/apps/web/src/providers/theme.tsx +19 -0
  26. package/templates/monorepo-starter/apps/web/src/types/index.d.ts +16 -0
  27. package/templates/monorepo-starter/apps/web/tsconfig.json +20 -0
  28. package/templates/monorepo-starter/eslint.config.mjs +12 -0
  29. package/templates/monorepo-starter/package.json +23 -0
  30. package/templates/monorepo-starter/packages/config/eslint/base.js +31 -0
  31. package/templates/monorepo-starter/packages/config/eslint/nest.js +26 -0
  32. package/templates/monorepo-starter/packages/config/eslint/next.js +39 -0
  33. package/templates/monorepo-starter/packages/config/eslint/react.js +30 -0
  34. package/templates/monorepo-starter/packages/config/package.json +32 -0
  35. package/templates/monorepo-starter/packages/config/typescript/base.json +31 -0
  36. package/templates/monorepo-starter/packages/config/typescript/nest.json +14 -0
  37. package/templates/monorepo-starter/packages/config/typescript/next.json +10 -0
  38. package/templates/monorepo-starter/packages/config/typescript/react.json +9 -0
  39. package/templates/monorepo-starter/packages/ui/components.json +20 -0
  40. package/templates/monorepo-starter/packages/ui/eslint.config.mjs +4 -0
  41. package/templates/monorepo-starter/packages/ui/package.json +38 -0
  42. package/templates/monorepo-starter/packages/ui/postcss.config.mjs +6 -0
  43. package/templates/monorepo-starter/packages/ui/src/components/button.tsx +71 -0
  44. package/templates/monorepo-starter/packages/ui/src/hooks/.gitkeep +0 -0
  45. package/templates/monorepo-starter/packages/ui/src/lib/utils.ts +6 -0
  46. package/templates/monorepo-starter/packages/ui/src/styles/globals.css +182 -0
  47. package/templates/monorepo-starter/packages/ui/tsconfig.json +13 -0
  48. package/templates/monorepo-starter/packages/ui/tsconfig.lint.json +8 -0
  49. package/templates/monorepo-starter/pnpm-lock.yaml +12441 -0
  50. package/templates/monorepo-starter/pnpm-workspace.yaml +17 -0
  51. package/templates/monorepo-starter/server/.env.example +64 -0
  52. package/templates/monorepo-starter/server/README.md +63 -0
  53. package/templates/monorepo-starter/server/eslint.config.mjs +4 -0
  54. package/templates/monorepo-starter/server/nest-cli.json +12 -0
  55. package/templates/monorepo-starter/server/package.json +97 -0
  56. package/templates/monorepo-starter/server/prisma/generated/browser.ts +54 -0
  57. package/templates/monorepo-starter/server/prisma/generated/client.ts +76 -0
  58. package/templates/monorepo-starter/server/prisma/generated/commonInputTypes.ts +577 -0
  59. package/templates/monorepo-starter/server/prisma/generated/enums.ts +68 -0
  60. package/templates/monorepo-starter/server/prisma/generated/internal/class.ts +250 -0
  61. package/templates/monorepo-starter/server/prisma/generated/internal/prismaNamespace.ts +1436 -0
  62. package/templates/monorepo-starter/server/prisma/generated/internal/prismaNamespaceBrowser.ts +227 -0
  63. package/templates/monorepo-starter/server/prisma/generated/models/BackupCode.ts +1375 -0
  64. package/templates/monorepo-starter/server/prisma/generated/models/Notification.ts +1587 -0
  65. package/templates/monorepo-starter/server/prisma/generated/models/Otp.ts +1488 -0
  66. package/templates/monorepo-starter/server/prisma/generated/models/RefreshToken.ts +1515 -0
  67. package/templates/monorepo-starter/server/prisma/generated/models/RoleAssignment.ts +1385 -0
  68. package/templates/monorepo-starter/server/prisma/generated/models/SecuritySetting.ts +1422 -0
  69. package/templates/monorepo-starter/server/prisma/generated/models/User.ts +2498 -0
  70. package/templates/monorepo-starter/server/prisma/generated/models.ts +18 -0
  71. package/templates/monorepo-starter/server/prisma/migrations/20251218164821_init/migration.sql +210 -0
  72. package/templates/monorepo-starter/server/prisma/migrations/migration_lock.toml +3 -0
  73. package/templates/monorepo-starter/server/prisma/schema.prisma +193 -0
  74. package/templates/monorepo-starter/server/prisma.config.ts +13 -0
  75. package/templates/monorepo-starter/server/scripts/generate.sh +14 -0
  76. package/templates/monorepo-starter/server/src/app.module.ts +49 -0
  77. package/templates/monorepo-starter/server/src/lib/decorators/logger.decorator.ts +20 -0
  78. package/templates/monorepo-starter/server/src/lib/decorators/public.decorator.ts +4 -0
  79. package/templates/monorepo-starter/server/src/lib/decorators/roles.decorator.ts +5 -0
  80. package/templates/monorepo-starter/server/src/lib/dto/auth.dto.ts +64 -0
  81. package/templates/monorepo-starter/server/src/lib/dto/security-setting.dto.ts +21 -0
  82. package/templates/monorepo-starter/server/src/lib/filters/exceptions.filter.ts +62 -0
  83. package/templates/monorepo-starter/server/src/lib/guards/auth.guard.ts +104 -0
  84. package/templates/monorepo-starter/server/src/lib/interceptors/response.interceptor.ts +33 -0
  85. package/templates/monorepo-starter/server/src/lib/pipes/validation.pipe.ts +7 -0
  86. package/templates/monorepo-starter/server/src/lib/schemas/env.schema.ts +99 -0
  87. package/templates/monorepo-starter/server/src/lib/utils/cookie.util.ts +23 -0
  88. package/templates/monorepo-starter/server/src/lib/utils/general.util.ts +24 -0
  89. package/templates/monorepo-starter/server/src/main.ts +41 -0
  90. package/templates/monorepo-starter/server/src/modules/auth/auth.controller.ts +74 -0
  91. package/templates/monorepo-starter/server/src/modules/auth/auth.module.ts +16 -0
  92. package/templates/monorepo-starter/server/src/modules/auth/auth.service.ts +525 -0
  93. package/templates/monorepo-starter/server/src/modules/auth/oauth.controller.ts +58 -0
  94. package/templates/monorepo-starter/server/src/modules/auth/oauth.service.ts +165 -0
  95. package/templates/monorepo-starter/server/src/modules/auth/otp.service.ts +133 -0
  96. package/templates/monorepo-starter/server/src/modules/auth/role.service.ts +99 -0
  97. package/templates/monorepo-starter/server/src/modules/auth/security-setting.service.ts +102 -0
  98. package/templates/monorepo-starter/server/src/modules/env/env.module.ts +9 -0
  99. package/templates/monorepo-starter/server/src/modules/env/env.service.ts +22 -0
  100. package/templates/monorepo-starter/server/src/modules/logger/logger.module.ts +12 -0
  101. package/templates/monorepo-starter/server/src/modules/logger/logger.service.ts +37 -0
  102. package/templates/monorepo-starter/server/src/modules/logger/winston.config.ts +32 -0
  103. package/templates/monorepo-starter/server/src/modules/notification/notification.module.ts +11 -0
  104. package/templates/monorepo-starter/server/src/modules/notification/notification.service.ts +118 -0
  105. package/templates/monorepo-starter/server/src/modules/prisma/prisma.extension.ts +72 -0
  106. package/templates/monorepo-starter/server/src/modules/prisma/prisma.module.ts +9 -0
  107. package/templates/monorepo-starter/server/src/modules/prisma/prisma.service.ts +49 -0
  108. package/templates/monorepo-starter/server/src/modules/public/public.controller.ts +21 -0
  109. package/templates/monorepo-starter/server/src/modules/public/public.module.ts +9 -0
  110. package/templates/monorepo-starter/server/src/modules/public/public.service.ts +30 -0
  111. package/templates/monorepo-starter/server/src/modules/scheduler/cleanup.service.ts +33 -0
  112. package/templates/monorepo-starter/server/src/modules/scheduler/scheduler.module.ts +7 -0
  113. package/templates/monorepo-starter/server/src/modules/template/template.module.ts +8 -0
  114. package/templates/monorepo-starter/server/src/modules/template/template.service.ts +33 -0
  115. package/templates/monorepo-starter/server/src/modules/token/token.module.ts +11 -0
  116. package/templates/monorepo-starter/server/src/modules/token/token.service.ts +131 -0
  117. package/templates/monorepo-starter/server/src/types/express.d.ts +10 -0
  118. package/templates/monorepo-starter/server/src/types/index.d.ts +13 -0
  119. package/templates/monorepo-starter/server/templates/notification.templates.ts +243 -0
  120. package/templates/monorepo-starter/server/test/app.e2e-spec.ts +25 -0
  121. package/templates/monorepo-starter/server/test/jest-e2e.json +9 -0
  122. package/templates/monorepo-starter/server/tsconfig.json +23 -0
  123. package/templates/monorepo-starter/server/tsup.config.ts +14 -0
  124. package/templates/monorepo-starter/tsconfig.json +3 -0
  125. package/templates/monorepo-starter/turbo.json +21 -0
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "display": "Base Config",
4
+ "compilerOptions": {
5
+ "target": "es2024",
6
+ "lib": ["ES2024"],
7
+ "module": "ESNext",
8
+ "moduleResolution": "bundler",
9
+ "moduleDetection": "force",
10
+ "allowJs": true,
11
+ "allowSyntheticDefaultImports": true,
12
+ "esModuleInterop": true,
13
+ "forceConsistentCasingInFileNames": true,
14
+ "incremental": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true,
17
+ "declaration": true,
18
+ "declarationMap": true,
19
+ "resolveJsonModule": true,
20
+ "skipLibCheck": true,
21
+ "strict": true,
22
+ "sourceMap": true,
23
+ "noUnusedLocals": true,
24
+ "noUnusedParameters": true,
25
+ "noFallthroughCasesInSwitch": true,
26
+ "noUncheckedIndexedAccess": true,
27
+ "verbatimModuleSyntax": true,
28
+ "removeComments": true,
29
+ "noImplicitAny": true
30
+ }
31
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "display": "NestJS Config",
4
+ "extends": "./base.json",
5
+ "compilerOptions": {
6
+ "emitDecoratorMetadata": true,
7
+ "experimentalDecorators": true,
8
+ "strictNullChecks": true,
9
+ "noImplicitAny": false,
10
+ "strictBindCallApply": false,
11
+ "incremental": false,
12
+ "noEmit": false
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "display": "NextJS Config",
4
+ "extends": "./base.json",
5
+ "compilerOptions": {
6
+ "lib": ["ES2024", "DOM", "DOM.Iterable"],
7
+ "jsx": "preserve",
8
+ "plugins": [{ "name": "next" }]
9
+ }
10
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "display": "React Library",
4
+ "extends": "./base.json",
5
+ "compilerOptions": {
6
+ "lib": ["ES2024", "DOM", "DOM.Iterable"],
7
+ "jsx": "react-jsx"
8
+ }
9
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/styles/globals.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true
11
+ },
12
+ "iconLibrary": "lucide",
13
+ "aliases": {
14
+ "components": "@workspace/ui/components",
15
+ "utils": "@workspace/ui/lib/utils",
16
+ "hooks": "@workspace/ui/hooks",
17
+ "lib": "@workspace/ui/lib",
18
+ "ui": "@workspace/ui/components"
19
+ }
20
+ }
@@ -0,0 +1,4 @@
1
+ import { config } from "@workspace/config/eslint/react";
2
+
3
+ /** @type {import("eslint").Linter.Config} */
4
+ export default config;
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@workspace/ui",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "private": true,
6
+ "scripts": {
7
+ "lint": "eslint . --max-warnings 0"
8
+ },
9
+ "dependencies": {
10
+ "@radix-ui/react-slot": "^1.2.4",
11
+ "class-variance-authority": "^0.7.1",
12
+ "clsx": "^2.1.1",
13
+ "lucide-react": "^0.562.0",
14
+ "next": "^16.0.10",
15
+ "next-themes": "^0.4.6",
16
+ "react": "^19.2.3",
17
+ "react-dom": "^19.2.3",
18
+ "tailwind-merge": "^3.4.0",
19
+ "tw-animate-css": "^1.4.0",
20
+ "zod": "^4.2.1"
21
+ },
22
+ "devDependencies": {
23
+ "@tailwindcss/postcss": "^4.1.18",
24
+ "@turbo/gen": "^2.6.3",
25
+ "@types/node": "^25.0.3",
26
+ "@types/react": "^19.2.7",
27
+ "@types/react-dom": "^19.2.3",
28
+ "@workspace/config": "workspace:*",
29
+ "tailwindcss": "^4.1.18"
30
+ },
31
+ "exports": {
32
+ "./globals.css": "./src/styles/globals.css",
33
+ "./postcss.config": "./postcss.config.mjs",
34
+ "./lib/*": "./src/lib/*.ts",
35
+ "./components/*": "./src/components/*.tsx",
36
+ "./hooks/*": "./src/hooks/*.ts"
37
+ }
38
+ }
@@ -0,0 +1,6 @@
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: { "@tailwindcss/postcss": {} },
4
+ };
5
+
6
+ export default config;
@@ -0,0 +1,71 @@
1
+ import * as React from "react";
2
+ import { Slot } from "@radix-ui/react-slot";
3
+ import { cva, type VariantProps } from "class-variance-authority";
4
+ import Link from "next/link";
5
+
6
+ import { cn } from "@workspace/ui/lib/utils";
7
+
8
+ const buttonVariants = cva(
9
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default:
14
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
15
+ destructive:
16
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
17
+ outline:
18
+ "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
19
+ secondary:
20
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
21
+ ghost: "hover:bg-accent hover:text-accent-foreground",
22
+ link: "text-primary underline-offset-4 hover:underline",
23
+ },
24
+ size: {
25
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
26
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
27
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
28
+ icon: "size-9",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ variant: "default",
33
+ size: "default",
34
+ },
35
+ }
36
+ );
37
+
38
+ export type ButtonVariants = VariantProps<typeof buttonVariants>;
39
+ export type ButtonProps = React.ComponentProps<"button"> &
40
+ ButtonVariants & {
41
+ asChild?: boolean;
42
+ href?: string;
43
+ };
44
+
45
+ function Button({
46
+ className,
47
+ variant,
48
+ size,
49
+ asChild = false,
50
+ href,
51
+ ...props
52
+ }: ButtonProps) {
53
+ const Comp = asChild ? Slot : "button";
54
+
55
+ return href ? (
56
+ <Slot
57
+ data-slot="button"
58
+ className={cn(buttonVariants({ variant, size, className }))}
59
+ {...props}
60
+ >
61
+ <Link href={href}>{props.children}</Link>
62
+ </Slot>
63
+ ) : (
64
+ <Comp
65
+ data-slot="button"
66
+ className={cn(buttonVariants({ variant, size, className }))}
67
+ {...props}
68
+ />
69
+ );
70
+ }
71
+ export { Button, buttonVariants };
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,182 @@
1
+ @import "tailwindcss";
2
+ @source "../../../apps/**/*.{ts,tsx}";
3
+ @source "../../../components/**/*.{ts,tsx}";
4
+ @source "../**/*.{ts,tsx}";
5
+
6
+ @import "tw-animate-css";
7
+
8
+ @custom-variant dark (&:is(.dark *));
9
+ @custom-variant portrait (@media (orientation: portrait));
10
+ @custom-variant landscape (@media (orientation: landscape));
11
+
12
+ :root {
13
+ --background: oklch(1 0 0);
14
+ --foreground: oklch(0.145 0 0);
15
+ --card: oklch(1 0 0);
16
+ --card-foreground: oklch(0.145 0 0);
17
+ --popover: oklch(1 0 0);
18
+ --popover-foreground: oklch(0.145 0 0);
19
+ --primary: oklch(0.205 0 0);
20
+ --primary-foreground: oklch(0.985 0 0);
21
+ --secondary: oklch(0.97 0 0);
22
+ --secondary-foreground: oklch(0.205 0 0);
23
+ --muted: oklch(0.97 0 0);
24
+ --muted-foreground: oklch(0.556 0 0);
25
+ --accent: oklch(0.97 0 0);
26
+ --accent-foreground: oklch(0.205 0 0);
27
+ --destructive: oklch(0.577 0.245 27.325);
28
+ --destructive-foreground: oklch(0.577 0.245 27.325);
29
+ --border: oklch(0.922 0 0);
30
+ --input: oklch(0.922 0 0);
31
+ --ring: oklch(0.708 0 0);
32
+ --chart-1: oklch(0.646 0.222 41.116);
33
+ --chart-2: oklch(0.6 0.118 184.704);
34
+ --chart-3: oklch(0.398 0.07 227.392);
35
+ --chart-4: oklch(0.828 0.189 84.429);
36
+ --chart-5: oklch(0.769 0.188 70.08);
37
+ --radius: 0.625rem;
38
+ --sidebar: oklch(0.985 0 0);
39
+ --sidebar-foreground: oklch(0.145 0 0);
40
+ --sidebar-primary: oklch(0.205 0 0);
41
+ --sidebar-primary-foreground: oklch(0.985 0 0);
42
+ --sidebar-accent: oklch(0.97 0 0);
43
+ --sidebar-accent-foreground: oklch(0.205 0 0);
44
+ --sidebar-border: oklch(0.922 0 0);
45
+ --sidebar-ring: oklch(0.708 0 0);
46
+ }
47
+
48
+ .dark {
49
+ --background: oklch(0.145 0 0);
50
+ --foreground: oklch(0.985 0 0);
51
+ --card: oklch(0.145 0 0);
52
+ --card-foreground: oklch(0.985 0 0);
53
+ --popover: oklch(0.145 0 0);
54
+ --popover-foreground: oklch(0.985 0 0);
55
+ --primary: oklch(0.985 0 0);
56
+ --primary-foreground: oklch(0.205 0 0);
57
+ --secondary: oklch(0.269 0 0);
58
+ --secondary-foreground: oklch(0.985 0 0);
59
+ --muted: oklch(0.269 0 0);
60
+ --muted-foreground: oklch(0.708 0 0);
61
+ --accent: oklch(0.269 0 0);
62
+ --accent-foreground: oklch(0.985 0 0);
63
+ --destructive: oklch(0.396 0.141 25.723);
64
+ --destructive-foreground: oklch(0.637 0.237 25.331);
65
+ --border: oklch(0.269 0 0);
66
+ --input: oklch(0.269 0 0);
67
+ --ring: oklch(0.556 0 0);
68
+ --chart-1: oklch(0.488 0.243 264.376);
69
+ --chart-2: oklch(0.696 0.17 162.48);
70
+ --chart-3: oklch(0.769 0.188 70.08);
71
+ --chart-4: oklch(0.627 0.265 303.9);
72
+ --chart-5: oklch(0.645 0.246 16.439);
73
+ --sidebar: oklch(0.205 0 0);
74
+ --sidebar-foreground: oklch(0.985 0 0);
75
+ --sidebar-primary: oklch(0.488 0.243 264.376);
76
+ --sidebar-primary-foreground: oklch(0.985 0 0);
77
+ --sidebar-accent: oklch(0.269 0 0);
78
+ --sidebar-accent-foreground: oklch(0.985 0 0);
79
+ --sidebar-border: oklch(0.269 0 0);
80
+ --sidebar-ring: oklch(0.439 0 0);
81
+ }
82
+
83
+ @theme inline {
84
+ --color-background: var(--background);
85
+ --color-foreground: var(--foreground);
86
+ --color-card: var(--card);
87
+ --color-card-foreground: var(--card-foreground);
88
+ --color-popover: var(--popover);
89
+ --color-popover-foreground: var(--popover-foreground);
90
+ --color-primary: var(--primary);
91
+ --color-primary-foreground: var(--primary-foreground);
92
+ --color-secondary: var(--secondary);
93
+ --color-secondary-foreground: var(--secondary-foreground);
94
+ --color-muted: var(--muted);
95
+ --color-muted-foreground: var(--muted-foreground);
96
+ --color-accent: var(--accent);
97
+ --color-accent-foreground: var(--accent-foreground);
98
+ --color-destructive: var(--destructive);
99
+ --color-destructive-foreground: var(--destructive-foreground);
100
+ --color-border: var(--border);
101
+ --color-input: var(--input);
102
+ --color-ring: var(--ring);
103
+ --color-chart-1: var(--chart-1);
104
+ --color-chart-2: var(--chart-2);
105
+ --color-chart-3: var(--chart-3);
106
+ --color-chart-4: var(--chart-4);
107
+ --color-chart-5: var(--chart-5);
108
+ --radius-sm: calc(var(--radius) - 4px);
109
+ --radius-md: calc(var(--radius) - 2px);
110
+ --radius-lg: var(--radius);
111
+ --radius-xl: calc(var(--radius) + 4px);
112
+ --color-sidebar: var(--sidebar);
113
+ --color-sidebar-foreground: var(--sidebar-foreground);
114
+ --color-sidebar-primary: var(--sidebar-primary);
115
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
116
+ --color-sidebar-accent: var(--sidebar-accent);
117
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
118
+ --color-sidebar-border: var(--sidebar-border);
119
+ --color-sidebar-ring: var(--sidebar-ring);
120
+ }
121
+
122
+ @layer base {
123
+ * {
124
+ @apply !border-border outline-ring/50;
125
+ }
126
+
127
+ html {
128
+ scroll-behavior: smooth;
129
+ }
130
+
131
+ body {
132
+ @apply bg-background text-foreground;
133
+ }
134
+
135
+ button {
136
+ @apply cursor-pointer;
137
+ }
138
+
139
+ a,
140
+ span,
141
+ b,
142
+ strong,
143
+ i,
144
+ em,
145
+ u,
146
+ small,
147
+ abbr,
148
+ code,
149
+ img,
150
+ input,
151
+ label,
152
+ textarea,
153
+ select {
154
+ @apply inline-block;
155
+ }
156
+
157
+ img {
158
+ @apply max-w-full object-cover;
159
+ }
160
+
161
+ header,
162
+ footer {
163
+ @apply section-container;
164
+ }
165
+
166
+ main {
167
+ @apply !space-y-16;
168
+
169
+ > section {
170
+ @apply section-container;
171
+ }
172
+ }
173
+ }
174
+
175
+ /* Utility class for flex-center */
176
+ .flex-center {
177
+ @apply flex items-center justify-center;
178
+ }
179
+
180
+ @utility section-container {
181
+ @apply w-full mx-auto px-4 sm:px-6 md:px-8 lg:px-10 xl:px-12;
182
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "extends": "@workspace/config/typescript/react",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "outDir": "dist",
6
+ "rootDir": ".",
7
+ "paths": {
8
+ "@workspace/ui/*": ["src/*"]
9
+ }
10
+ },
11
+ "include": ["."],
12
+ "exclude": ["node_modules", "dist"]
13
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "@workspace/config/typescript/react",
3
+ "compilerOptions": {
4
+ "outDir": "dist"
5
+ },
6
+ "include": ["src", "turbo"],
7
+ "exclude": ["node_modules", "dist"]
8
+ }