-
+
+ {day.links?.map((link) => (
+ -
+
+
+ ))}
+
{
{day.date}
{day.title}
)
diff --git a/apps/www/components/LaunchWeek/15/data/lw15_data.tsx b/apps/www/components/LaunchWeek/15/data/lw15_data.tsx
index acc8bba95c0..63ea640774e 100644
--- a/apps/www/components/LaunchWeek/15/data/lw15_data.tsx
+++ b/apps/www/components/LaunchWeek/15/data/lw15_data.tsx
@@ -62,7 +62,7 @@ const days: (isDark?: boolean) => WeekDayProps[] = (isDark = true) => [
d: 1,
dd: 'Mon',
shipped: true,
- isToday: false,
+ isToday: true,
hasCountdown: false,
blog: '/blog/',
date: 'Monday, 14th',
@@ -96,7 +96,7 @@ const days: (isDark?: boolean) => WeekDayProps[] = (isDark = true) => [
id: 'day-2',
d: 2,
dd: 'Tue',
- shipped: true,
+ shipped: false,
isToday: false,
hasCountdown: false,
blog: '/blog/',
@@ -131,8 +131,8 @@ const days: (isDark?: boolean) => WeekDayProps[] = (isDark = true) => [
id: 'day-3',
d: 3,
dd: 'Wed',
- shipped: true,
- isToday: true,
+ shipped: false,
+ isToday: false,
hasCountdown: false,
blog: '/blog/',
date: 'Wednesday, 16th',
diff --git a/apps/www/components/LaunchWeek/15/lw15.components.tsx b/apps/www/components/LaunchWeek/15/lw15.components.tsx
index af5aeabb2e8..13a3a89ba7d 100644
--- a/apps/www/components/LaunchWeek/15/lw15.components.tsx
+++ b/apps/www/components/LaunchWeek/15/lw15.components.tsx
@@ -1,5 +1,11 @@
+import { useEffect, useState } from 'react'
+import { IconDocumentation, IconMicSolid, IconProductHunt, IconYoutubeSolid, cn } from 'ui'
+import { Music } from 'lucide-react'
+
+import Link from 'next/link'
+import { StepLink } from './data/lw15_data'
+import { ExpandableVideo } from 'ui-patterns/ExpandableVideo'
import { useTheme } from 'next-themes'
-import { cn } from 'ui'
export const LWSVG = (props: React.SVGProps
) => {
return (
@@ -68,3 +74,77 @@ export const LW15ThemeSwitcher = ({
)
}
+
+interface DayLink extends StepLink {
+ className?: string
+}
+
+export const DayLink = ({ type, icon, text, href = '', className }: DayLink) => {
+ const [isMounted, setIsMounted] = useState(false)
+
+ useEffect(() => {
+ setIsMounted(true)
+ }, [])
+
+ if (!isMounted) return null
+
+ const linkTypes = {
+ blog: {
+ icon: IconDocumentation,
+ text: 'Blog Post',
+ },
+ docs: {
+ icon: IconDocumentation,
+ text: 'Docs',
+ },
+ productHunt: {
+ icon: IconProductHunt,
+ text: 'Product Hunt',
+ },
+ video: {
+ icon: IconYoutubeSolid,
+ text: 'Watch video',
+ },
+ podcast: {
+ icon: Music,
+ text: 'Podcast',
+ },
+ xSpace: {
+ icon: IconMicSolid,
+ text: 'X Space',
+ },
+ }
+ const isTargetBlank = () => {
+ switch (type) {
+ case 'productHunt':
+ case 'xSpace':
+ case 'docs':
+ return true
+ }
+ }
+ const Text = () => <>{text ?? linkTypes[type]?.text}>
+
+ const Component = type === 'video' ? 'div' : Link
+
+ const Trigger = ({ component: Comp, ...props }: any) => (
+
+
+
+
+ )
+
+ if (type === 'video')
+ return
} />
+
+ return
+}
+
+export default {
+ DayLink,
+}