@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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -16
  3. package/cli.mjs +126 -0
  4. package/package.json +14 -58
  5. package/.eslintrc.json +0 -8
  6. package/.prettierignore +0 -4
  7. package/STRUCTURE.md +0 -77
  8. package/bin/cli.mjs +0 -126
  9. package/components.json +0 -21
  10. package/next.config.ts +0 -22
  11. package/postcss.config.mjs +0 -8
  12. package/prettier.config.js +0 -7
  13. package/public/android-chrome-192x192.png +0 -0
  14. package/public/android-chrome-512x512.png +0 -0
  15. package/public/favicon.svg +0 -1
  16. package/public/loading-dots.gif +0 -0
  17. package/public/logo.svg +0 -1
  18. package/public/ogImage.webp +0 -0
  19. package/public/site.webmanifest +0 -19
  20. package/src/actions/placeholder.ts +0 -30
  21. package/src/actions/sampleAction.ts +0 -39
  22. package/src/app/(index)/intr/TestCard.tsx +0 -31
  23. package/src/app/(index)/intr/page.tsx +0 -17
  24. package/src/app/(index)/page.tsx +0 -156
  25. package/src/app/(index)/pagetr/page.tsx +0 -37
  26. package/src/app/error-wrapper.tsx +0 -32
  27. package/src/app/global-error.tsx +0 -53
  28. package/src/app/layout.tsx +0 -56
  29. package/src/app/loading.tsx +0 -11
  30. package/src/app/not-found.tsx +0 -45
  31. package/src/app/sitemap.ts +0 -14
  32. package/src/components/Providers/root-provider.tsx +0 -22
  33. package/src/components/Providers/theme-provider.tsx +0 -27
  34. package/src/components/TestComp.tsx +0 -11
  35. package/src/components/brand.tsx +0 -35
  36. package/src/components/navigation/footer.tsx +0 -32
  37. package/src/components/navigation/main-nav.tsx +0 -55
  38. package/src/components/navigation/mobile-nav.tsx +0 -154
  39. package/src/components/navigation/site-header.tsx +0 -67
  40. package/src/components/ui/avatar.tsx +0 -50
  41. package/src/components/ui/badge.tsx +0 -36
  42. package/src/components/ui/button.tsx +0 -56
  43. package/src/components/ui/card.tsx +0 -79
  44. package/src/components/ui/command.tsx +0 -153
  45. package/src/components/ui/dialog.tsx +0 -122
  46. package/src/components/ui/drawer.tsx +0 -118
  47. package/src/components/ui/dropdown-menu.tsx +0 -200
  48. package/src/components/ui/input.tsx +0 -22
  49. package/src/components/ui/label.tsx +0 -26
  50. package/src/components/ui/multi-select.tsx +0 -380
  51. package/src/components/ui/origin/multiselect.tsx +0 -645
  52. package/src/components/ui/popover.tsx +0 -31
  53. package/src/components/ui/radio-group.tsx +0 -44
  54. package/src/components/ui/separator.tsx +0 -31
  55. package/src/components/ui/skeleton.tsx +0 -15
  56. package/src/components/ui/themeSelector.tsx +0 -157
  57. package/src/components/ui/toast.tsx +0 -129
  58. package/src/components/ui/toaster.tsx +0 -31
  59. package/src/components/ui/tooltip.tsx +0 -39
  60. package/src/components/utils/ConditionalLink.tsx +0 -46
  61. package/src/components/utils/Image.tsx +0 -57
  62. package/src/components/utils/Img.tsx +0 -104
  63. package/src/components/utils/Spinner.tsx +0 -29
  64. package/src/components/utils/TopButton.tsx +0 -67
  65. package/src/components/utils/TransitionLink.tsx +0 -67
  66. package/src/components/utils/copy.tsx +0 -98
  67. package/src/components/utils/featureFlag.tsx +0 -22
  68. package/src/components/utils/icons.tsx +0 -155
  69. package/src/components/utils/share-modal.tsx +0 -159
  70. package/src/hooks/use-intersection.ts +0 -52
  71. package/src/hooks/use-lazy-load.ts +0 -33
  72. package/src/hooks/use-meta-color.ts +0 -25
  73. package/src/hooks/use-toast.ts +0 -191
  74. package/src/lib/config/featureflags.ts +0 -63
  75. package/src/lib/config/siteConfig.ts +0 -172
  76. package/src/lib/config/user.ts +0 -9
  77. package/src/lib/data/footer-data.ts +0 -85
  78. package/src/lib/data/nav-data.ts +0 -30
  79. package/src/lib/data/siteData.ts +0 -52
  80. package/src/lib/utils/index.ts +0 -190
  81. package/src/styles/customGlobal.css +0 -141
  82. package/src/styles/globals.css +0 -72
  83. package/src/styles/tailwind/base.ts +0 -46
  84. package/src/styles/tailwind/fonts/ClashDisplay-Bold.eot +0 -0
  85. package/src/styles/tailwind/fonts/ClashDisplay-Bold.ttf +0 -0
  86. package/src/styles/tailwind/fonts/ClashDisplay-Bold.woff +0 -0
  87. package/src/styles/tailwind/fonts/ClashDisplay-Bold.woff2 +0 -0
  88. package/src/styles/tailwind/fonts/ClashDisplay-Extralight.eot +0 -0
  89. package/src/styles/tailwind/fonts/ClashDisplay-Extralight.ttf +0 -0
  90. package/src/styles/tailwind/fonts/ClashDisplay-Extralight.woff +0 -0
  91. package/src/styles/tailwind/fonts/ClashDisplay-Extralight.woff2 +0 -0
  92. package/src/styles/tailwind/fonts/ClashDisplay-Light.eot +0 -0
  93. package/src/styles/tailwind/fonts/ClashDisplay-Light.ttf +0 -0
  94. package/src/styles/tailwind/fonts/ClashDisplay-Light.woff +0 -0
  95. package/src/styles/tailwind/fonts/ClashDisplay-Light.woff2 +0 -0
  96. package/src/styles/tailwind/fonts/ClashDisplay-Medium.eot +0 -0
  97. package/src/styles/tailwind/fonts/ClashDisplay-Medium.ttf +0 -0
  98. package/src/styles/tailwind/fonts/ClashDisplay-Medium.woff +0 -0
  99. package/src/styles/tailwind/fonts/ClashDisplay-Medium.woff2 +0 -0
  100. package/src/styles/tailwind/fonts/ClashDisplay-Regular.eot +0 -0
  101. package/src/styles/tailwind/fonts/ClashDisplay-Regular.ttf +0 -0
  102. package/src/styles/tailwind/fonts/ClashDisplay-Regular.woff +0 -0
  103. package/src/styles/tailwind/fonts/ClashDisplay-Regular.woff2 +0 -0
  104. package/src/styles/tailwind/fonts/ClashDisplay-Semibold.eot +0 -0
  105. package/src/styles/tailwind/fonts/ClashDisplay-Semibold.ttf +0 -0
  106. package/src/styles/tailwind/fonts/ClashDisplay-Semibold.woff +0 -0
  107. package/src/styles/tailwind/fonts/ClashDisplay-Semibold.woff2 +0 -0
  108. package/src/styles/tailwind/fonts/ClashDisplay-Variable.eot +0 -0
  109. package/src/styles/tailwind/fonts/ClashDisplay-Variable.ttf +0 -0
  110. package/src/styles/tailwind/fonts/ClashDisplay-Variable.woff +0 -0
  111. package/src/styles/tailwind/fonts/ClashDisplay-Variable.woff2 +0 -0
  112. package/src/styles/tailwind/fonts/GeistMonoVF.woff +0 -0
  113. package/src/styles/tailwind/fonts/GeistVF.woff +0 -0
  114. package/src/styles/tailwind/fonts.ts +0 -51
  115. package/src/styles/tailwind/tailwindUtils.ts +0 -29
  116. package/src/types/index.ts +0 -80
  117. package/tailwind.config.ts +0 -104
  118. package/tsconfig.json +0 -28
  119. package/vercel.json +0 -6
@@ -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
- }
@@ -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
- })
@@ -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
- })
@@ -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
- }