diff --git a/.gitignore b/.gitignore
index d2d1714d..19df7797 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,6 +50,7 @@ public/build
# Local Netlify folder
.netlify
+deno.lock
# Next.js
.next
diff --git a/.storybook/main.ts b/.storybook/main.ts
index 193b9585..0c234450 100644
--- a/.storybook/main.ts
+++ b/.storybook/main.ts
@@ -13,6 +13,7 @@ export default {
'../libs/shared/ui/**/*.@(mdx|stories.@(js|jsx|ts|tsx))',
'../libs/website/feature/**/*.@(mdx|stories.@(js|jsx|ts|tsx))',
'../libs/website/shared/ui/**/*.@(mdx|stories.@(js|jsx|ts|tsx))',
+ '../libs/website/ui/**/*.@(mdx|stories.@(js|jsx|ts|tsx))',
],
staticDirs: [
// './public',
diff --git a/apps/docs/content/docs/concepts/bullet-proof-react.mdx b/apps/docs/content/docs/concepts/bullet-proof-react.mdx
new file mode 100644
index 00000000..32e411a8
--- /dev/null
+++ b/apps/docs/content/docs/concepts/bullet-proof-react.mdx
@@ -0,0 +1,46 @@
+---
+title: Bullet-Proof React
+description: WIP
+icon: ShieldCheck
+---
+
+import { File, Folder, Files } from 'fumadocs-ui/components/files';
+import { TbBrandTypescript } from "react-icons/tb";
+
+## [Bullet-Proof React](https://reacthandbook.dev/project-standards)
+
+
+Bullet-Proof React is a methodology for building scalable and maintainable front-end application, however, we extend it for our entire codebase.
+We use Bullet-Proof React and [Feature-Sliced Design](/concepts/feature-sliced-design) to create a scalable and maintainable codebase.
+
+In our use case, the Bullet-Proof React is how we organize our [Feature Slices](https://feature-sliced.design/docs/reference/slices-segments)
+
+### Example structure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }/>
+
+
+
diff --git a/apps/docs/content/docs/concepts/feature-sliced-design.mdx b/apps/docs/content/docs/concepts/feature-sliced-design.mdx
new file mode 100644
index 00000000..1aca6270
--- /dev/null
+++ b/apps/docs/content/docs/concepts/feature-sliced-design.mdx
@@ -0,0 +1,107 @@
+---
+title: Feature-Sliced Design
+description: WIP
+icon: Eclipse
+---
+
+import { File, Folder, Files } from 'fumadocs-ui/components/files';
+import {Atom as TSX} from 'lucide-react'
+import { DiJavascript1 } from "react-icons/di";
+import { TbBrandTypescript } from "react-icons/tb";
+import { BsFiletypeJson } from "react-icons/bs";
+import { DiCss3 } from "react-icons/di";
+
+We follow [Feature-Sliced Design](https://feature-sliced.design/docs) for our project structure.
+
+
+
+Feature-Sliced Design is a methodology for building scalable and maintainable front-end applications, but we extend it for our entire codebase.
+It is based on the idea of splitting the application into features, each of which is a separate entity with its own logic, UI, and data.
+All content shared within an app is placed into the shared folder.
+This approach allows for better organization of the codebase, easier collaboration between team members, and faster development cycles.
+
+It is highly recommended that you follow the [Feature-Sliced Design Tutorial](https://feature-sliced.design/docs/get-started/tutorial) to practice using the methodology.
+
+### Example structure
+
+
+
+
+
+
+
+
+
+
+
+ }/>
+ }/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/docs/content/docs/concepts/meta.json b/apps/docs/content/docs/concepts/meta.json
index 1c535d5d..45c2d52b 100644
--- a/apps/docs/content/docs/concepts/meta.json
+++ b/apps/docs/content/docs/concepts/meta.json
@@ -11,6 +11,8 @@
"design-systems",
"extreme-programming",
"self-hosted-infrastructure",
- "keyboard-driven"
+ "keyboard-driven",
+ "feature-sliced-design",
+ "bullet-proof-react"
]
}
diff --git a/apps/docs/content/docs/contribution-guidelines/coding-standards/front-end.mdx b/apps/docs/content/docs/contribution-guidelines/coding-standards/front-end.mdx
index 1a669f8d..2cc56d60 100644
--- a/apps/docs/content/docs/contribution-guidelines/coding-standards/front-end.mdx
+++ b/apps/docs/content/docs/contribution-guidelines/coding-standards/front-end.mdx
@@ -4,8 +4,21 @@ description: WIP
icon: Atom
---
+## [Presenter, Container Pattern](https://www.patterns.dev/react/presentational-container-pattern/)
+
+TLDR: Presenter components answer **how** UI is rendered. Container components answer **what** UI is rendered.
+
+## tsconfig
[tsconfig.json with comments and explanations](https://gist.github.com/er-ant/e8c2f8c47ad871a4685c2a17800c86ae)
+## Folder structure
+Please refer to the [Feature-Sliced Design](/concepts/feature-sliced-design) and the [Bullet-Proof React](/concepts/bullet-proof-react) for the folder structure.
+
## Scaffolding Shadcn Ecosystem Library
- Find desired library from [Awesome Shadcn](https://github.com/birobirobiro/awesome-shadcn-ui) or elsewhere.
@@ -27,4 +40,4 @@ icon: Atom
"@shadcn/*": ["libs/external/shadcn/*"],
"@website/*": ["libs/website/*"]
},
-```
+```
\ No newline at end of file
diff --git a/apps/docs/content/docs/contribution-guidelines/coding-standards/meta.json b/apps/docs/content/docs/contribution-guidelines/coding-standards/meta.json
index 838dac31..81aed7c1 100644
--- a/apps/docs/content/docs/contribution-guidelines/coding-standards/meta.json
+++ b/apps/docs/content/docs/contribution-guidelines/coding-standards/meta.json
@@ -4,6 +4,7 @@
"unit-testing",
"front-end",
"back-end",
- "tooling"
+ "tooling",
+ "style-guide"
]
}
diff --git a/apps/docs/content/docs/contribution-guidelines/coding-standards/style-guide.mdx b/apps/docs/content/docs/contribution-guidelines/coding-standards/style-guide.mdx
new file mode 100644
index 00000000..809b1eac
--- /dev/null
+++ b/apps/docs/content/docs/contribution-guidelines/coding-standards/style-guide.mdx
@@ -0,0 +1,28 @@
+---
+title: Style Guide
+description: WIP
+icon: PenTool
+---
+
+## Inspiration
+Our style guide is an extension of the [Angular Style Guide](https://angular.dev/style-guide).
+
+
+## Overview
+
+### File Naming Convention
+We follow the Angular style guide for naming files. The file name should be in kebab-case, not capitalized, and should describe the content of the file. For example, a component file should be named `event-card.component.ts`.
+
+**Note:** Presenter and component files must be prefixed with a `.presenter` or a `.container` and do not need a `.component` suffix
+
+Examples:
+- `event-card.component.tsx`
+- `event-card.container.tsx`
+- `event-card.presenter.tsx`
+- `event.service.tsx`
+- `event.helper.tsx`
diff --git a/apps/website-e2e/playwright.config.ts b/apps/website-e2e/playwright.config.ts
index d079ecde..701c01dd 100644
--- a/apps/website-e2e/playwright.config.ts
+++ b/apps/website-e2e/playwright.config.ts
@@ -40,30 +40,33 @@ export default defineConfig({
// reporter: [['html']],
projects: [
{
- name: 'chromium',
+ name: 'chromium (desktop)',
use: { ...devices['Desktop Chrome'] },
},
-
- // {
- // name: 'firefox',
- // use: { ...devices['Desktop Firefox'] },
- // },
-
- // {
- // name: 'webkit',
- // use: { ...devices['Desktop Safari'] },
- // },
-
- // Uncomment for mobile browsers support
- /* {
- name: 'Mobile Chrome',
+ {
+ name: 'firefox (desktop)',
+ use: { ...devices['Desktop Firefox'] },
+ testIgnore: ['./src/lighthouse.spec.ts'],
+ },
+ {
+ name: 'webkit (desktop)',
+ use: { ...devices['Desktop Safari'] },
+ testIgnore: ['./src/lighthouse.spec.ts'],
+ },
+ {
+ name: 'webkit (tablet)',
+ use: { ...devices['iPad Mini'] },
+ testIgnore: ['./src/lighthouse.spec.ts'],
+ },
+ {
+ name: 'chromium (mobile)',
use: { ...devices['Pixel 5'] },
},
{
- name: 'Mobile Safari',
+ name: 'webkit (mobile)',
use: { ...devices['iPhone 12'] },
- }, */
-
+ testIgnore: ['./src/lighthouse.spec.ts'],
+ },
// Uncomment for branded browsers
/* {
name: 'Microsoft Edge',
@@ -74,4 +77,10 @@ export default defineConfig({
use: { ...devices['Desktop Chrome'], channel: 'chrome' },
} */
],
+
+ // Ignore Chromium projects in CI to speed up runs
+ ignore: process.env.CI
+ ? ['chromium (desktop)', 'chromium (mobile)']
+ : [],
+
})
diff --git a/apps/website-e2e/src/lighthouse.spec.ts b/apps/website-e2e/src/lighthouse.spec.ts
new file mode 100644
index 00000000..2051472a
--- /dev/null
+++ b/apps/website-e2e/src/lighthouse.spec.ts
@@ -0,0 +1,3 @@
+import { doLighthouseTest } from '@website-e2e/features/lighthouse/lighthouse'
+
+doLighthouseTest()
diff --git a/apps/website-e2e/src/pages/home.spec.ts b/apps/website-e2e/src/pages/home.spec.ts
new file mode 100644
index 00000000..b45714e7
--- /dev/null
+++ b/apps/website-e2e/src/pages/home.spec.ts
@@ -0,0 +1,13 @@
+// import type { Browser } from 'playwright'
+// import { chromium, expect, test } from '@playwright/test'
+import { footerMobileTabletDesktop } from '@website-e2e/ui/footer/footer'
+import { navbarMobile, navbarMobileTabletDesktop, navbarTabletDesktop } from '@website-e2e/ui/navbar/navbar'
+import { sponsorsMobileTabletDesktop } from '@website-e2e/ui/sponsorship/sponsorship'
+import { welcomeMobileTabletDesktop } from '@website-e2e/ui/welcome/welcome'
+
+navbarMobileTabletDesktop()
+navbarTabletDesktop()
+navbarMobile()
+welcomeMobileTabletDesktop()
+footerMobileTabletDesktop()
+sponsorsMobileTabletDesktop()
diff --git a/apps/website-e2e/src/pom.ts b/apps/website-e2e/src/pom.ts
new file mode 100644
index 00000000..c8fe67f2
--- /dev/null
+++ b/apps/website-e2e/src/pom.ts
@@ -0,0 +1,123 @@
+import type { Locator, Page } from '@playwright/test'
+
+// TODO: Refactor link locators once we have a CMS
+export class WebsiteLayout {
+ // Page object
+ readonly page: Page
+
+ // Website Sections
+ readonly welcomeSection: Locator
+ readonly aboutSection: Locator
+ readonly eventsSection: Locator
+ readonly sponsorsSection: Locator
+ readonly faqSection: Locator
+ readonly navbarSection: Locator
+ readonly footerSection: Locator
+
+ // Mobile + Tablet + Desktop Elements
+ readonly cuHackingLogoIconNav: Locator
+ readonly cuHackingLogoFooter: Locator
+ readonly sponsorshipPackage: Locator
+
+ // Mobile + Tablet + Desktop Platform Links
+ readonly discordLinkNavbar: Locator
+ readonly instagramLinkNavbar: Locator
+ readonly linkedinLinkNavbar: Locator
+ readonly linktreeLinkNavbar: Locator
+ readonly figmaLinkNavbar: Locator
+ readonly githubLinkNavbar: Locator
+ readonly emailLinkNavbar: Locator
+ readonly docsLinkNavbar: Locator
+
+ readonly discordLinkWelcome: Locator
+ readonly instagramLinkWelcome: Locator
+ readonly linkedinLinkWelcome: Locator
+ readonly linktreeLinkWelcome: Locator
+ readonly figmaLinkWelcome: Locator
+ readonly githubLinkWelcome: Locator
+ readonly emailLinkWelcome: Locator
+ readonly docsLinkWelcome: Locator
+
+ readonly discordLinkFooter: Locator
+ readonly instagramLinkFooter: Locator
+ readonly linkedinLinkFooter: Locator
+ readonly linktreeLinkFooter: Locator
+ readonly figmaLinkFooter: Locator
+ readonly githubLinkFooter: Locator
+ readonly emailLinkFooter: Locator
+ readonly docsLinkFooter: Locator
+
+ // Mobile + Tablet + Desktop Navigation Links
+ readonly aboutLink: Locator
+ readonly eventsLink: Locator
+ readonly sponsorsLink: Locator
+ readonly faqLink: Locator
+
+ // Mobile + Tablet
+ readonly hamburgerIcon: Locator
+
+ // Tablet + Desktop
+ readonly searchBar: Locator
+ readonly searchModal: Locator
+ readonly themeToggle: Locator
+ readonly sideBarToggle: Locator
+ readonly overviewSidebar: Locator
+
+ constructor(page: Page) {
+ this.page = page
+
+ this.welcomeSection = page.locator('#welcome')
+ this.aboutSection = page.locator('#about')
+ this.eventsSection = page.locator('#events')
+ this.sponsorsSection = page.locator('#sponsors')
+ this.faqSection = page.locator('#faq')
+ this.navbarSection = page.locator('#navbar')
+ this.footerSection = page.locator('footer')
+
+ this.cuHackingLogoIconNav = page.getByRole('link', { name: 'Return to homepage' }).first()
+ this.cuHackingLogoFooter = page.getByRole('img', { name: 'cuHacking logo' }).last()
+ this.sponsorshipPackage = page.getByRole('link', { name: 'Sponsorship Package' })
+
+ this.hamburgerIcon = page.getByRole('button', { name: 'Open Navigation Drawer' })
+
+ const navbar = page.locator('#navbar-social-media-links')
+ this.discordLinkNavbar = navbar.getByRole('link', { name: 'Discord' })
+ this.instagramLinkNavbar = navbar.getByRole('link', { name: 'Instagram' })
+ this.linkedinLinkNavbar = navbar.getByRole('link', { name: 'LinkedIn' })
+ this.linktreeLinkNavbar = navbar.getByRole('link', { name: 'Linktree' })
+ this.figmaLinkNavbar = navbar.getByRole('link', { name: 'Figma' })
+ this.githubLinkNavbar = navbar.getByRole('link', { name: 'GitHub' })
+ this.emailLinkNavbar = navbar.getByRole('link', { name: 'Email' })
+ this.docsLinkNavbar = navbar.getByRole('link', { name: 'Docs' })
+
+ const welcome = page.locator('#welcome')
+ this.discordLinkWelcome = welcome.getByRole('link', { name: 'Discord' })
+ this.instagramLinkWelcome = welcome.getByRole('link', { name: 'Instagram' })
+ this.linkedinLinkWelcome = welcome.getByRole('link', { name: 'LinkedIn' })
+ this.linktreeLinkWelcome = welcome.getByRole('link', { name: 'Linktree' })
+ this.figmaLinkWelcome = welcome.getByRole('link', { name: 'Figma' })
+ this.githubLinkWelcome = welcome.getByRole('link', { name: 'GitHub' })
+ this.emailLinkWelcome = welcome.getByRole('link', { name: 'Email' })
+ this.docsLinkWelcome = welcome.getByRole('link', { name: 'Docs' })
+
+ const footer = page.locator('footer')
+ this.discordLinkFooter = footer.getByRole('link', { name: 'Discord' })
+ this.instagramLinkFooter = footer.getByRole('link', { name: 'Instagram' })
+ this.linkedinLinkFooter = footer.getByRole('link', { name: 'LinkedIn' })
+ this.linktreeLinkFooter = footer.getByRole('link', { name: 'Linktree' })
+ this.figmaLinkFooter = footer.getByRole('link', { name: 'Figma' })
+ this.githubLinkFooter = footer.getByRole('link', { name: 'GitHub' })
+ this.emailLinkFooter = footer.getByRole('link', { name: 'Email' })
+ this.docsLinkFooter = footer.getByRole('link', { name: 'Docs' })
+
+ this.aboutLink = page.getByRole('link', { name: 'About' })
+ this.eventsLink = page.getByRole('link', { name: 'Events' })
+ this.sponsorsLink = page.getByRole('link', { name: 'Sponsors' }).first()
+ this.faqLink = page.getByRole('link', { name: 'FAQ' })
+ }
+
+ async goto() {
+ await this.page
+ .goto('http://localhost:3000')
+ }
+}
diff --git a/apps/website-e2e/src/website.spec.ts b/apps/website-e2e/src/website.spec.ts
deleted file mode 100644
index 4cc88489..00000000
--- a/apps/website-e2e/src/website.spec.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// import type { Browser } from 'playwright'
-// import { chromium, expect, test } from '@playwright/test'
-import { expect, test } from '@playwright/test'
-// import getPort from 'get-port'
-// import { playAudit } from 'playwright-lighthouse'
-
-// const lighthouseTest = test.extend<{ Page }, { port: number, browser: Browser }>({
-// port: [
-// async (use) => {
-// // Assign a unique port for each playwright worker to support parallel tests
-// const port = await getPort()
-// await use(port)
-// },
-// { scope: 'worker' },
-// ],
-
-// browser: [
-// async ({ port }, use) => {
-// const browser = await chromium.launch({
-// args: [`--remote-debugging-port=${port}`],
-// })
-// await use(browser)
-// },
-// { scope: 'worker' },
-// ],
-// })
-
-// const thresholdsConfig = {
-// 'performance': 90,
-// 'accessibility': 90,
-// 'best-practices': 90,
-// 'seo': 90,
-// // 'pwa': 50,
-// }
-
-// TODO: re-activate after website refactor (three.js/spline)
-// lighthouseTest('should pass lighthouse audits', async ({ page, port }) => {
-// await page.goto('/')
-
-// await playAudit({
-// page,
-// port,
-// thresholds: thresholdsConfig,
-// reports: {
-// formats: {
-// // json: true, // defaults to false
-// html: true, // defaults to false
-// // csv: true, // defaults to false
-// },
-// name: `latest-report`, // defaults to `lighthouse-${new Date().getTime()}`
-// directory: `${process.cwd()}../../../lighthouse-report`, // defaults to `${process.cwd()}/lighthouse`
-// },
-// })
-// })
-
-test('has title', async ({ page }) => {
- await page.goto('/')
-
- // Expect h1 to contain a substring.
- expect(await page.locator('h1').textContent()).toContain('Sponsorship')
-})
diff --git a/apps/website/app/root.tsx b/apps/website/app/root.tsx
index af97fe19..4b08efb3 100644
--- a/apps/website/app/root.tsx
+++ b/apps/website/app/root.tsx
@@ -1,5 +1,4 @@
-import type { LinksFunction, MetaFunction } from '@remix-run/node'
-
+import type { MetaFunction } from '@remix-run/node'
import {
Links,
Meta,
@@ -16,24 +15,11 @@ export const meta: MetaFunction = () => [
},
]
-export const links: LinksFunction = () => [
- { rel: 'preconnect', href: 'https://fonts.googleapis.com' },
- {
- rel: 'preconnect',
- href: 'https://fonts.gstatic.com',
- crossOrigin: 'anonymous',
- },
- {
- rel: 'stylesheet',
- href: 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap',
- },
-]
-
export function Layout({ children }: { children: React.ReactNode }) {
return (
diff --git a/apps/website/app/routes/_index.tsx b/apps/website/app/routes/_index.tsx
index c162c84b..48ece799 100644
--- a/apps/website/app/routes/_index.tsx
+++ b/apps/website/app/routes/_index.tsx
@@ -1,5 +1,5 @@
import { Home } from '@website/pages/home'
-// import { Icon } from '@cuhacking/shared/ui/src/cuHacking/components/icon/icon'
+// import { Icon } from '@cuhacking/shared/ui/icon/icon'
export default function Index() {
return (
diff --git a/apps/website/vite.config.ts b/apps/website/vite.config.ts
index 60161eee..0d680f50 100644
--- a/apps/website/vite.config.ts
+++ b/apps/website/vite.config.ts
@@ -30,7 +30,7 @@ export default defineConfig({
server: {
port: 3000,
fs: {
- allow: ['..'],
+ allow: ['../../libs/shared/', '../../libs/', '..'],
},
},
})
diff --git a/libs/external/shadcn/tailwind.config.ts b/libs/external/shadcn/tailwind.config.ts
index db8edc8a..4f4cd2e4 100644
--- a/libs/external/shadcn/tailwind.config.ts
+++ b/libs/external/shadcn/tailwind.config.ts
@@ -18,7 +18,7 @@ export function buildConfig(
theme: {
extend: {
fontFamily: {
- sans: ['JetBrains Mono', 'sans-serif'],
+ mono: ['JetBrains Mono'],
},
backgroundImage: {
'greendiant': 'linear-gradient(200deg, hsl(var(--secondary)) 10%, hsl(var(--primary)) 90%)',
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf b/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf
new file mode 100644
index 00000000..994761f2
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-Italic-VariableFont_wght.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf b/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf
new file mode 100644
index 00000000..1b3d7f27
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/OFL.txt b/libs/shared/assets/fonts/JetBrains_Mono/OFL.txt
new file mode 100644
index 00000000..3f348475
--- /dev/null
+++ b/libs/shared/assets/fonts/JetBrains_Mono/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/README.txt b/libs/shared/assets/fonts/JetBrains_Mono/README.txt
new file mode 100644
index 00000000..0a8510da
--- /dev/null
+++ b/libs/shared/assets/fonts/JetBrains_Mono/README.txt
@@ -0,0 +1,79 @@
+JetBrains Mono Variable Font
+============================
+
+This download contains JetBrains Mono as both variable fonts and static fonts.
+
+JetBrains Mono is a variable font with this axis:
+ wght
+
+This means all the styles are contained in these files:
+ JetBrainsMono-VariableFont_wght.ttf
+ JetBrainsMono-Italic-VariableFont_wght.ttf
+
+If your app fully supports variable fonts, you can now pick intermediate styles
+that aren’t available as static fonts. Not all apps support variable fonts, and
+in those cases you can use the static font files for JetBrains Mono:
+ static/JetBrainsMono-Thin.ttf
+ static/JetBrainsMono-ExtraLight.ttf
+ static/JetBrainsMono-Light.ttf
+ static/JetBrainsMono-Regular.ttf
+ static/JetBrainsMono-Medium.ttf
+ static/JetBrainsMono-SemiBold.ttf
+ static/JetBrainsMono-Bold.ttf
+ static/JetBrainsMono-ExtraBold.ttf
+ static/JetBrainsMono-ThinItalic.ttf
+ static/JetBrainsMono-ExtraLightItalic.ttf
+ static/JetBrainsMono-LightItalic.ttf
+ static/JetBrainsMono-Italic.ttf
+ static/JetBrainsMono-MediumItalic.ttf
+ static/JetBrainsMono-SemiBoldItalic.ttf
+ static/JetBrainsMono-BoldItalic.ttf
+ static/JetBrainsMono-ExtraBoldItalic.ttf
+
+Get started
+-----------
+
+1. Install the font files you want to use
+
+2. Use your app's font picker to view the font family and all the
+available styles
+
+Learn more about variable fonts
+-------------------------------
+
+ https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
+ https://variablefonts.typenetwork.com
+ https://medium.com/variable-fonts
+
+In desktop apps
+
+ https://theblog.adobe.com/can-variable-fonts-illustrator-cc
+ https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
+
+Online
+
+ https://developers.google.com/fonts/docs/getting_started
+ https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
+ https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
+
+Installing fonts
+
+ MacOS: https://support.apple.com/en-us/HT201749
+ Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
+ Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
+
+Android Apps
+
+ https://developers.google.com/fonts/docs/android
+ https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
+
+License
+-------
+Please read the full license text (OFL.txt) to understand the permissions,
+restrictions and requirements for usage, redistribution, and modification.
+
+You can use them in your products & projects – print or digital,
+commercial or otherwise.
+
+This isn't legal advice, please consider consulting a lawyer and see the full
+license for all details.
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Bold.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Bold.ttf
new file mode 100644
index 00000000..1926c804
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Bold.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-BoldItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-BoldItalic.ttf
new file mode 100644
index 00000000..a4477513
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-BoldItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBold.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBold.ttf
new file mode 100644
index 00000000..0c5f863f
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBold.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBoldItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBoldItalic.ttf
new file mode 100644
index 00000000..d62fc3c3
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraBoldItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLight.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLight.ttf
new file mode 100644
index 00000000..605f79d0
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLight.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLightItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLightItalic.ttf
new file mode 100644
index 00000000..befe9d20
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ExtraLightItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Italic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Italic.ttf
new file mode 100644
index 00000000..8cf794ab
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Italic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Light.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Light.ttf
new file mode 100644
index 00000000..9d5d8a5d
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Light.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-LightItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-LightItalic.ttf
new file mode 100644
index 00000000..4c91d3e0
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-LightItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Medium.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Medium.ttf
new file mode 100644
index 00000000..ad71d92b
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Medium.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-MediumItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-MediumItalic.ttf
new file mode 100644
index 00000000..4c96cc57
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-MediumItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Regular.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Regular.ttf
new file mode 100644
index 00000000..436c982f
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Regular.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBold.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBold.ttf
new file mode 100644
index 00000000..b00a6485
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBold.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBoldItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBoldItalic.ttf
new file mode 100644
index 00000000..5b6c9a8f
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-SemiBoldItalic.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Thin.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Thin.ttf
new file mode 100644
index 00000000..322705a9
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-Thin.ttf differ
diff --git a/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ThinItalic.ttf b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ThinItalic.ttf
new file mode 100644
index 00000000..58b40854
Binary files /dev/null and b/libs/shared/assets/fonts/JetBrains_Mono/static/JetBrainsMono-ThinItalic.ttf differ
diff --git a/libs/shared/assets/icons/general/cross-1.svg b/libs/shared/assets/icons/general/cross-1.svg
new file mode 100644
index 00000000..35169627
--- /dev/null
+++ b/libs/shared/assets/icons/general/cross-1.svg
@@ -0,0 +1,4 @@
+
diff --git a/libs/shared/assets/icons/socials/linkedin-white-1.svg b/libs/shared/assets/icons/socials/linkedin-white-1.svg
index 3c437f8b..2f2e31ae 100644
--- a/libs/shared/assets/icons/socials/linkedin-white-1.svg
+++ b/libs/shared/assets/icons/socials/linkedin-white-1.svg
@@ -1,12 +1,6 @@
-
diff --git a/libs/shared/config/tailwind/shadcn.ts b/libs/shared/config/tailwind/shadcn.ts
index fe0022f1..bbc298b2 100644
--- a/libs/shared/config/tailwind/shadcn.ts
+++ b/libs/shared/config/tailwind/shadcn.ts
@@ -3,7 +3,7 @@ import { join } from 'node:path'
import { createGlobPatternsForDependencies } from '@nx/react/tailwind'
import TailwindAnimate from 'tailwindcss-animate'
-
+// TODO: Refactor to not add custom styles to shadcn tailwind, needed for now, DO NOT CHANGE
export function buildConfig(
appDir: string,
): Config {
@@ -17,6 +17,19 @@ export function buildConfig(
],
theme: {
extend: {
+ backgroundImage: {
+ 'greendiant': 'linear-gradient(200deg, hsl(var(--secondary)) 10%, hsl(var(--primary)) 90%)',
+ 'g-keyboardBlack': 'linear-gradient(300deg , hsl(var(--g-keyboardblack-start)) -10%, hsl(var(--background)) 100%)',
+ 'g-nav-drawer-background': `
+ linear-gradient(
+ 90deg,
+ hsl(var(--background)) 0%,
+ hsl(var(--light-black)) 25%,
+ hsl(var(--light-black)) 75%,
+ hsl(var(--background)) 100%
+ )
+ `,
+ },
colors: {
border: 'hsl(var(--border))',
input: 'hsl(var(--input))',
@@ -88,6 +101,12 @@ export function buildConfig(
'100%': { 'background-position': '200%' },
},
},
+ boxShadow: {
+ dropShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)',
+ innerShadow: 'inset 0 4px 4px rgba(0, 0, 0, 0.25)',
+ buttonKeyboard: '0.5px 0.5px 0px 0.6px rgba(0, 0, 0, 0.70), 0.35px 0.35px 0.2px 0.75px rgba(255, 255, 255, 0.15) inset, 4px 2px 4px -1px rgba(0, 0, 0, 0.25)',
+ buttonKeyboardHover: '0.25px 0.25px 0px 0.5px #0A0A0A, 0.2px 0.2px 0.2px 0.35px rgba(255, 255, 255, 0.25) inset, 0.2px 0.2px 0px 0.75px rgba(137, 237, 16, 0.25), 0px 0px 10px -4px rgba(137, 237, 16, 0.60), 4px 2px 4px -1px rgba(0, 0, 0, 0.25)',
+ },
animation: {
'accordion-down': 'accordion-down 0.2s ease-out',
'accordion-up': 'accordion-up 0.2s ease-out',
diff --git a/libs/shared/ui/src/cuHacking/components/accordion/accordion.stories.tsx b/libs/shared/ui/accordion/accordion.stories.tsx
similarity index 98%
rename from libs/shared/ui/src/cuHacking/components/accordion/accordion.stories.tsx
rename to libs/shared/ui/accordion/accordion.stories.tsx
index 9427d978..ce364256 100644
--- a/libs/shared/ui/src/cuHacking/components/accordion/accordion.stories.tsx
+++ b/libs/shared/ui/accordion/accordion.stories.tsx
@@ -1,5 +1,4 @@
import type { Meta, StoryObj } from '@storybook/react'
-import React from 'react'
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './accordion'
const meta = {
diff --git a/libs/shared/ui/src/cuHacking/components/accordion/accordion.tsx b/libs/shared/ui/accordion/accordion.tsx
similarity index 93%
rename from libs/shared/ui/src/cuHacking/components/accordion/accordion.tsx
rename to libs/shared/ui/accordion/accordion.tsx
index 618d8195..7a312826 100644
--- a/libs/shared/ui/src/cuHacking/components/accordion/accordion.tsx
+++ b/libs/shared/ui/accordion/accordion.tsx
@@ -1,5 +1,5 @@
+import { cn } from '@cuhacking/shared/utils/cn'
import * as AccordionPrimitive from '@radix-ui/react-accordion'
-import { cn } from '@shadcn/lib/utils'
import { ChevronDown } from 'lucide-react'
import * as React from 'react'
@@ -10,11 +10,7 @@ const AccordionItem = React.forwardRef<
React.ElementRef,
React.ComponentPropsWithoutRef
>(({ className, ...props }, ref) => (
-
+
))
AccordionItem.displayName = 'AccordionItem'
diff --git a/libs/shared/ui/src/cuHacking/components/accordion/index.ts b/libs/shared/ui/accordion/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/accordion/index.ts
rename to libs/shared/ui/accordion/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/button/button.stories.tsx b/libs/shared/ui/button/button.stories.tsx
similarity index 97%
rename from libs/shared/ui/src/cuHacking/components/button/button.stories.tsx
rename to libs/shared/ui/button/button.stories.tsx
index 6172a467..572a1e40 100644
--- a/libs/shared/ui/src/cuHacking/components/button/button.stories.tsx
+++ b/libs/shared/ui/button/button.stories.tsx
@@ -7,7 +7,7 @@ import {
import { fn } from '@storybook/test'
import React from 'react'
import { Button } from './button'
-
+// HALP: REANME WEBSITE-LIB TO LIBS/WEBSITE
const meta = {
title: 'cuHacking Design System/Button',
component: Button,
diff --git a/libs/shared/ui/src/cuHacking/components/button/button.tsx b/libs/shared/ui/button/button.tsx
similarity index 91%
rename from libs/shared/ui/src/cuHacking/components/button/button.tsx
rename to libs/shared/ui/button/button.tsx
index d501add2..d1dc89dd 100644
--- a/libs/shared/ui/src/cuHacking/components/button/button.tsx
+++ b/libs/shared/ui/button/button.tsx
@@ -1,5 +1,5 @@
+import { cn } from '@cuhacking/shared/utils/cn'
import { Slot } from '@radix-ui/react-slot'
-import { cn } from '@shadcn/lib/utils'
import { cva, type VariantProps } from 'class-variance-authority'
import * as React from 'react'
@@ -9,7 +9,8 @@ const buttonVariants = cva(
{
variants: {
variant: {
- default: 'shadow-buttonKeyboard bg-g-keyboardBlack text-primary hover:bg-primary/90 hover:shadow-buttonKeyboardHover',
+ default:
+ 'shadow-buttonKeyboard bg-g-keyboardBlack text-primary hover:bg-primary/90 hover:shadow-buttonKeyboardHover',
destructive:
'bg-destructive text-destructive-foreground hover:bg-destructive/90',
outline:
diff --git a/libs/shared/ui/src/cuHacking/components/button/index.ts b/libs/shared/ui/button/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/button/index.ts
rename to libs/shared/ui/button/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/drawer/drawer.stories.tsx b/libs/shared/ui/drawer/drawer.stories.tsx
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/drawer/drawer.stories.tsx
rename to libs/shared/ui/drawer/drawer.stories.tsx
diff --git a/libs/shared/ui/src/cuHacking/components/drawer/drawer.tsx b/libs/shared/ui/drawer/drawer.tsx
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/drawer/drawer.tsx
rename to libs/shared/ui/drawer/drawer.tsx
diff --git a/libs/shared/ui/src/cuHacking/components/drawer/index.ts b/libs/shared/ui/drawer/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/drawer/index.ts
rename to libs/shared/ui/drawer/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/glassmorphic-card/glassmorphic-card.stories.tsx b/libs/shared/ui/glassmorphic-card/glassmorphic-card.stories.tsx
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/glassmorphic-card/glassmorphic-card.stories.tsx
rename to libs/shared/ui/glassmorphic-card/glassmorphic-card.stories.tsx
diff --git a/libs/shared/ui/src/cuHacking/components/glassmorphic-card/glassmorphic-card.tsx b/libs/shared/ui/glassmorphic-card/glassmorphic-card.tsx
similarity index 84%
rename from libs/shared/ui/src/cuHacking/components/glassmorphic-card/glassmorphic-card.tsx
rename to libs/shared/ui/glassmorphic-card/glassmorphic-card.tsx
index 3056cd6c..e773e806 100644
--- a/libs/shared/ui/src/cuHacking/components/glassmorphic-card/glassmorphic-card.tsx
+++ b/libs/shared/ui/glassmorphic-card/glassmorphic-card.tsx
@@ -1,8 +1,7 @@
import type { ReactNode } from 'react'
import InfoIcon from '@cuhacking/shared/assets/icons/general/info-1.svg'
-import { cn } from '@shadcn/lib/utils'
+import { cn } from '@cuhacking/shared/utils/cn'
import { cva } from 'class-variance-authority'
-import React from 'react'
interface GlassmorphicCardProps {
children: ReactNode
@@ -26,7 +25,11 @@ const glassmorphicCardVariants = cva(
},
)
-export function GlassmorphicCard({ children, variant = 'default', className }: GlassmorphicCardProps) {
+export function GlassmorphicCard({
+ children,
+ variant = 'default',
+ className,
+}: GlassmorphicCardProps) {
return (
{variant === 'info'
diff --git a/libs/shared/ui/src/cuHacking/components/glassmorphic-card/index.ts b/libs/shared/ui/glassmorphic-card/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/glassmorphic-card/index.ts
rename to libs/shared/ui/glassmorphic-card/index.ts
diff --git a/libs/shared/ui/global.css b/libs/shared/ui/global.css
index 7f87a761..5dc292e5 100644
--- a/libs/shared/ui/global.css
+++ b/libs/shared/ui/global.css
@@ -2,10 +2,17 @@
* Don't forget to update your APPs global.css to include this file!
*/
+/* DO NOT IMPORT FONT FROM GOOGLE CDN */
+/* @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap'); */
+
@tailwind base;
@tailwind components;
@tailwind utilities;
-@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap');
+
+@font-face {
+ font-family: 'JetBrains Mono';
+ src: url('../../shared/assets/fonts/JetBrains_Mono/JetBrainsMono-VariableFont_wght.ttf');
+}
@layer base {
:root {
@@ -30,6 +37,8 @@
--input: 0 0% 100%;
--ring: 0 0% 100% / 15%;
--radius: 0.5rem;
+ --greendiant-start: 78 100% 42%;
+ --greendiant-end: 136 98% 45%;
--g-keyboardblack-start: 0 0% 5%;
--light-black: 0 0% 0% / 5%;
--color-1: 0 100% 63%;
@@ -38,7 +47,6 @@
--color-4: 195 100% 63%;
--color-5: 90 100% 63%;
}
-
.dark {
--background: 0 0% 0%;
--foreground: 0 0% 100%;
@@ -73,6 +81,7 @@
@apply border-border;
}
body {
+ font-family: 'JetBrains Mono', monospace;
@apply bg-background text-foreground;
font-feature-settings:
'rlig' 1,
diff --git a/libs/shared/ui/src/cuHacking/components/icon/icon.stories.tsx b/libs/shared/ui/icon/icon.stories.tsx
similarity index 93%
rename from libs/shared/ui/src/cuHacking/components/icon/icon.stories.tsx
rename to libs/shared/ui/icon/icon.stories.tsx
index 412eeada..a14b179e 100644
--- a/libs/shared/ui/src/cuHacking/components/icon/icon.stories.tsx
+++ b/libs/shared/ui/icon/icon.stories.tsx
@@ -24,10 +24,25 @@ import linkedin_green from '@cuhacking/shared/assets/icons/socials/linkedin-gree
import linkedin_white from '@cuhacking/shared/assets/icons/socials/linkedin-white-1.svg'
import linktree_green from '@cuhacking/shared/assets/icons/socials/linktree-green-1.svg'
import linktree_white from '@cuhacking/shared/assets/icons/socials/linktree-white-1.svg'
+import { createRemixStub } from '@remix-run/testing'
import { Icon } from './icon'
const meta = {
title: 'cuHacking Design System/Icon',
+ decorators: [
+ (story) => {
+ const remixStub = createRemixStub([
+ {
+ path: '/*',
+ action: () => ({ redirect: '/' }),
+ loader: () => ({ redirect: '/' }),
+ Component: () => story(),
+ },
+ ])
+
+ return remixStub({ initialEntries: ['/'] })
+ },
+ ],
component: Icon,
tags: ['autodocs'],
parameters: {
diff --git a/libs/shared/ui/src/cuHacking/components/icon/icon.tsx b/libs/shared/ui/icon/icon.tsx
similarity index 88%
rename from libs/shared/ui/src/cuHacking/components/icon/icon.tsx
rename to libs/shared/ui/icon/icon.tsx
index ff184d2b..6c01c2ba 100644
--- a/libs/shared/ui/src/cuHacking/components/icon/icon.tsx
+++ b/libs/shared/ui/icon/icon.tsx
@@ -1,5 +1,5 @@
import type Media from '@cuhacking/types/media'
-import { cn } from '@shadcn/lib/utils'
+import { cn } from '@cuhacking/shared/utils/cn'
import React from 'react'
interface IconProps {
@@ -11,7 +11,7 @@ interface IconProps {
export function Icon({ media, className }: IconProps) {
return (
<>
- { media
+ {media
? (
-
)
}
diff --git a/libs/shared/ui/src/cuHacking/components/icon/index.ts b/libs/shared/ui/icon/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/icon/index.ts
rename to libs/shared/ui/icon/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/navigation-menu/index.ts b/libs/shared/ui/navigation-menu/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/navigation-menu/index.ts
rename to libs/shared/ui/navigation-menu/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/navigation-menu/navigation-menu.stories.tsx b/libs/shared/ui/navigation-menu/navigation-menu.stories.tsx
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/navigation-menu/navigation-menu.stories.tsx
rename to libs/shared/ui/navigation-menu/navigation-menu.stories.tsx
diff --git a/libs/shared/ui/src/cuHacking/components/navigation-menu/navigation-menu.tsx b/libs/shared/ui/navigation-menu/navigation-menu.tsx
similarity index 99%
rename from libs/shared/ui/src/cuHacking/components/navigation-menu/navigation-menu.tsx
rename to libs/shared/ui/navigation-menu/navigation-menu.tsx
index 0a3ecd58..bd6e8144 100644
--- a/libs/shared/ui/src/cuHacking/components/navigation-menu/navigation-menu.tsx
+++ b/libs/shared/ui/navigation-menu/navigation-menu.tsx
@@ -1,5 +1,5 @@
+import { cn } from '@cuhacking/shared/utils/cn'
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'
-import { cn } from '@shadcn/lib/utils'
import { cva } from 'class-variance-authority'
import { ChevronDown } from 'lucide-react'
import * as React from 'react'
diff --git a/libs/shared/ui/src/cuHacking/components/separator/index.ts b/libs/shared/ui/separator/index.ts
similarity index 100%
rename from libs/shared/ui/src/cuHacking/components/separator/index.ts
rename to libs/shared/ui/separator/index.ts
diff --git a/libs/shared/ui/src/cuHacking/components/separator/separator.tsx b/libs/shared/ui/separator/separator.tsx
similarity index 93%
rename from libs/shared/ui/src/cuHacking/components/separator/separator.tsx
rename to libs/shared/ui/separator/separator.tsx
index bc0b3249..0b51544e 100644
--- a/libs/shared/ui/src/cuHacking/components/separator/separator.tsx
+++ b/libs/shared/ui/separator/separator.tsx
@@ -1,5 +1,5 @@
+import { cn } from '@cuhacking/shared/utils/cn'
import * as SeparatorPrimitive from '@radix-ui/react-separator'
-import { cn } from '@shadcn/lib/utils'
import * as React from 'react'
export const Separator = React.forwardRef<
diff --git a/libs/shared/ui/src/cuHacking/components/terminal-text/terminal-text.tsx b/libs/shared/ui/src/cuHacking/components/terminal-text/terminal-text.tsx
deleted file mode 100644
index 37d63056..00000000
--- a/libs/shared/ui/src/cuHacking/components/terminal-text/terminal-text.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import type Media from '@cuhacking/types/media'
-import type { ReactNode } from 'react'
-import { cn } from '@shadcn/lib/utils'
-import { cva } from 'class-variance-authority'
-import React from 'react'
-import { Icon } from '../icon/icon'
-
-interface TerminalTextProps {
- children: ReactNode
- icon?: Media
- className?: string
- callToAction?: boolean
-}
-
-const callToActionVariation = cva(
- '',
- {
- variants: {
- callToAction: {
- true: 'bg-greendiant bg-clip-text text-transparent',
- false: '',
- },
- },
- },
-)
-
-const terminalTextVariation = cva(
- 'flex flex-row gap-x-3 font-sans items-center',
-)
-
-export function TerminalText({ icon, children, className = '', callToAction }: TerminalTextProps) {
- return (
-
)
: null}
diff --git a/libs/website/feature/events/ui/event-presenter/event-presenter.tsx b/libs/website/feature/events/ui/event-presenter/event-presenter.tsx
index ef557f81..d7f65e3a 100644
--- a/libs/website/feature/events/ui/event-presenter/event-presenter.tsx
+++ b/libs/website/feature/events/ui/event-presenter/event-presenter.tsx
@@ -1,6 +1,5 @@
import type { Event } from '../../types/event'
-import { GlassmorphicCard } from '@cuhacking/shared/ui/src/cuHacking/components/glassmorphic-card'
-import React from 'react'
+import { GlassmorphicCard } from '@cuhacking/shared/ui/glassmorphic-card'
import { EventItem } from '../event-item/event-item'
interface EventContainerProps {
@@ -10,7 +9,7 @@ interface EventContainerProps {
export function EventPresenter({ events }: EventContainerProps) {
return (
-
+
EVENTS
diff --git a/libs/website/feature/events/ui/event.section.tsx b/libs/website/feature/events/ui/event.section.tsx
index 0d6dc6ec..152744d2 100644
--- a/libs/website/feature/events/ui/event.section.tsx
+++ b/libs/website/feature/events/ui/event.section.tsx
@@ -1,15 +1,19 @@
-import React from 'react'
-import { EVENT_CONSTANTS } from '../constants/event.constants.ts'
-import { EventPresenter } from './event-presenter/event-presenter'
+/* import { SplineComponent } from '@website/shared/ui/spline/spline-component'; */
+import { EVENT_CONSTANTS } from '../constants/event.constants.ts';
+import { EventPresenter } from './event-presenter/event-presenter';
export function EventSection() {
- return (
-
-
-
-
-
-
-
- )
+ return (
+
+
+
+
+
+
+ {/* */}
+
+ );
}
diff --git a/libs/website/feature/faq/constants/faq.constants.ts b/libs/website/feature/faq/constants/faq.constants.ts
deleted file mode 100644
index d3264020..00000000
--- a/libs/website/feature/faq/constants/faq.constants.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-const questions = [
- {
- question: 'What is an FAQ?',
- answer: 'FAQ stands for Frequently Asked Questions.',
- },
- {
- question: 'How do I use Storybook?',
- answer: 'Storybook is a development environment for UI components.',
- },
- {
- question: 'What is React?',
- answer: 'React is a JavaScript library for building user interfaces, primarily for single-page applications.',
- },
- {
- question: 'How do I install dependencies in a project?',
- answer: 'You can install dependencies using package managers like npm or yarn, with commands like `npm install` or `yarn install`.',
- },
- {
- question: 'What is a pull request?',
- answer: 'A pull request is a way of submitting changes to a repository, usually after creating a branch with new features or bug fixes.',
- },
-]
-
-export const FAQ_CONSTANTS = {
- QUESTIONS: questions,
-}
diff --git a/libs/website/feature/faq/index.ts b/libs/website/feature/faq/index.ts
deleted file mode 100644
index 0defb3de..00000000
--- a/libs/website/feature/faq/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { FAQSection } from './ui/faq.section'
-export { FAQPresenter } from './ui/faq-presenter/faq.presenter'
diff --git a/libs/website/feature/faq/ui/faq-item/faq-item.tsx b/libs/website/feature/faq/ui/faq-item/faq-item.tsx
deleted file mode 100644
index 2702c662..00000000
--- a/libs/website/feature/faq/ui/faq-item/faq-item.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { AccordionContent, AccordionItem, AccordionTrigger } from '@cuhacking/shared/ui/src/cuHacking/components/accordion'
-import { TerminalText } from '@cuhacking/shared/ui/src/cuHacking/components/terminal-text'
-import React from 'react'
-
-interface FAQItemProps {
- question: string
- answer: string
-}
-
-export function FAQItem({ question, answer }: FAQItemProps) {
- return (
-
-
-
- faq(
- {question}
- )
-
-
-
- {answer}
-
-
- )
-}
diff --git a/libs/website/feature/faq/ui/faq-presenter/faq.presenter.stories.tsx b/libs/website/feature/faq/ui/faq-presenter/faq.presenter.stories.tsx
deleted file mode 100644
index ab7657bf..00000000
--- a/libs/website/feature/faq/ui/faq-presenter/faq.presenter.stories.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import type { Meta, StoryObj } from '@storybook/react'
-import { FAQPresenter } from './faq.presenter'
-
-const meta = {
- title: 'Website/FAQ Presenter',
- component: FAQPresenter,
- tags: ['autodocs'],
- args: {
- questions: [
- {
- question: 'What is an FAQ?',
- answer: 'FAQ stands for Frequently Asked Questions.',
- },
- {
- question: 'How do I use Storybook?',
- answer: 'Storybook is a development environment for UI components.',
- },
- ],
- },
- argTypes: {
- questions: {
- control: {
- type: 'object',
- },
- },
- },
-} satisfies Meta
-
-export default meta
-type Story = StoryObj
-
-export const CustomFAQs: Story = {
- args: {
- questions: [
- {
- question: 'What is the purpose of an FAQ?',
- answer: 'The purpose of an FAQ is to provide quick answers to common questions.',
- },
- {
- question: 'How do I contribute to this project?',
- answer: 'You can contribute by opening pull requests and submitting issues.',
- },
- ],
- },
-}
-
-export const LongFAQs: Story = {
- args: {
- questions: [
- {
- question: 'What are the benefits of using this FAQ system in a project?',
- answer: 'This FAQ system allows users to find answers to their most frequently asked questions without needing to contact support or search through documentation.',
- },
- {
- question: 'How do I use the accordion component in my React project?',
- answer: 'You can use the accordion component by importing it from our component library, passing the necessary props such as "type" and "collapsible", and wrapping your FAQ items inside it.',
- },
- ],
- },
-}
diff --git a/libs/website/feature/faq/ui/faq-presenter/faq.presenter.tsx b/libs/website/feature/faq/ui/faq-presenter/faq.presenter.tsx
deleted file mode 100644
index 9f551000..00000000
--- a/libs/website/feature/faq/ui/faq-presenter/faq.presenter.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Accordion } from '@cuhacking/shared/ui/src/cuHacking/components/accordion'
-import { GlassmorphicCard } from '@cuhacking/shared/ui/src/cuHacking/components/glassmorphic-card'
-import React from 'react'
-import { FAQItem } from '../faq-item/faq-item'
-
-interface FAQPresenterProps {
- questions: { question: string, answer: string }[]
-}
-
-export function FAQPresenter({ questions }: FAQPresenterProps) {
- return (
-
-