remove skeleton ui
This commit is contained in:
1
bun.lock
1
bun.lock
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
|
"configVersion": 0,
|
||||||
"workspaces": {
|
"workspaces": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ecsess-website",
|
"name": "ecsess-website",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { PortableText } from '@portabletext/svelte';
|
//import { PortableText } from '@portabletext/svelte';
|
||||||
import { CalendarDays, MapPin, Link as LinkIcon, FilePen, CalendarPlus } from '@lucide/svelte';
|
import { CalendarDays, MapPin, Link as LinkIcon, FilePen, CalendarPlus } from '@lucide/svelte';
|
||||||
import RichText from 'components/RichText.svelte';
|
import RichText from 'components/RichText.svelte';
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Tabs } from '@skeletonlabs/skeleton-svelte';
|
|
||||||
import EventBlock from 'components/event/EventBlock.svelte';
|
import EventBlock from 'components/event/EventBlock.svelte';
|
||||||
import type { EventPost } from '$lib/schemas';
|
import type { EventPost, Category } from '$lib/schemas';
|
||||||
|
|
||||||
type Category = 'allEvents' | 'academic' | 'professional' | 'social' | 'technical';
|
let { category, events } = $props<{
|
||||||
|
|
||||||
let { value, category, events } = $props<{
|
|
||||||
value: Category;
|
|
||||||
category: Category;
|
category: Category;
|
||||||
events: EventPost[];
|
events: EventPost[];
|
||||||
}>();
|
}>();
|
||||||
@@ -66,18 +62,18 @@
|
|||||||
|
|
||||||
const upcomingEvents = $derived(
|
const upcomingEvents = $derived(
|
||||||
filtered
|
filtered
|
||||||
.filter((e) => !isPastEvent(e.date))
|
.filter((e: { date: string; }) => !isPastEvent(e.date))
|
||||||
.sort((a, b) => parseEventDate(a.date).getTime() - parseEventDate(b.date).getTime())
|
.sort((a: { date: string; }, b: { date: string; }) => parseEventDate(a.date).getTime() - parseEventDate(b.date).getTime())
|
||||||
);
|
);
|
||||||
|
|
||||||
const finishedEvents = $derived(
|
const finishedEvents = $derived(
|
||||||
filtered
|
filtered
|
||||||
.filter((e) => isPastEvent(e.date))
|
.filter((e: { date: string; }) => isPastEvent(e.date))
|
||||||
.sort((a, b) => parseEventDate(b.date).getTime() - parseEventDate(a.date).getTime())
|
.sort((a: { date: string; }, b: { date: string; }) => parseEventDate(b.date).getTime() - parseEventDate(a.date).getTime())
|
||||||
);
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Tabs.Content {value}>
|
<div>
|
||||||
<div class="space-y-12 px-4 py-8 lg:px-8">
|
<div class="space-y-12 px-4 py-8 lg:px-8">
|
||||||
<!-- Upcoming Events -->
|
<!-- Upcoming Events -->
|
||||||
{#if upcomingEvents.length > 0}
|
{#if upcomingEvents.length > 0}
|
||||||
@@ -139,4 +135,4 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</Tabs.Content>
|
</div>
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
<script>
|
<script>
|
||||||
import { Tabs } from '@skeletonlabs/skeleton-svelte';
|
let { value, onclick, children } = $props();
|
||||||
let { value, children } = $props();
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Tabs.Trigger {value}>
|
<div>
|
||||||
{#snippet element(attributes)}
|
|
||||||
<button
|
<button
|
||||||
{...attributes}
|
{value}
|
||||||
|
onclick={() => onclick(value)}
|
||||||
class="hover:border-b-ecsess-200 data-[state=active]:border-b-ecsess-400 border-b-4 border-b-transparent px-2 pb-2 text-lg transition-all ease-in-out"
|
class="hover:border-b-ecsess-200 data-[state=active]:border-b-ecsess-400 border-b-4 border-b-transparent px-2 pb-2 text-lg transition-all ease-in-out"
|
||||||
>
|
>
|
||||||
{@render children()}
|
{@render children()}
|
||||||
</button>
|
</button>
|
||||||
{/snippet}
|
</div>
|
||||||
</Tabs.Trigger>
|
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ export type EventPost = {
|
|||||||
paylink: string; // event payment link (e.g., Zeffy)
|
paylink: string; // event payment link (e.g., Zeffy)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type Category = 'allEvents' | 'academic' | 'professional' | 'social' | 'technical';
|
||||||
|
|
||||||
|
|
||||||
export type FAQ = {
|
export type FAQ = {
|
||||||
question: string;
|
question: string;
|
||||||
answer: string;
|
answer: string;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { EventPost } from '$lib/schemas';
|
import type { EventPost, Category } from '$lib/schemas';
|
||||||
import { Tabs } from '@skeletonlabs/skeleton-svelte';
|
|
||||||
import Section from 'components/layout/Section.svelte';
|
import Section from 'components/layout/Section.svelte';
|
||||||
import SeoMetaTags from 'components/layout/SeoMetaTags.svelte';
|
import SeoMetaTags from 'components/layout/SeoMetaTags.svelte';
|
||||||
import EventTabsTrigger from 'components/event/EventTabsTrigger.svelte';
|
import EventTabsTrigger from 'components/event/EventTabsTrigger.svelte';
|
||||||
@@ -9,7 +8,18 @@
|
|||||||
let { data } = $props();
|
let { data } = $props();
|
||||||
|
|
||||||
let events: EventPost[] = data.events ?? [];
|
let events: EventPost[] = data.events ?? [];
|
||||||
let group = $state('allEvents');
|
let group = $state<Category>('allEvents');
|
||||||
|
let categories: {value: Category; label: string}[] = [
|
||||||
|
{ value: 'allEvents', label: 'All Events' },
|
||||||
|
{ value: 'academic', label: 'Academic' },
|
||||||
|
{ value: 'professional', label: 'Professional' },
|
||||||
|
{ value: 'social', label: 'Social' },
|
||||||
|
{ value: 'technical', label: 'Technical' }
|
||||||
|
];
|
||||||
|
// Handle tab change
|
||||||
|
function handleTabChange(selectedCategory: Category) {
|
||||||
|
group = selectedCategory;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SeoMetaTags
|
<SeoMetaTags
|
||||||
@@ -21,19 +31,13 @@
|
|||||||
<Section from="from-ecsess-black" to="to-ecsess-black" via="via-ecsess-600" direction="to-b">
|
<Section from="from-ecsess-black" to="to-ecsess-black" via="via-ecsess-600" direction="to-b">
|
||||||
<p class="page-title">Events</p>
|
<p class="page-title">Events</p>
|
||||||
|
|
||||||
<Tabs value={group} onValueChange={(e) => (group = e.value)} composite={true}>
|
<div>
|
||||||
<Tabs.List>
|
<ul class="flex justify-center flex-wrap gap-2">
|
||||||
<EventTabsTrigger value="allEvents">All Events</EventTabsTrigger>
|
{#each categories as category}
|
||||||
<EventTabsTrigger value="academic">Academic</EventTabsTrigger>
|
<EventTabsTrigger value={category.value} onclick={handleTabChange}>{category.label}</EventTabsTrigger>
|
||||||
<EventTabsTrigger value="professional">Professional</EventTabsTrigger>
|
{/each}
|
||||||
<EventTabsTrigger value="social">Social</EventTabsTrigger>
|
</ul>
|
||||||
<EventTabsTrigger value="technical">Technical</EventTabsTrigger>
|
|
||||||
</Tabs.List>
|
|
||||||
|
|
||||||
<EventTabsContent value="allEvents" category="allEvents" {events} />
|
<EventTabsContent category={group} {events} />
|
||||||
<EventTabsContent value="academic" category="academic" {events} />
|
</div>
|
||||||
<EventTabsContent value="professional" category="professional" {events} />
|
|
||||||
<EventTabsContent value="social" category="social" {events} />
|
|
||||||
<EventTabsContent value="technical" category="technical" {events} />
|
|
||||||
</Tabs>
|
|
||||||
</Section>
|
</Section>
|
||||||
|
|||||||
Reference in New Issue
Block a user