saas-forge 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.
Files changed (145) hide show
  1. package/.eslintrc.js +10 -0
  2. package/.vscode/settings.json +3 -0
  3. package/README.md +31 -0
  4. package/apps/web/.env.example +1 -0
  5. package/apps/web/app/favicon.ico +0 -0
  6. package/apps/web/app/layout.tsx +23 -0
  7. package/apps/web/app/page.tsx +12 -0
  8. package/apps/web/components.json +20 -0
  9. package/apps/web/eslint.config.js +4 -0
  10. package/apps/web/hooks/.gitkeep +0 -0
  11. package/apps/web/next-env.d.ts +5 -0
  12. package/apps/web/next.config.mjs +6 -0
  13. package/apps/web/package.json +32 -0
  14. package/apps/web/postcss.config.mjs +1 -0
  15. package/apps/web/tsconfig.json +23 -0
  16. package/docs/CODE_OF_CONDUCT.md +128 -0
  17. package/docs/CONTRIBUTING.md +45 -0
  18. package/docs/ISSUE_TEMPLATE/bug_report.md +31 -0
  19. package/docs/ISSUE_TEMPLATE/feature_request.md +17 -0
  20. package/docs/SECURITY.md +9 -0
  21. package/docs/pull_request_template.md +24 -0
  22. package/package.json +38 -0
  23. package/packages/eslint-config/README.md +3 -0
  24. package/packages/eslint-config/base.js +32 -0
  25. package/packages/eslint-config/next.js +51 -0
  26. package/packages/eslint-config/package.json +26 -0
  27. package/packages/eslint-config/react-internal.js +41 -0
  28. package/packages/typescript-config/README.md +3 -0
  29. package/packages/typescript-config/base.json +20 -0
  30. package/packages/typescript-config/nextjs.json +13 -0
  31. package/packages/typescript-config/package.json +9 -0
  32. package/packages/typescript-config/react-library.json +8 -0
  33. package/packages/ui/components.json +20 -0
  34. package/packages/ui/eslint.config.js +4 -0
  35. package/packages/ui/package.json +86 -0
  36. package/packages/ui/postcss.config.mjs +6 -0
  37. package/packages/ui/src/components/.gitkeep +0 -0
  38. package/packages/ui/src/components/aceternity/3d-card.tsx +155 -0
  39. package/packages/ui/src/components/aceternity/3d-marquee.tsx +142 -0
  40. package/packages/ui/src/components/aceternity/Spotlight.tsx +57 -0
  41. package/packages/ui/src/components/aceternity/animated-testimonials.tsx +165 -0
  42. package/packages/ui/src/components/aceternity/animated-tooltip.tsx +92 -0
  43. package/packages/ui/src/components/aceternity/aurora-background.tsx +61 -0
  44. package/packages/ui/src/components/aceternity/background-beams.tsx +141 -0
  45. package/packages/ui/src/components/aceternity/background-gradient.tsx +72 -0
  46. package/packages/ui/src/components/aceternity/card-hover-effect.tsx +111 -0
  47. package/packages/ui/src/components/aceternity/compare.tsx +244 -0
  48. package/packages/ui/src/components/aceternity/container-scroll-animation.tsx +95 -0
  49. package/packages/ui/src/components/aceternity/lamp.tsx +104 -0
  50. package/packages/ui/src/components/aceternity/sparkles.tsx +434 -0
  51. package/packages/ui/src/components/aceternity/spotlight-new.tsx +128 -0
  52. package/packages/ui/src/components/mdx/Alert.tsx +14 -0
  53. package/packages/ui/src/components/mdx/Badge.tsx +10 -0
  54. package/packages/ui/src/components/mdx/blockquote.tsx +11 -0
  55. package/packages/ui/src/components/mdx/code.tsx +16 -0
  56. package/packages/ui/src/components/mdx/h1.tsx +18 -0
  57. package/packages/ui/src/components/mdx/h2.tsx +18 -0
  58. package/packages/ui/src/components/mdx/h3.tsx +18 -0
  59. package/packages/ui/src/components/mdx/hr.tsx +7 -0
  60. package/packages/ui/src/components/mdx/li.tsx +7 -0
  61. package/packages/ui/src/components/mdx/mdxComponents.tsx +25 -0
  62. package/packages/ui/src/components/mdx/ol.tsx +7 -0
  63. package/packages/ui/src/components/mdx/pre.tsx +13 -0
  64. package/packages/ui/src/components/mdx/tableOfContents.tsx +23 -0
  65. package/packages/ui/src/components/mdx/ul.tsx +7 -0
  66. package/packages/ui/src/components/mdx/ulNumbered.tsx +7 -0
  67. package/packages/ui/src/components/shadcn/accordion.tsx +66 -0
  68. package/packages/ui/src/components/shadcn/alert-dialog.tsx +157 -0
  69. package/packages/ui/src/components/shadcn/alert.tsx +66 -0
  70. package/packages/ui/src/components/shadcn/aspect-ratio.tsx +11 -0
  71. package/packages/ui/src/components/shadcn/avatar.tsx +53 -0
  72. package/packages/ui/src/components/shadcn/badge.tsx +46 -0
  73. package/packages/ui/src/components/shadcn/breadcrumb.tsx +109 -0
  74. package/packages/ui/src/components/shadcn/button-group.tsx +83 -0
  75. package/packages/ui/src/components/shadcn/button.tsx +60 -0
  76. package/packages/ui/src/components/shadcn/calendar.tsx +216 -0
  77. package/packages/ui/src/components/shadcn/card.tsx +92 -0
  78. package/packages/ui/src/components/shadcn/carousel.tsx +241 -0
  79. package/packages/ui/src/components/shadcn/chart.tsx +357 -0
  80. package/packages/ui/src/components/shadcn/checkbox.tsx +32 -0
  81. package/packages/ui/src/components/shadcn/collapsible.tsx +33 -0
  82. package/packages/ui/src/components/shadcn/command.tsx +184 -0
  83. package/packages/ui/src/components/shadcn/context-menu.tsx +252 -0
  84. package/packages/ui/src/components/shadcn/dialog.tsx +143 -0
  85. package/packages/ui/src/components/shadcn/drawer.tsx +135 -0
  86. package/packages/ui/src/components/shadcn/dropdown-menu.tsx +257 -0
  87. package/packages/ui/src/components/shadcn/empty.tsx +104 -0
  88. package/packages/ui/src/components/shadcn/field.tsx +248 -0
  89. package/packages/ui/src/components/shadcn/form.tsx +167 -0
  90. package/packages/ui/src/components/shadcn/hover-card.tsx +44 -0
  91. package/packages/ui/src/components/shadcn/input-group.tsx +170 -0
  92. package/packages/ui/src/components/shadcn/input-otp.tsx +77 -0
  93. package/packages/ui/src/components/shadcn/input.tsx +21 -0
  94. package/packages/ui/src/components/shadcn/item.tsx +193 -0
  95. package/packages/ui/src/components/shadcn/kbd.tsx +28 -0
  96. package/packages/ui/src/components/shadcn/label.tsx +24 -0
  97. package/packages/ui/src/components/shadcn/menubar.tsx +276 -0
  98. package/packages/ui/src/components/shadcn/native-select.tsx +48 -0
  99. package/packages/ui/src/components/shadcn/navigation-menu.tsx +168 -0
  100. package/packages/ui/src/components/shadcn/pagination.tsx +127 -0
  101. package/packages/ui/src/components/shadcn/popover.tsx +48 -0
  102. package/packages/ui/src/components/shadcn/progress.tsx +31 -0
  103. package/packages/ui/src/components/shadcn/radio-group.tsx +45 -0
  104. package/packages/ui/src/components/shadcn/resizable.tsx +56 -0
  105. package/packages/ui/src/components/shadcn/scroll-area.tsx +58 -0
  106. package/packages/ui/src/components/shadcn/select.tsx +187 -0
  107. package/packages/ui/src/components/shadcn/separator.tsx +28 -0
  108. package/packages/ui/src/components/shadcn/sheet.tsx +139 -0
  109. package/packages/ui/src/components/shadcn/sidebar.tsx +726 -0
  110. package/packages/ui/src/components/shadcn/skeleton.tsx +13 -0
  111. package/packages/ui/src/components/shadcn/slider.tsx +63 -0
  112. package/packages/ui/src/components/shadcn/sonner.tsx +40 -0
  113. package/packages/ui/src/components/shadcn/spinner.tsx +16 -0
  114. package/packages/ui/src/components/shadcn/switch.tsx +31 -0
  115. package/packages/ui/src/components/shadcn/table.tsx +116 -0
  116. package/packages/ui/src/components/shadcn/tabs.tsx +66 -0
  117. package/packages/ui/src/components/shadcn/textarea.tsx +18 -0
  118. package/packages/ui/src/components/shadcn/toggle-group.tsx +83 -0
  119. package/packages/ui/src/components/shadcn/toggle.tsx +47 -0
  120. package/packages/ui/src/components/shadcn/tooltip.tsx +61 -0
  121. package/packages/ui/src/hooks/.gitkeep +0 -0
  122. package/packages/ui/src/hooks/use-device.tsx +29 -0
  123. package/packages/ui/src/hooks/use-mobile.tsx +19 -0
  124. package/packages/ui/src/hooks/use-outside-click.tsx +23 -0
  125. package/packages/ui/src/lib/utils.ts +6 -0
  126. package/packages/ui/src/providers/theme-provider.tsx +18 -0
  127. package/packages/ui/src/styles/globals.css +65 -0
  128. package/packages/ui/src/styles/shadcn-blue.css +69 -0
  129. package/packages/ui/src/styles/shadcn-green.css +68 -0
  130. package/packages/ui/src/styles/shadcn-neutral.css +69 -0
  131. package/packages/ui/src/styles/shadcn-orange.css +68 -0
  132. package/packages/ui/src/styles/shadcn-red.css +68 -0
  133. package/packages/ui/src/styles/shadcn-rose.css +68 -0
  134. package/packages/ui/src/styles/shadcn-violet.css +68 -0
  135. package/packages/ui/src/styles/shadcn-yellow.css +68 -0
  136. package/packages/ui/src/typography/font.tsx +19 -0
  137. package/packages/ui/src/typography/fontFiles/Cyberdyne.woff2 +0 -0
  138. package/packages/ui/src/typography/fontFiles/GeistMonoVF.woff +0 -0
  139. package/packages/ui/src/typography/fontFiles/GeistVF.woff +0 -0
  140. package/packages/ui/tsconfig.json +11 -0
  141. package/packages/ui/tsconfig.lint.json +8 -0
  142. package/pnpm-workspace.yaml +3 -0
  143. package/scripts/cli.js +44 -0
  144. package/tsconfig.json +4 -0
  145. package/turbo.json +21 -0
@@ -0,0 +1,434 @@
1
+ "use client";
2
+ import React, { useId, useMemo } from "react";
3
+ import { useEffect, useState } from "react";
4
+ import Particles, { initParticlesEngine } from "@tsparticles/react";
5
+ import type { Container, SingleOrMultiple } from "@tsparticles/engine";
6
+ import { loadSlim } from "@tsparticles/slim";
7
+ import { motion, useAnimation } from "motion/react";
8
+ import { cn } from "../../lib/utils";
9
+
10
+ type ParticlesProps = {
11
+ id?: string;
12
+ className?: string;
13
+ background?: string;
14
+ particleSize?: number;
15
+ minSize?: number;
16
+ maxSize?: number;
17
+ speed?: number;
18
+ particleColor?: string;
19
+ particleDensity?: number;
20
+ };
21
+ export const SparklesCore = (props: ParticlesProps) => {
22
+ const {
23
+ id,
24
+ className,
25
+ background,
26
+ minSize,
27
+ maxSize,
28
+ speed,
29
+ particleColor,
30
+ particleDensity,
31
+ } = props;
32
+ const [init, setInit] = useState(false);
33
+ useEffect(() => {
34
+ initParticlesEngine(async (engine) => {
35
+ await loadSlim(engine);
36
+ }).then(() => {
37
+ setInit(true);
38
+ });
39
+ }, []);
40
+ const controls = useAnimation();
41
+
42
+ const particlesLoaded = async (container?: Container) => {
43
+ if (container) {
44
+ controls.start({
45
+ opacity: 1,
46
+ transition: {
47
+ duration: 1,
48
+ },
49
+ });
50
+ }
51
+ };
52
+
53
+ const generatedId = useId();
54
+ return (
55
+ <motion.div animate={controls} className={cn("opacity-0", className)}>
56
+ {init && (
57
+ <Particles
58
+ id={id || generatedId}
59
+ className={cn("h-full w-full")}
60
+ particlesLoaded={particlesLoaded}
61
+ options={{
62
+ background: {
63
+ color: {
64
+ value: background || "#0d47a1",
65
+ },
66
+ },
67
+ fullScreen: {
68
+ enable: false,
69
+ zIndex: 1,
70
+ },
71
+
72
+ fpsLimit: 120,
73
+ interactivity: {
74
+ events: {
75
+ onClick: {
76
+ enable: true,
77
+ mode: "push",
78
+ },
79
+ onHover: {
80
+ enable: false,
81
+ mode: "repulse",
82
+ },
83
+ resize: true as any,
84
+ },
85
+ modes: {
86
+ push: {
87
+ quantity: 4,
88
+ },
89
+ repulse: {
90
+ distance: 200,
91
+ duration: 0.4,
92
+ },
93
+ },
94
+ },
95
+ particles: {
96
+ bounce: {
97
+ horizontal: {
98
+ value: 1,
99
+ },
100
+ vertical: {
101
+ value: 1,
102
+ },
103
+ },
104
+ collisions: {
105
+ absorb: {
106
+ speed: 2,
107
+ },
108
+ bounce: {
109
+ horizontal: {
110
+ value: 1,
111
+ },
112
+ vertical: {
113
+ value: 1,
114
+ },
115
+ },
116
+ enable: false,
117
+ maxSpeed: 50,
118
+ mode: "bounce",
119
+ overlap: {
120
+ enable: true,
121
+ retries: 0,
122
+ },
123
+ },
124
+ color: {
125
+ value: particleColor || "#ffffff",
126
+ animation: {
127
+ h: {
128
+ count: 0,
129
+ enable: false,
130
+ speed: 1,
131
+ decay: 0,
132
+ delay: 0,
133
+ sync: true,
134
+ offset: 0,
135
+ },
136
+ s: {
137
+ count: 0,
138
+ enable: false,
139
+ speed: 1,
140
+ decay: 0,
141
+ delay: 0,
142
+ sync: true,
143
+ offset: 0,
144
+ },
145
+ l: {
146
+ count: 0,
147
+ enable: false,
148
+ speed: 1,
149
+ decay: 0,
150
+ delay: 0,
151
+ sync: true,
152
+ offset: 0,
153
+ },
154
+ },
155
+ },
156
+ effect: {
157
+ close: true,
158
+ fill: true,
159
+ options: {},
160
+ type: {} as SingleOrMultiple<string> | undefined,
161
+ },
162
+ groups: {},
163
+ move: {
164
+ angle: {
165
+ offset: 0,
166
+ value: 90,
167
+ },
168
+ attract: {
169
+ distance: 200,
170
+ enable: false,
171
+ rotate: {
172
+ x: 3000,
173
+ y: 3000,
174
+ },
175
+ },
176
+ center: {
177
+ x: 50,
178
+ y: 50,
179
+ mode: "percent",
180
+ radius: 0,
181
+ },
182
+ decay: 0,
183
+ distance: {},
184
+ direction: "none",
185
+ drift: 0,
186
+ enable: true,
187
+ gravity: {
188
+ acceleration: 9.81,
189
+ enable: false,
190
+ inverse: false,
191
+ maxSpeed: 50,
192
+ },
193
+ path: {
194
+ clamp: true,
195
+ delay: {
196
+ value: 0,
197
+ },
198
+ enable: false,
199
+ options: {},
200
+ },
201
+ outModes: {
202
+ default: "out",
203
+ },
204
+ random: false,
205
+ size: false,
206
+ speed: {
207
+ min: 0.1,
208
+ max: 1,
209
+ },
210
+ spin: {
211
+ acceleration: 0,
212
+ enable: false,
213
+ },
214
+ straight: false,
215
+ trail: {
216
+ enable: false,
217
+ length: 10,
218
+ fill: {},
219
+ },
220
+ vibrate: false,
221
+ warp: false,
222
+ },
223
+ number: {
224
+ density: {
225
+ enable: true,
226
+ width: 400,
227
+ height: 400,
228
+ },
229
+ limit: {
230
+ mode: "delete",
231
+ value: 0,
232
+ },
233
+ value: particleDensity || 120,
234
+ },
235
+ opacity: {
236
+ value: {
237
+ min: 0.1,
238
+ max: 1,
239
+ },
240
+ animation: {
241
+ count: 0,
242
+ enable: true,
243
+ speed: speed || 4,
244
+ decay: 0,
245
+ delay: 0,
246
+ sync: false,
247
+ mode: "auto",
248
+ startValue: "random",
249
+ destroy: "none",
250
+ },
251
+ },
252
+ reduceDuplicates: false,
253
+ shadow: {
254
+ blur: 0,
255
+ color: {
256
+ value: "#000",
257
+ },
258
+ enable: false,
259
+ offset: {
260
+ x: 0,
261
+ y: 0,
262
+ },
263
+ },
264
+ shape: {
265
+ close: true,
266
+ fill: true,
267
+ options: {},
268
+ type: "circle",
269
+ },
270
+ size: {
271
+ value: {
272
+ min: minSize || 1,
273
+ max: maxSize || 3,
274
+ },
275
+ animation: {
276
+ count: 0,
277
+ enable: false,
278
+ speed: 5,
279
+ decay: 0,
280
+ delay: 0,
281
+ sync: false,
282
+ mode: "auto",
283
+ startValue: "random",
284
+ destroy: "none",
285
+ },
286
+ },
287
+ stroke: {
288
+ width: 0,
289
+ },
290
+ zIndex: {
291
+ value: 0,
292
+ opacityRate: 1,
293
+ sizeRate: 1,
294
+ velocityRate: 1,
295
+ },
296
+ destroy: {
297
+ bounds: {},
298
+ mode: "none",
299
+ split: {
300
+ count: 1,
301
+ factor: {
302
+ value: 3,
303
+ },
304
+ rate: {
305
+ value: {
306
+ min: 4,
307
+ max: 9,
308
+ },
309
+ },
310
+ sizeOffset: true,
311
+ },
312
+ },
313
+ roll: {
314
+ darken: {
315
+ enable: false,
316
+ value: 0,
317
+ },
318
+ enable: false,
319
+ enlighten: {
320
+ enable: false,
321
+ value: 0,
322
+ },
323
+ mode: "vertical",
324
+ speed: 25,
325
+ },
326
+ tilt: {
327
+ value: 0,
328
+ animation: {
329
+ enable: false,
330
+ speed: 0,
331
+ decay: 0,
332
+ sync: false,
333
+ },
334
+ direction: "clockwise",
335
+ enable: false,
336
+ },
337
+ twinkle: {
338
+ lines: {
339
+ enable: false,
340
+ frequency: 0.05,
341
+ opacity: 1,
342
+ },
343
+ particles: {
344
+ enable: false,
345
+ frequency: 0.05,
346
+ opacity: 1,
347
+ },
348
+ },
349
+ wobble: {
350
+ distance: 5,
351
+ enable: false,
352
+ speed: {
353
+ angle: 50,
354
+ move: 10,
355
+ },
356
+ },
357
+ life: {
358
+ count: 0,
359
+ delay: {
360
+ value: 0,
361
+ sync: false,
362
+ },
363
+ duration: {
364
+ value: 0,
365
+ sync: false,
366
+ },
367
+ },
368
+ rotate: {
369
+ value: 0,
370
+ animation: {
371
+ enable: false,
372
+ speed: 0,
373
+ decay: 0,
374
+ sync: false,
375
+ },
376
+ direction: "clockwise",
377
+ path: false,
378
+ },
379
+ orbit: {
380
+ animation: {
381
+ count: 0,
382
+ enable: false,
383
+ speed: 1,
384
+ decay: 0,
385
+ delay: 0,
386
+ sync: false,
387
+ },
388
+ enable: false,
389
+ opacity: 1,
390
+ rotation: {
391
+ value: 45,
392
+ },
393
+ width: 1,
394
+ },
395
+ links: {
396
+ blink: false,
397
+ color: {
398
+ value: "#fff",
399
+ },
400
+ consent: false,
401
+ distance: 100,
402
+ enable: false,
403
+ frequency: 1,
404
+ opacity: 1,
405
+ shadow: {
406
+ blur: 5,
407
+ color: {
408
+ value: "#000",
409
+ },
410
+ enable: false,
411
+ },
412
+ triangles: {
413
+ enable: false,
414
+ frequency: 1,
415
+ },
416
+ width: 1,
417
+ warp: false,
418
+ },
419
+ repulse: {
420
+ value: 0,
421
+ enabled: false,
422
+ distance: 1,
423
+ duration: 1,
424
+ factor: 1,
425
+ speed: 1,
426
+ },
427
+ },
428
+ detectRetina: true,
429
+ }}
430
+ />
431
+ )}
432
+ </motion.div>
433
+ );
434
+ };
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import React from "react";
3
+ import { motion } from "motion/react";
4
+
5
+ type SpotlightProps = {
6
+ gradientFirst?: string;
7
+ gradientSecond?: string;
8
+ gradientThird?: string;
9
+ translateY?: number;
10
+ width?: number;
11
+ height?: number;
12
+ smallWidth?: number;
13
+ duration?: number;
14
+ xOffset?: number;
15
+ };
16
+
17
+ export const Spotlight = ({
18
+ gradientFirst = "radial-gradient(68.54% 68.72% at 55.02% 31.46%, hsla(210, 100%, 85%, .08) 0, hsla(210, 100%, 55%, .02) 50%, hsla(210, 100%, 45%, 0) 80%)",
19
+ gradientSecond = "radial-gradient(50% 50% at 50% 50%, hsla(210, 100%, 85%, .06) 0, hsla(210, 100%, 55%, .02) 80%, transparent 100%)",
20
+ gradientThird = "radial-gradient(50% 50% at 50% 50%, hsla(210, 100%, 85%, .04) 0, hsla(210, 100%, 45%, .02) 80%, transparent 100%)",
21
+ translateY = -350,
22
+ width = 560,
23
+ height = 1380,
24
+ smallWidth = 240,
25
+ duration = 7,
26
+ xOffset = 100,
27
+ }: SpotlightProps = {}) => {
28
+ return (
29
+ <motion.div
30
+ initial={{
31
+ opacity: 0,
32
+ }}
33
+ animate={{
34
+ opacity: 1,
35
+ }}
36
+ transition={{
37
+ duration: 1.5,
38
+ }}
39
+ className="pointer-events-none absolute inset-0 h-full w-full "
40
+ >
41
+ <motion.div
42
+ animate={{
43
+ x: [0, xOffset, 0],
44
+ }}
45
+ transition={{
46
+ duration,
47
+ repeat: Infinity,
48
+ repeatType: "reverse",
49
+ ease: "easeInOut",
50
+ }}
51
+ className="absolute top-0 left-0 w-screen h-screen z-40 pointer-events-none"
52
+ >
53
+ <div
54
+ style={{
55
+ transform: `translateY(${translateY}px) rotate(-45deg)`,
56
+ background: gradientFirst,
57
+ width: `${width}px`,
58
+ height: `${height}px`,
59
+ }}
60
+ className={`absolute top-0 left-0`}
61
+ />
62
+
63
+ <div
64
+ style={{
65
+ transform: "rotate(-45deg) translate(5%, -50%)",
66
+ background: gradientSecond,
67
+ width: `${smallWidth}px`,
68
+ height: `${height}px`,
69
+ }}
70
+ className={`absolute top-0 left-0 origin-top-left`}
71
+ />
72
+
73
+ <div
74
+ style={{
75
+ transform: "rotate(-45deg) translate(-180%, -70%)",
76
+ background: gradientThird,
77
+ width: `${smallWidth}px`,
78
+ height: `${height}px`,
79
+ }}
80
+ className={`absolute top-0 left-0 origin-top-left`}
81
+ />
82
+ </motion.div>
83
+
84
+ <motion.div
85
+ animate={{
86
+ x: [0, -xOffset, 0],
87
+ }}
88
+ transition={{
89
+ duration,
90
+ repeat: Infinity,
91
+ repeatType: "reverse",
92
+ ease: "easeInOut",
93
+ }}
94
+ className="absolute top-0 right-0 w-screen h-screen z-40 pointer-events-none"
95
+ >
96
+ <div
97
+ style={{
98
+ transform: `translateY(${translateY}px) rotate(45deg)`,
99
+ background: gradientFirst,
100
+ width: `${width}px`,
101
+ height: `${height}px`,
102
+ }}
103
+ className={`absolute top-0 right-0`}
104
+ />
105
+
106
+ <div
107
+ style={{
108
+ transform: "rotate(45deg) translate(-5%, -50%)",
109
+ background: gradientSecond,
110
+ width: `${smallWidth}px`,
111
+ height: `${height}px`,
112
+ }}
113
+ className={`absolute top-0 right-0 origin-top-right`}
114
+ />
115
+
116
+ <div
117
+ style={{
118
+ transform: "rotate(45deg) translate(180%, -70%)",
119
+ background: gradientThird,
120
+ width: `${smallWidth}px`,
121
+ height: `${height}px`,
122
+ }}
123
+ className={`absolute top-0 right-0 origin-top-right`}
124
+ />
125
+ </motion.div>
126
+ </motion.div>
127
+ );
128
+ };
@@ -0,0 +1,14 @@
1
+ import React from 'react'
2
+ import { motion } from "framer-motion";
3
+ import { Alert, AlertDescription, AlertTitle } from '@workspace/ui/components/shadcn/alert';
4
+
5
+ const MdxAlert = ({children,title}:{children:React.ReactNode,title:string}) => {
6
+ return (
7
+ <Alert className="my-8">
8
+ <AlertTitle>{title}</AlertTitle>
9
+ <AlertDescription>{children}</AlertDescription>
10
+ </Alert>
11
+ )
12
+ }
13
+
14
+ export default MdxAlert
@@ -0,0 +1,10 @@
1
+ import React from 'react'
2
+ import {Badge} from '@workspace/ui/components/shadcn/badge'
3
+
4
+ const MdxBadge = ({children}:{children:React.ReactNode}) => {
5
+ return (
6
+ <Badge className="my-2 inline-block">{children}</Badge>
7
+ )
8
+ }
9
+
10
+ export default MdxBadge
@@ -0,0 +1,11 @@
1
+ import React from 'react'
2
+
3
+ const blockquote = ({ children }: { children: React.ReactNode }) => {
4
+ return (
5
+ <blockquote className="border-l-[1px] border-primary pl-4 italic text-foreground/60 my-4">
6
+ {children}
7
+ </blockquote>
8
+ )
9
+ }
10
+
11
+ export default blockquote
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+ import { Card, CardContent } from '@workspace/ui/components/shadcn/card'
3
+
4
+ const code = ({ children }: { children: React.ReactNode }) => {
5
+ return (
6
+ <Card className="bg-background/50 rounded-lg my-8 shadow-lg overflow-x-auto">
7
+ <CardContent className="p-4">
8
+ <pre className="text-sm text-foreground font-mono whitespace-pre-wrap break-words">
9
+ {children}
10
+ </pre>
11
+ </CardContent>
12
+ </Card>
13
+ )
14
+ }
15
+
16
+ export default code
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { motion } from "framer-motion";
3
+
4
+
5
+ const h1 = ({ children }: { children: React.ReactNode }) => {
6
+ return (
7
+ <motion.h1
8
+ initial={{ opacity: 0, scale: 0.95 }}
9
+ animate={{ opacity: 1, scale: 1 }}
10
+ transition={{ duration: 0.5 }}
11
+ className="text-5xl font-serif font-bold my-6"
12
+ >
13
+ {children}
14
+ </motion.h1>
15
+ )
16
+ }
17
+
18
+ export default h1
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { motion } from "framer-motion";
3
+
4
+
5
+ const h2 = ({ children }: { children: React.ReactNode }) => {
6
+ return (
7
+ <motion.h2
8
+ initial={{ opacity: 0, scale: 0.95 }}
9
+ animate={{ opacity: 1, scale: 1 }}
10
+ transition={{ duration: 0.5 }}
11
+ className="text-3xl font-serif font-bold my-4"
12
+ >
13
+ {children}
14
+ </motion.h2>
15
+ )
16
+ }
17
+
18
+ export default h2
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { motion } from "framer-motion";
3
+
4
+
5
+ const h3 = ({ children }: { children: React.ReactNode }) => {
6
+ return (
7
+ <motion.h3
8
+ initial={{ opacity: 0, scale: 0.95 }}
9
+ animate={{ opacity: 1, scale: 1 }}
10
+ transition={{ duration: 0.5 }}
11
+ className="text-2xl font-serif font-semibold my-3"
12
+ >
13
+ {children}
14
+ </motion.h3>
15
+ )
16
+ }
17
+
18
+ export default h3
@@ -0,0 +1,7 @@
1
+ import { Separator } from "@workspace/ui/components/shadcn/separator";
2
+
3
+ const MdxSeparator = () => (
4
+ <Separator className="my-8" />
5
+ );
6
+
7
+ export default MdxSeparator
@@ -0,0 +1,7 @@
1
+ const Li = ({ children }: { children: React.ReactNode }) => (
2
+ <li className="my-2">
3
+ {children}
4
+ </li>
5
+ );
6
+
7
+ export default Li