startx 0.0.1
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/.editorconfig +20 -0
- package/.prettierignore +24 -0
- package/.prettierrc.js +52 -0
- package/.vscode/settings.json +3 -0
- package/LICENSE +21 -0
- package/apps/core-server/.env.example +24 -0
- package/apps/core-server/Dockerfile +61 -0
- package/apps/core-server/eslint.config.mjs +47 -0
- package/apps/core-server/package.json +73 -0
- package/apps/core-server/src/config/custom-type.ts +54 -0
- package/apps/core-server/src/events/index.ts +37 -0
- package/apps/core-server/src/index.ts +19 -0
- package/apps/core-server/src/middlewares/auth-middleware.ts +50 -0
- package/apps/core-server/src/middlewares/cors-middleware.ts +6 -0
- package/apps/core-server/src/middlewares/error-middleware.ts +23 -0
- package/apps/core-server/src/middlewares/logger-middleware.ts +21 -0
- package/apps/core-server/src/middlewares/notfound-middleware.ts +14 -0
- package/apps/core-server/src/middlewares/serve-static.ts +24 -0
- package/apps/core-server/src/routes/files/router.ts +7 -0
- package/apps/core-server/src/routes/server.ts +36 -0
- package/apps/core-server/tsconfig.json +10 -0
- package/apps/core-server/tsdown.config.ts +14 -0
- package/biome.json +62 -0
- package/configs/eslint-config/package.json +60 -0
- package/configs/eslint-config/plugins.d.ts +1 -0
- package/configs/eslint-config/src/configs/base.ts +237 -0
- package/configs/eslint-config/src/configs/frontend.ts +62 -0
- package/configs/eslint-config/src/configs/node.ts +10 -0
- package/configs/eslint-config/src/plugin.ts +25 -0
- package/configs/eslint-config/src/rules/index.ts +30 -0
- package/configs/eslint-config/src/rules/no-argument-spread.test.ts +47 -0
- package/configs/eslint-config/src/rules/no-argument-spread.ts +96 -0
- package/configs/eslint-config/src/rules/no-dynamic-import-template.ts +32 -0
- package/configs/eslint-config/src/rules/no-internal-package-import.ts +40 -0
- package/configs/eslint-config/src/rules/no-interpolation-in-regular-string.ts +32 -0
- package/configs/eslint-config/src/rules/no-json-parse-json-stringify.test.ts +34 -0
- package/configs/eslint-config/src/rules/no-json-parse-json-stringify.ts +49 -0
- package/configs/eslint-config/src/rules/no-plain-errors.ts +50 -0
- package/configs/eslint-config/src/rules/no-skipped-tests.ts +61 -0
- package/configs/eslint-config/src/rules/no-top-level-relative-imports-in-backend-module.ts +27 -0
- package/configs/eslint-config/src/rules/no-type-unsafe-event-emitter.ts +33 -0
- package/configs/eslint-config/src/rules/no-uncaught-json-parse.test.ts +21 -0
- package/configs/eslint-config/src/rules/no-uncaught-json-parse.ts +45 -0
- package/configs/eslint-config/src/rules/no-untyped-config-class-field.ts +26 -0
- package/configs/eslint-config/src/rules/no-unused-param-catch-clause.ts +33 -0
- package/configs/eslint-config/src/rules/no-useless-catch-throw.test.ts +34 -0
- package/configs/eslint-config/src/rules/no-useless-catch-throw.ts +47 -0
- package/configs/eslint-config/src/utils/json.ts +21 -0
- package/configs/eslint-config/tsconfig.json +8 -0
- package/configs/eslint-config/tsdown.config.ts +11 -0
- package/configs/eslint-config/vitest.config.ts +3 -0
- package/configs/tsdown-config/package.json +14 -0
- package/configs/tsdown-config/src/config/tsdown.base.ts +13 -0
- package/configs/typescript-config/package.json +10 -0
- package/configs/typescript-config/tsconfig.common.json +32 -0
- package/configs/typescript-config/tsconfig.frontend.json +14 -0
- package/configs/typescript-config/tsconfig.node.json +9 -0
- package/configs/vitest-config/package.json +25 -0
- package/configs/vitest-config/src/base.ts +34 -0
- package/configs/vitest-config/src/frontend.ts +15 -0
- package/configs/vitest-config/src/node.ts +5 -0
- package/configs/vitest-config/tsconfig.json +7 -0
- package/package.json +47 -0
- package/packages/@repo/constants/eslint.config.mjs +21 -0
- package/packages/@repo/constants/package.json +19 -0
- package/packages/@repo/constants/src/api.ts +1 -0
- package/packages/@repo/constants/src/index.ts +8 -0
- package/packages/@repo/constants/src/time.ts +23 -0
- package/packages/@repo/constants/tsconfig.json +7 -0
- package/packages/@repo/db/eslint.config.mjs +21 -0
- package/packages/@repo/db/package.json +30 -0
- package/packages/@repo/db/src/functions.ts +122 -0
- package/packages/@repo/db/src/index.ts +20 -0
- package/packages/@repo/db/src/schema/common.ts +49 -0
- package/packages/@repo/db/src/schema/index.ts +1 -0
- package/packages/@repo/db/tsconfig.json +13 -0
- package/packages/@repo/lib/eslint.config.mjs +49 -0
- package/packages/@repo/lib/package.json +57 -0
- package/packages/@repo/lib/src/bucket-module/file-storage.ts +49 -0
- package/packages/@repo/lib/src/bucket-module/s3-storage.ts +114 -0
- package/packages/@repo/lib/src/bucket-module/utils.ts +11 -0
- package/packages/@repo/lib/src/command-module.ts +77 -0
- package/packages/@repo/lib/src/constants.ts +3 -0
- package/packages/@repo/lib/src/cookie-module.ts +42 -0
- package/packages/@repo/lib/src/custom-type.ts +54 -0
- package/packages/@repo/lib/src/env.ts +13 -0
- package/packages/@repo/lib/src/error-handlers-module/index.ts +11 -0
- package/packages/@repo/lib/src/file-system/index.ts +90 -0
- package/packages/@repo/lib/src/hashing-module.ts +9 -0
- package/packages/@repo/lib/src/index.ts +27 -0
- package/packages/@repo/lib/src/logger-module/log-config.ts +16 -0
- package/packages/@repo/lib/src/logger-module/logger.ts +78 -0
- package/packages/@repo/lib/src/logger-module/memory-profiler.ts +65 -0
- package/packages/@repo/lib/src/mail-module/api.ts +0 -0
- package/packages/@repo/lib/src/mail-module/mock.ts +8 -0
- package/packages/@repo/lib/src/mail-module/nodemailer.ts +45 -0
- package/packages/@repo/lib/src/notification-module/index.ts +172 -0
- package/packages/@repo/lib/src/notification-module/push-notification.ts +90 -0
- package/packages/@repo/lib/src/oauth2-client.ts +109 -0
- package/packages/@repo/lib/src/otp-module.ts +98 -0
- package/packages/@repo/lib/src/pagination-module.ts +49 -0
- package/packages/@repo/lib/src/token-module.ts +35 -0
- package/packages/@repo/lib/src/user-session.ts +117 -0
- package/packages/@repo/lib/src/utils.ts +42 -0
- package/packages/@repo/lib/src/validation-module.ts +187 -0
- package/packages/@repo/lib/tsconfig.json +7 -0
- package/packages/@repo/mail/package.json +29 -0
- package/packages/@repo/mail/src/emails/admin/OtpEmail.tsx +168 -0
- package/packages/@repo/mail/src/index.ts +13 -0
- package/packages/@repo/mail/tsconfig.build.json +14 -0
- package/packages/@repo/mail/tsconfig.json +13 -0
- package/packages/@repo/mail/tsdown.config.ts +9 -0
- package/packages/@repo/redis/eslint.config.mjs +8 -0
- package/packages/@repo/redis/package.json +31 -0
- package/packages/@repo/redis/src/index.ts +2 -0
- package/packages/@repo/redis/src/lib/redis-client.ts +23 -0
- package/packages/@repo/redis/src/lib/redis-module.ts +3 -0
- package/packages/@repo/redis/tsconfig.json +12 -0
- package/packages/ui/components.json +17 -0
- package/packages/ui/eslint.config.mjs +18 -0
- package/packages/ui/package.json +67 -0
- package/packages/ui/postcss.config.mjs +9 -0
- package/packages/ui/src/components/custom/form-wrapper.tsx +551 -0
- package/packages/ui/src/components/custom/grid-component.tsx +23 -0
- package/packages/ui/src/components/custom/hover-tool.tsx +38 -0
- package/packages/ui/src/components/custom/image-picker.tsx +109 -0
- package/packages/ui/src/components/custom/no-content.tsx +37 -0
- package/packages/ui/src/components/custom/page-container.tsx +24 -0
- package/packages/ui/src/components/custom/page-section.tsx +59 -0
- package/packages/ui/src/components/custom/simple-popover.tsx +29 -0
- package/packages/ui/src/components/custom/switch-component.tsx +20 -0
- package/packages/ui/src/components/custom/theme-provider.tsx +74 -0
- package/packages/ui/src/components/custom/typography.tsx +111 -0
- package/packages/ui/src/components/extensions/carousel.tsx +392 -0
- package/packages/ui/src/components/hooks/event/use-click.tsx +39 -0
- package/packages/ui/src/components/hooks/time/useDebounce.tsx +21 -0
- package/packages/ui/src/components/hooks/time/useInterval.tsx +35 -0
- package/packages/ui/src/components/hooks/time/useTimeout.tsx +19 -0
- package/packages/ui/src/components/hooks/time/useTimer.tsx +51 -0
- package/packages/ui/src/components/hooks/use-media-query.tsx +19 -0
- package/packages/ui/src/components/hooks/use-persistent-storage.tsx +52 -0
- package/packages/ui/src/components/hooks/use-update-effect.tsx +13 -0
- package/packages/ui/src/components/hooks/use-window-dimension.tsx +30 -0
- package/packages/ui/src/components/lib/utils.ts +242 -0
- package/packages/ui/src/components/lucide.tsx +3 -0
- package/packages/ui/src/components/sonner.tsx +1 -0
- package/packages/ui/src/components/ui/alert-dialog.tsx +116 -0
- package/packages/ui/src/components/ui/avatar.tsx +53 -0
- package/packages/ui/src/components/ui/badge.tsx +46 -0
- package/packages/ui/src/components/ui/breadcrumb.tsx +109 -0
- package/packages/ui/src/components/ui/button.tsx +96 -0
- package/packages/ui/src/components/ui/card.tsx +92 -0
- package/packages/ui/src/components/ui/carousel.tsx +243 -0
- package/packages/ui/src/components/ui/checkbox.tsx +32 -0
- package/packages/ui/src/components/ui/command.tsx +155 -0
- package/packages/ui/src/components/ui/dialog.tsx +127 -0
- package/packages/ui/src/components/ui/dropdown-menu.tsx +226 -0
- package/packages/ui/src/components/ui/form.tsx +165 -0
- package/packages/ui/src/components/ui/input-otp.tsx +76 -0
- package/packages/ui/src/components/ui/input.tsx +21 -0
- package/packages/ui/src/components/ui/label.tsx +24 -0
- package/packages/ui/src/components/ui/multiple-select.tsx +510 -0
- package/packages/ui/src/components/ui/popover.tsx +42 -0
- package/packages/ui/src/components/ui/select.tsx +170 -0
- package/packages/ui/src/components/ui/separator.tsx +28 -0
- package/packages/ui/src/components/ui/sheet.tsx +130 -0
- package/packages/ui/src/components/ui/skeleton.tsx +13 -0
- package/packages/ui/src/components/ui/spinner.tsx +16 -0
- package/packages/ui/src/components/ui/switch.tsx +28 -0
- package/packages/ui/src/components/ui/table.tsx +116 -0
- package/packages/ui/src/components/ui/tabs.tsx +54 -0
- package/packages/ui/src/components/ui/textarea.tsx +18 -0
- package/packages/ui/src/components/ui/timeline.tsx +118 -0
- package/packages/ui/src/components/ui/tooltip.tsx +30 -0
- package/packages/ui/src/components/util/n-formattor.ts +22 -0
- package/packages/ui/src/components/util/storage.ts +37 -0
- package/packages/ui/src/globals.css +87 -0
- package/packages/ui/tailwind.config.ts +94 -0
- package/packages/ui/tsconfig.json +12 -0
- package/pnpm-workspace.yaml +43 -0
- package/turbo.json +77 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
|
|
6
|
+
import { cn } from '../lib/utils';
|
|
7
|
+
|
|
8
|
+
const TooltipProvider = TooltipPrimitive.Provider;
|
|
9
|
+
|
|
10
|
+
const Tooltip = TooltipPrimitive.Root;
|
|
11
|
+
|
|
12
|
+
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
13
|
+
|
|
14
|
+
const TooltipContent = React.forwardRef<
|
|
15
|
+
React.ElementRef<typeof TooltipPrimitive.Content>,
|
|
16
|
+
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
|
|
17
|
+
>(({ className, sideOffset = 4, ...props }, ref) => (
|
|
18
|
+
<TooltipPrimitive.Content
|
|
19
|
+
ref={ref}
|
|
20
|
+
sideOffset={sideOffset}
|
|
21
|
+
className={cn(
|
|
22
|
+
'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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',
|
|
23
|
+
className,
|
|
24
|
+
)}
|
|
25
|
+
{...props}
|
|
26
|
+
/>
|
|
27
|
+
));
|
|
28
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
29
|
+
|
|
30
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function nFormatter(num: number, digits?: number) {
|
|
2
|
+
if (!num) return "0";
|
|
3
|
+
const lookup = [
|
|
4
|
+
{ value: 1, symbol: "" },
|
|
5
|
+
{ value: 1e3, symbol: "K" },
|
|
6
|
+
{ value: 1e6, symbol: "M" },
|
|
7
|
+
{ value: 1e9, symbol: "B" },
|
|
8
|
+
{ value: 1e12, symbol: "T" },
|
|
9
|
+
{ value: 1e15, symbol: "P" },
|
|
10
|
+
{ value: 1e18, symbol: "E" },
|
|
11
|
+
];
|
|
12
|
+
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
|
13
|
+
const item = lookup
|
|
14
|
+
.slice()
|
|
15
|
+
.reverse()
|
|
16
|
+
.find(function (item) {
|
|
17
|
+
return num >= item.value;
|
|
18
|
+
});
|
|
19
|
+
return item
|
|
20
|
+
? (num / item.value).toFixed(digits ?? 1).replace(rx, "$1") + item.symbol
|
|
21
|
+
: "0";
|
|
22
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
export interface Store<T = Record<string, any>> {
|
|
4
|
+
_store: T;
|
|
5
|
+
get(key: string): string | null;
|
|
6
|
+
set(key: string, value: string): void;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const InMemoryStorage: Store = {
|
|
10
|
+
_store: {},
|
|
11
|
+
get(key: string): string | null {
|
|
12
|
+
return this._store[key];
|
|
13
|
+
},
|
|
14
|
+
set(key: string, value: string): void {
|
|
15
|
+
this._store[key] = value;
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const SessionStorageStore: Store = {
|
|
20
|
+
_store: {},
|
|
21
|
+
get(key: string): string | null {
|
|
22
|
+
return sessionStorage.getItem(key);
|
|
23
|
+
},
|
|
24
|
+
set(key: string, value: string): void {
|
|
25
|
+
sessionStorage.setItem(key, value);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const LocalStorageStore: Store = {
|
|
30
|
+
_store: {},
|
|
31
|
+
get(key: string): string | null {
|
|
32
|
+
return localStorage.getItem(key);
|
|
33
|
+
},
|
|
34
|
+
set(key: string, value: string): void {
|
|
35
|
+
localStorage.setItem(key, value);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
@config "../tailwind.config.ts";
|
|
3
|
+
@source "../**/*.{ts,tsx}";
|
|
4
|
+
|
|
5
|
+
@custom-variant dark (&:is(.dark *));
|
|
6
|
+
|
|
7
|
+
@layer base {
|
|
8
|
+
:root {
|
|
9
|
+
--background: 0 0% 100%;
|
|
10
|
+
--foreground: 224 71.4% 4.1%;
|
|
11
|
+
--card: 0 0% 100%;
|
|
12
|
+
--card-foreground: 224 71.4% 4.1%;
|
|
13
|
+
--popover: 0 0% 100%;
|
|
14
|
+
--popover-foreground: 224 71.4% 4.1%;
|
|
15
|
+
--primary: 262.1 83.3% 57.8%;
|
|
16
|
+
--primary-foreground: 210 20% 98%;
|
|
17
|
+
--secondary: 220 14.3% 95.9%;
|
|
18
|
+
--secondary-foreground: 220.9 39.3% 11%;
|
|
19
|
+
--muted: 220 14.3% 95.9%;
|
|
20
|
+
--muted-foreground: 220 8.9% 46.1%;
|
|
21
|
+
--accent: 220 14.3% 95.9%;
|
|
22
|
+
--accent-foreground: 220.9 39.3% 11%;
|
|
23
|
+
--destructive: 0 84.2% 60.2%;
|
|
24
|
+
--destructive-foreground: 210 20% 98%;
|
|
25
|
+
--border: 220 13% 91%;
|
|
26
|
+
--input: 220 13% 91%;
|
|
27
|
+
--ring: 262.1 83.3% 57.8%;
|
|
28
|
+
--radius: 0.75rem;
|
|
29
|
+
--chart-1: 173 58% 39%;
|
|
30
|
+
--chart-2: 12 76% 61%;
|
|
31
|
+
--chart-3: 197 37% 24%;
|
|
32
|
+
--chart-4: 43 74% 66%;
|
|
33
|
+
--chart-5: 27 87% 67%;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.dark {
|
|
37
|
+
--background: 224 71.4% 4.1%;
|
|
38
|
+
--foreground: 210 20% 98%;
|
|
39
|
+
--card: 224 71.4% 4.1%;
|
|
40
|
+
--card-foreground: 210 20% 98%;
|
|
41
|
+
--popover: 224 71.4% 4.1%;
|
|
42
|
+
--popover-foreground: 210 20% 98%;
|
|
43
|
+
--primary: 263.4 70% 50.4%;
|
|
44
|
+
--primary-foreground: 210 20% 98%;
|
|
45
|
+
--secondary: 215 27.9% 16.9%;
|
|
46
|
+
--secondary-foreground: 210 20% 98%;
|
|
47
|
+
--muted: 215 27.9% 16.9%;
|
|
48
|
+
--muted-foreground: 217.9 10.6% 64.9%;
|
|
49
|
+
--accent: 215 27.9% 16.9%;
|
|
50
|
+
--accent-foreground: 210 20% 98%;
|
|
51
|
+
--destructive: 0 62.8% 50.6%;
|
|
52
|
+
--destructive-foreground: 210 20% 98%;
|
|
53
|
+
--border: 215 27.9% 16.9%;
|
|
54
|
+
--input: 215 27.9% 16.9%;
|
|
55
|
+
--ring: 263.4 70% 50.4%;
|
|
56
|
+
--chart-1: 173 58% 39%;
|
|
57
|
+
--chart-2: 12 76% 61%;
|
|
58
|
+
--chart-3: 197 37% 24%;
|
|
59
|
+
--chart-4: 43 74% 66%;
|
|
60
|
+
--chart-5: 27 87% 67%;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
html {
|
|
65
|
+
background-color: var(--background);
|
|
66
|
+
}
|
|
67
|
+
@layer base {
|
|
68
|
+
* {
|
|
69
|
+
font-family: var(--font-openSans);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@layer utilities {
|
|
74
|
+
/* Chrome, Safari and Opera */
|
|
75
|
+
.no-scrollbar::-webkit-scrollbar {
|
|
76
|
+
display: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.no-scrollbar {
|
|
80
|
+
-ms-overflow-style: none; /* IE and Edge */
|
|
81
|
+
scrollbar-width: none; /* Firefox */
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
html {
|
|
86
|
+
scroll-behavior: smooth;
|
|
87
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
2
|
+
import type { Config } from 'tailwindcss';
|
|
3
|
+
import tailwindcssAnimate from 'tailwindcss-animate';
|
|
4
|
+
|
|
5
|
+
const config = {
|
|
6
|
+
darkMode: ['class', 'string'],
|
|
7
|
+
content: [
|
|
8
|
+
'./pages/**/*.{ts,tsx}',
|
|
9
|
+
'./components/**/*.{ts,tsx}',
|
|
10
|
+
'./src/**/*.{ts,tsx}',
|
|
11
|
+
'../../apps/**/*.{ts,tsx}',
|
|
12
|
+
'../../packages/ui/src/**/*.{ts,tsx}',
|
|
13
|
+
],
|
|
14
|
+
prefix: '',
|
|
15
|
+
theme: {
|
|
16
|
+
container: {
|
|
17
|
+
center: true,
|
|
18
|
+
padding: '2rem',
|
|
19
|
+
screens: {
|
|
20
|
+
'2xl': '1400px',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
extend: {
|
|
24
|
+
backgroundImage: {
|
|
25
|
+
'instagram-gradient': 'linear-gradient(45deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888)',
|
|
26
|
+
},
|
|
27
|
+
fontFamily: {
|
|
28
|
+
poppins: ['var(--font-poppins)', 'sans-serif'],
|
|
29
|
+
alike: ['var(--font-alike)', 'sans-serif'],
|
|
30
|
+
openSans: ['var(--font-openSans)', 'sans-serif'],
|
|
31
|
+
alertaStencils: ['var(--font-alertaStencils)', 'sans-serif'],
|
|
32
|
+
pacifico: ['var(--font-pacifico)', 'sans-serif'],
|
|
33
|
+
},
|
|
34
|
+
colors: {
|
|
35
|
+
border: 'hsl(var(--border))',
|
|
36
|
+
input: 'hsl(var(--input))',
|
|
37
|
+
ring: 'hsl(var(--ring))',
|
|
38
|
+
background: 'hsl(var(--background))',
|
|
39
|
+
foreground: 'hsl(var(--foreground))',
|
|
40
|
+
'white-smoke': '#f8f9fa',
|
|
41
|
+
primary: {
|
|
42
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
43
|
+
foreground: 'hsl(var(--primary-foreground))',
|
|
44
|
+
},
|
|
45
|
+
secondary: {
|
|
46
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
47
|
+
foreground: 'hsl(var(--secondary-foreground))',
|
|
48
|
+
},
|
|
49
|
+
destructive: {
|
|
50
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
51
|
+
foreground: 'hsl(var(--destructive-foreground))',
|
|
52
|
+
},
|
|
53
|
+
muted: {
|
|
54
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
55
|
+
foreground: 'hsl(var(--muted-foreground))',
|
|
56
|
+
},
|
|
57
|
+
accent: {
|
|
58
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
59
|
+
foreground: 'hsl(var(--accent-foreground))',
|
|
60
|
+
},
|
|
61
|
+
popover: {
|
|
62
|
+
DEFAULT: 'hsl(var(--popover))',
|
|
63
|
+
foreground: 'hsl(var(--popover-foreground))',
|
|
64
|
+
},
|
|
65
|
+
card: {
|
|
66
|
+
DEFAULT: 'hsl(var(--card))',
|
|
67
|
+
foreground: 'hsl(var(--card-foreground))',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
borderRadius: {
|
|
71
|
+
lg: 'var(--radius)',
|
|
72
|
+
md: 'calc(var(--radius) - 2px)',
|
|
73
|
+
sm: 'calc(var(--radius) - 4px)',
|
|
74
|
+
},
|
|
75
|
+
keyframes: {
|
|
76
|
+
'accordion-down': {
|
|
77
|
+
from: { height: '0' },
|
|
78
|
+
to: { height: 'var(--radix-accordion-content-height)' },
|
|
79
|
+
},
|
|
80
|
+
'accordion-up': {
|
|
81
|
+
from: { height: 'var(--radix-accordion-content-height)' },
|
|
82
|
+
to: { height: '0' },
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
animation: {
|
|
86
|
+
'accordion-down': 'accordion-down 0.2s ease-out',
|
|
87
|
+
'accordion-up': 'accordion-up 0.2s ease-out',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
plugins: [tailwindcssAnimate],
|
|
92
|
+
} satisfies Config;
|
|
93
|
+
|
|
94
|
+
export { config };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "typescript-config/tsconfig.frontend.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"strict": true,
|
|
5
|
+
"baseUrl": ".",
|
|
6
|
+
"paths": {
|
|
7
|
+
"@/*": ["./src/*"]
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
"include": ["src/**/*", "tailwind.config.ts", "stylelint.config.mjs", "eslint.config.mjs"]
|
|
12
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
packages:
|
|
2
|
+
- "apps/*"
|
|
3
|
+
- "packages/*"
|
|
4
|
+
- "packages/@repo/*"
|
|
5
|
+
- "configs/*"
|
|
6
|
+
|
|
7
|
+
catalog:
|
|
8
|
+
# configs
|
|
9
|
+
typescript: ^5.9.2
|
|
10
|
+
eslint: ^9.39.2
|
|
11
|
+
tsdown: ^0.20.1
|
|
12
|
+
unrun: ^0.2.27
|
|
13
|
+
|
|
14
|
+
vite: ^7.3.1
|
|
15
|
+
rimraf: ^6.1.2
|
|
16
|
+
turbo: ^2.8.1
|
|
17
|
+
|
|
18
|
+
# utils
|
|
19
|
+
"@biomejs/biome": ^2.3.13
|
|
20
|
+
prettier: ^3.8.1
|
|
21
|
+
zod: ^4.3.6
|
|
22
|
+
|
|
23
|
+
# testing
|
|
24
|
+
vitest: ^4.0.18
|
|
25
|
+
"@vitest/coverage-v8": ^4.0.18
|
|
26
|
+
|
|
27
|
+
# types
|
|
28
|
+
"@types/node": ^25.1.0
|
|
29
|
+
|
|
30
|
+
# frontend
|
|
31
|
+
react: ^19.2.4
|
|
32
|
+
react-dom: ^19.2.4
|
|
33
|
+
lucide-react: ^0.563.0
|
|
34
|
+
tailwindcss: ^4.1.18
|
|
35
|
+
react-email: ^5.2.8
|
|
36
|
+
"@react-email/preview-server": ^5.2.8
|
|
37
|
+
"@react-email/components": ^1.0.8
|
|
38
|
+
"@react-email/tailwind": ^2.0.5
|
|
39
|
+
"@react-email/render": ^2.0.4
|
|
40
|
+
|
|
41
|
+
# frontend types
|
|
42
|
+
"@types/react": ^19.2.4
|
|
43
|
+
"@types/react-dom": ^19.2.3
|
package/turbo.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://turborepo.dev/schema.json",
|
|
3
|
+
"ui": "tui",
|
|
4
|
+
"tasks": {
|
|
5
|
+
"build:config": {
|
|
6
|
+
"cache": true,
|
|
7
|
+
"dependsOn": ["lint", "^build"],
|
|
8
|
+
"inputs": [
|
|
9
|
+
"src/**",
|
|
10
|
+
"tsconfig*.json",
|
|
11
|
+
"package.json",
|
|
12
|
+
"vitest.config.ts",
|
|
13
|
+
"tsdown.config.ts"
|
|
14
|
+
],
|
|
15
|
+
"outputs": ["dist/**"]
|
|
16
|
+
},
|
|
17
|
+
"lint": {
|
|
18
|
+
"cache": true,
|
|
19
|
+
"inputs": ["src/**", "eslint.config.*", ".eslintrc.*", "tsdown.config.ts", "package.json"]
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
"build": {
|
|
23
|
+
"cache": true,
|
|
24
|
+
"inputs": ["src/**", "tsconfig*.json", "package.json"],
|
|
25
|
+
"outputs": ["dist/**"],
|
|
26
|
+
"dependsOn": ["lint", "^build"]
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
"typecheck": {
|
|
30
|
+
"cache": true,
|
|
31
|
+
"dependsOn": ["^typecheck", "build"],
|
|
32
|
+
"inputs": ["src/**", "tsconfig*.json"]
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"test": {
|
|
36
|
+
"cache": true,
|
|
37
|
+
"inputs": ["src/**", "test/**", "vitest.config.*", "package.json"],
|
|
38
|
+
"outputs": ["coverage/**", "*.xml"]
|
|
39
|
+
},
|
|
40
|
+
"test:dev": {
|
|
41
|
+
"cache": false,
|
|
42
|
+
"inputs": ["src/**", "test/**", "vitest.config.*", "package.json"],
|
|
43
|
+
"outputs": ["coverage/**", "*.xml"],
|
|
44
|
+
"interactive": true
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
"check-types": {
|
|
48
|
+
"cache": true,
|
|
49
|
+
"dependsOn": ["^check-types"]
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
"watch": {
|
|
53
|
+
"cache": false,
|
|
54
|
+
"persistent": true
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
"dev": {
|
|
58
|
+
"cache": false,
|
|
59
|
+
"persistent": true
|
|
60
|
+
},
|
|
61
|
+
"start": {
|
|
62
|
+
"cache": false
|
|
63
|
+
},
|
|
64
|
+
"format": {
|
|
65
|
+
"cache": false
|
|
66
|
+
},
|
|
67
|
+
"format:check": {
|
|
68
|
+
"cache": false
|
|
69
|
+
},
|
|
70
|
+
"clean": {
|
|
71
|
+
"cache": false
|
|
72
|
+
},
|
|
73
|
+
"deep:clean": {
|
|
74
|
+
"cache": false
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|