@ardly/bunext 1.0.6 → 1.0.7
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/LICENSE +21 -0
- package/README.md +33 -16
- package/cli.mjs +126 -0
- package/package.json +14 -58
- package/.eslintrc.json +0 -8
- package/.prettierignore +0 -4
- package/STRUCTURE.md +0 -77
- package/bin/cli.mjs +0 -126
- package/components.json +0 -21
- package/next.config.ts +0 -22
- package/postcss.config.mjs +0 -8
- package/prettier.config.js +0 -7
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/favicon.svg +0 -1
- package/public/loading-dots.gif +0 -0
- package/public/logo.svg +0 -1
- package/public/ogImage.webp +0 -0
- package/public/site.webmanifest +0 -19
- package/src/actions/placeholder.ts +0 -30
- package/src/actions/sampleAction.ts +0 -39
- package/src/app/(index)/intr/TestCard.tsx +0 -31
- package/src/app/(index)/intr/page.tsx +0 -17
- package/src/app/(index)/page.tsx +0 -156
- package/src/app/(index)/pagetr/page.tsx +0 -37
- package/src/app/error-wrapper.tsx +0 -32
- package/src/app/global-error.tsx +0 -53
- package/src/app/layout.tsx +0 -56
- package/src/app/loading.tsx +0 -11
- package/src/app/not-found.tsx +0 -45
- package/src/app/sitemap.ts +0 -14
- package/src/components/Providers/root-provider.tsx +0 -22
- package/src/components/Providers/theme-provider.tsx +0 -27
- package/src/components/TestComp.tsx +0 -11
- package/src/components/brand.tsx +0 -35
- package/src/components/navigation/footer.tsx +0 -32
- package/src/components/navigation/main-nav.tsx +0 -55
- package/src/components/navigation/mobile-nav.tsx +0 -154
- package/src/components/navigation/site-header.tsx +0 -67
- package/src/components/ui/avatar.tsx +0 -50
- package/src/components/ui/badge.tsx +0 -36
- package/src/components/ui/button.tsx +0 -56
- package/src/components/ui/card.tsx +0 -79
- package/src/components/ui/command.tsx +0 -153
- package/src/components/ui/dialog.tsx +0 -122
- package/src/components/ui/drawer.tsx +0 -118
- package/src/components/ui/dropdown-menu.tsx +0 -200
- package/src/components/ui/input.tsx +0 -22
- package/src/components/ui/label.tsx +0 -26
- package/src/components/ui/multi-select.tsx +0 -380
- package/src/components/ui/origin/multiselect.tsx +0 -645
- package/src/components/ui/popover.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -44
- package/src/components/ui/separator.tsx +0 -31
- package/src/components/ui/skeleton.tsx +0 -15
- package/src/components/ui/themeSelector.tsx +0 -157
- package/src/components/ui/toast.tsx +0 -129
- package/src/components/ui/toaster.tsx +0 -31
- package/src/components/ui/tooltip.tsx +0 -39
- package/src/components/utils/ConditionalLink.tsx +0 -46
- package/src/components/utils/Image.tsx +0 -57
- package/src/components/utils/Img.tsx +0 -104
- package/src/components/utils/Spinner.tsx +0 -29
- package/src/components/utils/TopButton.tsx +0 -67
- package/src/components/utils/TransitionLink.tsx +0 -67
- package/src/components/utils/copy.tsx +0 -98
- package/src/components/utils/featureFlag.tsx +0 -22
- package/src/components/utils/icons.tsx +0 -155
- package/src/components/utils/share-modal.tsx +0 -159
- package/src/hooks/use-intersection.ts +0 -52
- package/src/hooks/use-lazy-load.ts +0 -33
- package/src/hooks/use-meta-color.ts +0 -25
- package/src/hooks/use-toast.ts +0 -191
- package/src/lib/config/featureflags.ts +0 -63
- package/src/lib/config/siteConfig.ts +0 -172
- package/src/lib/config/user.ts +0 -9
- package/src/lib/data/footer-data.ts +0 -85
- package/src/lib/data/nav-data.ts +0 -30
- package/src/lib/data/siteData.ts +0 -52
- package/src/lib/utils/index.ts +0 -190
- package/src/styles/customGlobal.css +0 -141
- package/src/styles/globals.css +0 -72
- package/src/styles/tailwind/base.ts +0 -46
- package/src/styles/tailwind/fonts/ClashDisplay-Bold.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Bold.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Bold.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Bold.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Extralight.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Extralight.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Extralight.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Extralight.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Light.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Light.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Light.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Light.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Medium.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Medium.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Medium.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Medium.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Regular.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Regular.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Regular.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Regular.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Semibold.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Semibold.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Semibold.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Semibold.woff2 +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Variable.eot +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Variable.ttf +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Variable.woff +0 -0
- package/src/styles/tailwind/fonts/ClashDisplay-Variable.woff2 +0 -0
- package/src/styles/tailwind/fonts/GeistMonoVF.woff +0 -0
- package/src/styles/tailwind/fonts/GeistVF.woff +0 -0
- package/src/styles/tailwind/fonts.ts +0 -51
- package/src/styles/tailwind/tailwindUtils.ts +0 -29
- package/src/types/index.ts +0 -80
- package/tailwind.config.ts +0 -104
- package/tsconfig.json +0 -28
- package/vercel.json +0 -6
package/src/lib/utils/index.ts
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { type ClassValue, clsx } from 'clsx'
|
|
2
|
-
import { twMerge } from 'tailwind-merge'
|
|
3
|
-
|
|
4
|
-
export function cn(...inputs: ClassValue[]) {
|
|
5
|
-
return twMerge(clsx(inputs))
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function absoluteUrl(path: string) {
|
|
9
|
-
return `${process.env.NEXT_PUBLIC_APP_URL}${path}`
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const isSSR = typeof window === 'undefined'
|
|
13
|
-
export const getPlaceholder = (width: number, height: number) =>
|
|
14
|
-
`https://v0.dev/placeholder.svg?height=${height}&width=${width}`
|
|
15
|
-
|
|
16
|
-
// converts smv to base64
|
|
17
|
-
export const svgToBase64 = (str: string) =>
|
|
18
|
-
isSSR ? Buffer.from(str).toString('base64') : window.btoa(str)
|
|
19
|
-
|
|
20
|
-
// returns a promise that resolves after a given number of milliseconds
|
|
21
|
-
export function sleep(ms: number): Promise<void> {
|
|
22
|
-
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// contaverts text to normal case
|
|
26
|
-
export function convertToNormalCase(inputString: string | undefined) {
|
|
27
|
-
if (!inputString) return inputString
|
|
28
|
-
const splittedString = inputString.split('.').pop()
|
|
29
|
-
const string = splittedString || inputString
|
|
30
|
-
const words = string.replace(/([a-z])([A-Z])/g, '$1 $2').split(/_|\s+/)
|
|
31
|
-
const capitalizedWords = words.map(
|
|
32
|
-
(word) => word.charAt(0).toUpperCase() + word.slice(1)
|
|
33
|
-
)
|
|
34
|
-
return capitalizedWords.join(' ')
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// capitalize the first letter of a string
|
|
38
|
-
export function capitalizeFirstLetter(
|
|
39
|
-
string: string | undefined
|
|
40
|
-
): string | undefined {
|
|
41
|
-
if (!string) return string
|
|
42
|
-
return string.charAt(0).toUpperCase() + string.slice(1)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// string shortner
|
|
46
|
-
export function truncateString(
|
|
47
|
-
str: string | undefined,
|
|
48
|
-
maxStrLength: number
|
|
49
|
-
): string {
|
|
50
|
-
if (!str) return ''
|
|
51
|
-
if (str.length > maxStrLength) return `${str.slice(0, maxStrLength)}...`
|
|
52
|
-
return str
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// qr code img generator, default size is 250x250px
|
|
56
|
-
export function getQrCode(link: string, size?: string): string {
|
|
57
|
-
const qrValue = link
|
|
58
|
-
const qrSize = size || '250'
|
|
59
|
-
return `https://api.qrserver.com/v1/create-qr-code/?size=${qrSize}x${qrSize}&data=${qrValue}`
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// check if email is valid and returns true or false
|
|
63
|
-
export function isValidEmail(email: string): boolean {
|
|
64
|
-
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
|
|
65
|
-
return regex.test(email)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// uniq code generator that takes in current time
|
|
69
|
-
export const generateUniqueCode = (): string | null => {
|
|
70
|
-
const currentTime = new Date()
|
|
71
|
-
const uniqueCode =
|
|
72
|
-
Math.random().toString(36).substring(2, 14) +
|
|
73
|
-
currentTime
|
|
74
|
-
.toISOString()
|
|
75
|
-
.replace(/[-:.TZ]/g, Math.random().toString(32).substring(2, 3)) +
|
|
76
|
-
Math.random().toString(36).substring(2, 14) +
|
|
77
|
-
Math.random().toString(32).substring(2, 8) +
|
|
78
|
-
Math.random().toString(36).substring(2, 14)
|
|
79
|
-
return uniqueCode?.toString()
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Generate a random number in a range.
|
|
83
|
-
export const randomNum = (min: number, max: number): number =>
|
|
84
|
-
Math.floor(Math.random() * (max - min)) + min
|
|
85
|
-
// simple hashing algorithm (not secure for password hashing)
|
|
86
|
-
export function murmurhash(key: string) {
|
|
87
|
-
const remainder = key.length & 3
|
|
88
|
-
const bytes = key.length - remainder
|
|
89
|
-
const c1 = 0xcc9e2d51
|
|
90
|
-
const c2 = 0x1b873593
|
|
91
|
-
|
|
92
|
-
let h1 = 0
|
|
93
|
-
let i = 0
|
|
94
|
-
|
|
95
|
-
while (i < bytes) {
|
|
96
|
-
let k1 =
|
|
97
|
-
(key.charCodeAt(i) & 0xff) |
|
|
98
|
-
((key.charCodeAt(++i) & 0xff) << 8) |
|
|
99
|
-
((key.charCodeAt(++i) & 0xff) << 16) |
|
|
100
|
-
((key.charCodeAt(++i) & 0xff) << 24)
|
|
101
|
-
++i
|
|
102
|
-
|
|
103
|
-
k1 =
|
|
104
|
-
((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff
|
|
105
|
-
k1 = (k1 << 15) | (k1 >>> 17)
|
|
106
|
-
k1 =
|
|
107
|
-
((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff
|
|
108
|
-
|
|
109
|
-
h1 ^= k1
|
|
110
|
-
h1 = (h1 << 13) | (h1 >>> 19)
|
|
111
|
-
const h1b =
|
|
112
|
-
((h1 & 0xffff) * 5 + ((((h1 >>> 16) * 5) & 0xffff) << 16)) & 0xffffffff
|
|
113
|
-
h1 = (h1b & 0xffff) + 0x6b64 + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
let k2 = 0
|
|
117
|
-
|
|
118
|
-
switch (remainder) {
|
|
119
|
-
case 3:
|
|
120
|
-
k2 ^= (key.charCodeAt(i + 2) & 0xff) << 16
|
|
121
|
-
// falls through
|
|
122
|
-
case 2:
|
|
123
|
-
k2 ^= (key.charCodeAt(i + 1) & 0xff) << 8
|
|
124
|
-
// falls through
|
|
125
|
-
case 1:
|
|
126
|
-
k2 ^= key.charCodeAt(i) & 0xff
|
|
127
|
-
|
|
128
|
-
k2 =
|
|
129
|
-
((k2 & 0xffff) * c1 + ((((k2 >>> 16) * c1) & 0xffff) << 16)) &
|
|
130
|
-
0xffffffff
|
|
131
|
-
k2 = (k2 << 15) | (k2 >>> 17)
|
|
132
|
-
k2 =
|
|
133
|
-
((k2 & 0xffff) * c2 + ((((k2 >>> 16) * c2) & 0xffff) << 16)) &
|
|
134
|
-
0xffffffff
|
|
135
|
-
h1 ^= k2
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
h1 ^= key.length
|
|
139
|
-
|
|
140
|
-
h1 ^= h1 >>> 16
|
|
141
|
-
h1 =
|
|
142
|
-
((h1 & 0xffff) * 0x85ebca6b +
|
|
143
|
-
((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) &
|
|
144
|
-
0xffffffff
|
|
145
|
-
h1 ^= h1 >>> 13
|
|
146
|
-
h1 =
|
|
147
|
-
((h1 & 0xffff) * 0xc2b2ae35 +
|
|
148
|
-
((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16)) &
|
|
149
|
-
0xffffffff
|
|
150
|
-
h1 ^= h1 >>> 16
|
|
151
|
-
|
|
152
|
-
return h1 >>> 0
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export const shimmer = (w: number | `${number}`, h: number | `${number}`) => {
|
|
156
|
-
const color = { center: '#efefef', side: '#dfdfdf' }
|
|
157
|
-
return `
|
|
158
|
-
<svg width="${w}" height="${h}" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
159
|
-
<defs>
|
|
160
|
-
<linearGradient id="g">
|
|
161
|
-
<stop stop-color="${color.side}" offset="20%" />
|
|
162
|
-
<stop stop-color="${color.center}" offset="50%" />
|
|
163
|
-
<stop stop-color="${color.side}" offset="70%" />
|
|
164
|
-
</linearGradient>
|
|
165
|
-
</defs>
|
|
166
|
-
<rect width="${w}" height="${h}" fill="${color.side}" />
|
|
167
|
-
<rect id="r" width="${w}" height="${h}" fill="url(#g)" />
|
|
168
|
-
<animate xlink:href="#r" attributeName="x" from="-${w}" to="${w}" dur="1s" repeatCount="indefinite" />
|
|
169
|
-
</svg>`
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export function cleanSrc(src: string): string {
|
|
173
|
-
if (src.includes('/public/')) return src.replace('/public/', '/')
|
|
174
|
-
return src
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export const encodeBase64 = (str: string): string => {
|
|
178
|
-
return encodeURIComponent(Buffer.from(str).toString('base64'))
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export const decodeBase64 = (encodedStr: string): string => {
|
|
182
|
-
try {
|
|
183
|
-
return Buffer.from(decodeURIComponent(encodedStr), 'base64').toString(
|
|
184
|
-
'utf-8'
|
|
185
|
-
)
|
|
186
|
-
} catch (error) {
|
|
187
|
-
console.error('Error decoding base64 string:', error)
|
|
188
|
-
return ''
|
|
189
|
-
}
|
|
190
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/* responsive font sizes | comment this out if you wanna use defaults */
|
|
2
|
-
:root {
|
|
3
|
-
font-size: 15px;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
@media (min-width: 1600px) {
|
|
7
|
-
:root {
|
|
8
|
-
font-size: 17px;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
@media (min-width: 1800px) {
|
|
13
|
-
:root {
|
|
14
|
-
font-size: 18px;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/* page transition css start */
|
|
19
|
-
.page-transition-easing {
|
|
20
|
-
transition-property: opacity, transform, filter, background;
|
|
21
|
-
transition-timing-function: ease-in-out;
|
|
22
|
-
transition-duration: 300ms;
|
|
23
|
-
}
|
|
24
|
-
@media (prefers-reduced-motion) {
|
|
25
|
-
.page-transition-easing {
|
|
26
|
-
transition-property: opacity, transform, filter, background;
|
|
27
|
-
transition-timing-function: none;
|
|
28
|
-
transition-duration: 0;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
.page-transition {
|
|
32
|
-
opacity: 0;
|
|
33
|
-
background: hsl(var(--background));
|
|
34
|
-
transform: translateY(40px);
|
|
35
|
-
filter: blur(12px);
|
|
36
|
-
}
|
|
37
|
-
/* page transition css end */
|
|
38
|
-
|
|
39
|
-
/* fix layout shift of select box */
|
|
40
|
-
html > body[style] {
|
|
41
|
-
margin-right: 0 !important;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* input field fix*/
|
|
45
|
-
input::-webkit-outer-spin-button,
|
|
46
|
-
input::-webkit-inner-spin-button {
|
|
47
|
-
-webkit-appearance: none;
|
|
48
|
-
margin: 0;
|
|
49
|
-
}
|
|
50
|
-
input[type='number'] {
|
|
51
|
-
appearance: textfield;
|
|
52
|
-
-moz-appearance: textfield;
|
|
53
|
-
}
|
|
54
|
-
input {
|
|
55
|
-
outline: 0 solid transparent;
|
|
56
|
-
}
|
|
57
|
-
::-webkit-scrollbar-thumb:hover {
|
|
58
|
-
cursor: pointer;
|
|
59
|
-
}
|
|
60
|
-
/* gradients for cricle overlays */
|
|
61
|
-
.bg_primary_radial_gradient {
|
|
62
|
-
background: hsl(var(--primary) / 0.03);
|
|
63
|
-
background: radial-gradient(
|
|
64
|
-
circle,
|
|
65
|
-
hsl(var(--primary) / 0.5) 0%,
|
|
66
|
-
hsl(var(--primary) / 0.18) 30%,
|
|
67
|
-
hsl(var(--primary) / 0.05) 50%,
|
|
68
|
-
hsl(var(--primary) / 0) 70%
|
|
69
|
-
);
|
|
70
|
-
background-size: cover;
|
|
71
|
-
background-position: center;
|
|
72
|
-
object-fit: fill;
|
|
73
|
-
}
|
|
74
|
-
.bg_foreground_radial_gradient {
|
|
75
|
-
background: hsl(var(--foreground) / 0.01);
|
|
76
|
-
background: radial-gradient(
|
|
77
|
-
circle,
|
|
78
|
-
hsl(var(--foreground) / 0.3) 0%,
|
|
79
|
-
hsl(var(--foreground) / 0.09) 30%,
|
|
80
|
-
hsl(var(--foreground) / 0.02) 50%,
|
|
81
|
-
hsl(var(--foreground) / 0) 70%
|
|
82
|
-
);
|
|
83
|
-
background-size: cover;
|
|
84
|
-
background-position: center;
|
|
85
|
-
object-fit: fill;
|
|
86
|
-
}
|
|
87
|
-
.dark .bg_primary_radial_gradient {
|
|
88
|
-
background: hsl(var(--primary) / 0.03);
|
|
89
|
-
background: radial-gradient(
|
|
90
|
-
circle,
|
|
91
|
-
hsl(var(--primary) / 0.4) 0%,
|
|
92
|
-
hsl(var(--primary) / 0.15) 30%,
|
|
93
|
-
hsl(var(--primary) / 0.05) 50%,
|
|
94
|
-
hsl(var(--primary) / 0) 70%
|
|
95
|
-
);
|
|
96
|
-
background-size: cover;
|
|
97
|
-
background-position: center;
|
|
98
|
-
object-fit: fill;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.boder_primary_gradient {
|
|
102
|
-
background: hsl(var(--primary) / 0.03);
|
|
103
|
-
background: radial-gradient(
|
|
104
|
-
linear,
|
|
105
|
-
hsl(var(--primary) / 0.5) 0%,
|
|
106
|
-
hsl(var(--primary) / 0.18) 30%,
|
|
107
|
-
hsl(var(--primary) / 0.05) 50%,
|
|
108
|
-
hsl(var(--primary) / 0) 70%
|
|
109
|
-
);
|
|
110
|
-
background: linear-gradient(
|
|
111
|
-
320deg,
|
|
112
|
-
rgba(119, 47, 253, 1) 0%,
|
|
113
|
-
rgba(61, 28, 101, 0.7) 15%,
|
|
114
|
-
rgba(140, 47, 253, 0) 40%,
|
|
115
|
-
rgba(129, 47, 253, 0) 65%,
|
|
116
|
-
rgba(89, 34, 152, 0.6) 88%,
|
|
117
|
-
rgba(119, 47, 253, 1) 100%
|
|
118
|
-
);
|
|
119
|
-
background-size: cover;
|
|
120
|
-
background-position: center;
|
|
121
|
-
object-fit: fill;
|
|
122
|
-
}
|
|
123
|
-
.boder_primary_gradient::before {
|
|
124
|
-
content: '';
|
|
125
|
-
width: calc(100% - 2px);
|
|
126
|
-
height: calc(100% - 2px);
|
|
127
|
-
border-radius: 50%;
|
|
128
|
-
background-color: hsl(var(--background));
|
|
129
|
-
position: absolute;
|
|
130
|
-
top: 50%;
|
|
131
|
-
left: 50%;
|
|
132
|
-
transform: translate(-50%, -50%);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.bg_liner_overlay_gradient {
|
|
136
|
-
background: linear-gradient(
|
|
137
|
-
180deg,
|
|
138
|
-
hsl(var(--background) / 0) 0%,
|
|
139
|
-
hsl(var(--background) / 1) 100%
|
|
140
|
-
);
|
|
141
|
-
}
|
package/src/styles/globals.css
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
@tailwind base;
|
|
2
|
-
@tailwind components;
|
|
3
|
-
@tailwind utilities;
|
|
4
|
-
|
|
5
|
-
body {
|
|
6
|
-
font-family: Arial, Helvetica, sans-serif;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
@layer base {
|
|
10
|
-
:root {
|
|
11
|
-
--background: 0 0% 100%;
|
|
12
|
-
--foreground: 0 0% 3.9%;
|
|
13
|
-
--card: 0 0% 100%;
|
|
14
|
-
--card-foreground: 0 0% 3.9%;
|
|
15
|
-
--popover: 0 0% 100%;
|
|
16
|
-
--popover-foreground: 0 0% 3.9%;
|
|
17
|
-
--primary: 0 0% 9%;
|
|
18
|
-
--primary-foreground: 0 0% 98%;
|
|
19
|
-
--secondary: 0 0% 96.1%;
|
|
20
|
-
--secondary-foreground: 0 0% 9%;
|
|
21
|
-
--muted: 0 0% 96.1%;
|
|
22
|
-
--muted-foreground: 0 0% 45.1%;
|
|
23
|
-
--accent: 0 0% 96.1%;
|
|
24
|
-
--accent-foreground: 0 0% 9%;
|
|
25
|
-
--destructive: 0 84.2% 60.2%;
|
|
26
|
-
--destructive-foreground: 0 0% 98%;
|
|
27
|
-
--border: 0 0% 89.8%;
|
|
28
|
-
--input: 0 0% 89.8%;
|
|
29
|
-
--ring: 0 0% 3.9%;
|
|
30
|
-
--chart-1: 12 76% 61%;
|
|
31
|
-
--chart-2: 173 58% 39%;
|
|
32
|
-
--chart-3: 197 37% 24%;
|
|
33
|
-
--chart-4: 43 74% 66%;
|
|
34
|
-
--chart-5: 27 87% 67%;
|
|
35
|
-
--radius: 0.5rem;
|
|
36
|
-
}
|
|
37
|
-
.dark {
|
|
38
|
-
--background: 0 0% 3.9%;
|
|
39
|
-
--foreground: 0 0% 98%;
|
|
40
|
-
--card: 0 0% 3.9%;
|
|
41
|
-
--card-foreground: 0 0% 98%;
|
|
42
|
-
--popover: 0 0% 3.9%;
|
|
43
|
-
--popover-foreground: 0 0% 98%;
|
|
44
|
-
--primary: 0 0% 98%;
|
|
45
|
-
--primary-foreground: 0 0% 9%;
|
|
46
|
-
--secondary: 0 0% 14.9%;
|
|
47
|
-
--secondary-foreground: 0 0% 98%;
|
|
48
|
-
--muted: 0 0% 14.9%;
|
|
49
|
-
--muted-foreground: 0 0% 63.9%;
|
|
50
|
-
--accent: 0 0% 14.9%;
|
|
51
|
-
--accent-foreground: 0 0% 98%;
|
|
52
|
-
--destructive: 0 62.8% 30.6%;
|
|
53
|
-
--destructive-foreground: 0 0% 98%;
|
|
54
|
-
--border: 0 0% 14.9%;
|
|
55
|
-
--input: 0 0% 14.9%;
|
|
56
|
-
--ring: 0 0% 83.1%;
|
|
57
|
-
--chart-1: 220 70% 50%;
|
|
58
|
-
--chart-2: 160 60% 45%;
|
|
59
|
-
--chart-3: 30 80% 55%;
|
|
60
|
-
--chart-4: 280 65% 60%;
|
|
61
|
-
--chart-5: 340 75% 55%;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@layer base {
|
|
66
|
-
* {
|
|
67
|
-
@apply border-border;
|
|
68
|
-
}
|
|
69
|
-
body {
|
|
70
|
-
@apply bg-background text-foreground;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import plugin from 'tailwindcss/plugin'
|
|
2
|
-
|
|
3
|
-
export const base = plugin(({ addBase, addVariant, matchVariant }) => {
|
|
4
|
-
const states = {
|
|
5
|
-
selected: 'data-selected=true',
|
|
6
|
-
open: 'data-state=open',
|
|
7
|
-
on: 'data-state=on',
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
addBase({
|
|
11
|
-
'*': { '@apply border-border min-w-0': {} },
|
|
12
|
-
'::-webkit-scrollbar': { width: '8px', height: '8px' },
|
|
13
|
-
'::-webkit-scrollbar-thumb': {
|
|
14
|
-
borderRadius: '8px',
|
|
15
|
-
'@apply bg-foreground/20 dark:bg-foreground/15': {},
|
|
16
|
-
},
|
|
17
|
-
'::-webkit-scrollbar-thumb:hover': { '@apply bg-foreground/35': {} },
|
|
18
|
-
'::-webkit-scrollbar-track': {
|
|
19
|
-
'@apply bg-foreground/5': {},
|
|
20
|
-
},
|
|
21
|
-
})
|
|
22
|
-
addBase({
|
|
23
|
-
html: {
|
|
24
|
-
overflowX: 'clip',
|
|
25
|
-
'--scroll-behavior': 'smooth',
|
|
26
|
-
scrollBehavior: 'smooth',
|
|
27
|
-
},
|
|
28
|
-
body: {
|
|
29
|
-
'@apply bg-background text-foreground min-h-screen antialiased overflow-x-clip selection:text-white selection:bg-zinc-700 dark:selection:text-black dark:selection:bg-white':
|
|
30
|
-
{},
|
|
31
|
-
'font-feature-settings': `'rlig' 1, 'calt' 1`,
|
|
32
|
-
},
|
|
33
|
-
'input,textarea': {
|
|
34
|
-
'@apply bg-transparent outline-none w-full': {},
|
|
35
|
-
},
|
|
36
|
-
})
|
|
37
|
-
for (const [name, definition] of Object.entries(states)) {
|
|
38
|
-
addVariant(name, `&[${definition}]`)
|
|
39
|
-
}
|
|
40
|
-
matchVariant('nth', (value) => {
|
|
41
|
-
return `&:nth-child(${value})`
|
|
42
|
-
})
|
|
43
|
-
matchVariant('nth-reverse', (value) => {
|
|
44
|
-
return `&:nth-last-child(${value})`
|
|
45
|
-
})
|
|
46
|
-
})
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Roboto as FontSans } from 'next/font/google'
|
|
2
|
-
import localFont from 'next/font/local'
|
|
3
|
-
|
|
4
|
-
const fontSans = FontSans({
|
|
5
|
-
subsets: ['latin'],
|
|
6
|
-
weight: ['400', '500', '700'],
|
|
7
|
-
variable: '--font-inter',
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
const ClashDisplay = localFont({
|
|
11
|
-
src: [
|
|
12
|
-
{
|
|
13
|
-
path: './fonts/ClashDisplay-Extralight.woff2',
|
|
14
|
-
weight: '200',
|
|
15
|
-
style: 'normal',
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
path: './fonts/ClashDisplay-Light.woff2',
|
|
19
|
-
weight: '300',
|
|
20
|
-
style: 'normal',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
path: './fonts/ClashDisplay-Regular.woff2',
|
|
24
|
-
weight: '400',
|
|
25
|
-
style: 'normal',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
path: './fonts/ClashDisplay-Medium.woff2',
|
|
29
|
-
weight: '500',
|
|
30
|
-
style: 'normal',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
path: './fonts/ClashDisplay-Semibold.woff2',
|
|
34
|
-
weight: '600',
|
|
35
|
-
style: 'normal',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
path: './fonts/ClashDisplay-Bold.woff2',
|
|
39
|
-
weight: '700',
|
|
40
|
-
style: 'normal',
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
variable: '--font-clashDisplay',
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
// array of fonts
|
|
47
|
-
export const fontList = [fontSans, ClashDisplay]
|
|
48
|
-
// add font variable names to tailwind.config.ts aswell
|
|
49
|
-
|
|
50
|
-
// Export class names for root layout
|
|
51
|
-
export const fonts = fontList.map((font) => font.variable).join(' ')
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import plugin from 'tailwindcss/plugin'
|
|
2
|
-
|
|
3
|
-
export const utilities = plugin(({ addUtilities }) => {
|
|
4
|
-
addUtilities({
|
|
5
|
-
'.scrollbar-hidden::-webkit-scrollbar': { display: 'none' },
|
|
6
|
-
'.scrollbar-hidden': { msOverflowStyle: 'none', scrollbarWidth: 'none' },
|
|
7
|
-
'.scrollbar-thin::-webkit-scrollbar': { width: '4px', height: '4px' },
|
|
8
|
-
'.break-words': {
|
|
9
|
-
'white-space': 'pre-wrap',
|
|
10
|
-
'word-break': 'break-word',
|
|
11
|
-
},
|
|
12
|
-
'.center-x': { '@apply ml-[50%] -translate-x-1/2': {} },
|
|
13
|
-
'.center-y': { '@apply mt-[50%] -translate-y-1/2': {} },
|
|
14
|
-
'.center-position-x': { '@apply left-[50%] -translate-x-1/2': {} },
|
|
15
|
-
'.center-position-y': { '@apply top-[50%] -translate-y-1/2': {} },
|
|
16
|
-
'.link': { '@apply text-primary underline-offset-2 hover:underline': {} },
|
|
17
|
-
'.container-mini': { '@apply mx-auto max-w-3xl px-2 w-full': {} },
|
|
18
|
-
'.text-heading': {
|
|
19
|
-
fontSize: 'clamp(3rem, 1.548rem + 3.871vw, 6rem)',
|
|
20
|
-
fontWeight: '700',
|
|
21
|
-
lineHeight: 'clamp(3rem, 1.065rem + 5.161vw, 7rem)',
|
|
22
|
-
},
|
|
23
|
-
'.text-heading-sm': {
|
|
24
|
-
fontSize: 'clamp(1.5rem, 0.774rem + 1.935vw, 3rem)',
|
|
25
|
-
fontWeight: '700',
|
|
26
|
-
lineHeight: 'clamp(1.75rem, 0.874rem + 2.335vw, 3.56rem)',
|
|
27
|
-
},
|
|
28
|
-
})
|
|
29
|
-
})
|
package/src/types/index.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { LucideIcon } from 'lucide-react'
|
|
2
|
-
import type { ImageProps } from 'next/image'
|
|
3
|
-
import type * as React from 'react'
|
|
4
|
-
|
|
5
|
-
type OmittedImageProps = 'height' | 'width' | 'srcSet' | 'placeholder' | 'alt'
|
|
6
|
-
type ModifiedImageProps = Partial<{
|
|
7
|
-
alt: string
|
|
8
|
-
width: number
|
|
9
|
-
height: number
|
|
10
|
-
placeholder: 'blur' | 'color' | 'shimmer' | 'empty' | `data:image/${string}`
|
|
11
|
-
}>
|
|
12
|
-
export type ImgProps = ModifiedImageProps &
|
|
13
|
-
Omit<ImageProps, OmittedImageProps> &
|
|
14
|
-
Omit<React.ImgHTMLAttributes<HTMLImageElement>, OmittedImageProps>
|
|
15
|
-
|
|
16
|
-
export type TLink = {
|
|
17
|
-
label: string
|
|
18
|
-
href: string
|
|
19
|
-
Icon?: LucideIcon | React.ComponentType<React.HTMLAttributes<SVGElement>>
|
|
20
|
-
external?: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type Author = {
|
|
24
|
-
name: string
|
|
25
|
-
url: string
|
|
26
|
-
}
|
|
27
|
-
export type TImage = {
|
|
28
|
-
src: string
|
|
29
|
-
alt: string
|
|
30
|
-
width?: number
|
|
31
|
-
height?: number
|
|
32
|
-
}
|
|
33
|
-
// nav data
|
|
34
|
-
export type TnavData = {
|
|
35
|
-
logo?: TImage
|
|
36
|
-
showTitle: boolean
|
|
37
|
-
title: string
|
|
38
|
-
links: TLink[]
|
|
39
|
-
iconButtons: TLink[]
|
|
40
|
-
}
|
|
41
|
-
type TSimpleFooterText = {
|
|
42
|
-
pretext: string
|
|
43
|
-
label: string
|
|
44
|
-
url: string
|
|
45
|
-
}
|
|
46
|
-
export type TSimpleFooterData = {
|
|
47
|
-
texts: TSimpleFooterText[]
|
|
48
|
-
socialLinks: TLink[]
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type MetadataColor = {
|
|
52
|
-
light: string
|
|
53
|
-
dark: string
|
|
54
|
-
}
|
|
55
|
-
// site data types
|
|
56
|
-
export type TSiteData = {
|
|
57
|
-
favicon: string
|
|
58
|
-
name: string
|
|
59
|
-
shortName: string
|
|
60
|
-
publisher: string
|
|
61
|
-
baseUrl: string
|
|
62
|
-
description: string
|
|
63
|
-
ogImage: TImage
|
|
64
|
-
metadata_color: MetadataColor
|
|
65
|
-
author: Author
|
|
66
|
-
keywords: string[]
|
|
67
|
-
robotsDefault: string
|
|
68
|
-
}
|
|
69
|
-
export type TtwitterMetaData = {
|
|
70
|
-
card: 'summary_large_image'
|
|
71
|
-
title: string
|
|
72
|
-
description: string
|
|
73
|
-
images: string
|
|
74
|
-
creator: string
|
|
75
|
-
}
|
|
76
|
-
export type TMetadataIcons = {
|
|
77
|
-
icon: string
|
|
78
|
-
shortcut: string
|
|
79
|
-
apple: string
|
|
80
|
-
}
|