diff --git a/(payload)/admin/importMap.js b/(payload)/admin/importMap.js deleted file mode 100644 index 8ef7021..0000000 --- a/(payload)/admin/importMap.js +++ /dev/null @@ -1 +0,0 @@ -export const importMap = {} diff --git a/(payload)/api/graphql/route.ts b/(payload)/api/graphql/route.ts deleted file mode 100644 index c2723e4..0000000 --- a/(payload)/api/graphql/route.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -/* DO NOT MODIFY it because it could be re-written at any time. */ -import config from '@payload-config' -import { GRAPHQL_POST } from '@payloadcms/next/routes' - -export const POST = GRAPHQL_POST(config) diff --git a/(payload)/layout.tsx b/(payload)/layout.tsx deleted file mode 100644 index b2fefff..0000000 --- a/(payload)/layout.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -import configPromise from '@payload-config' -import '@payloadcms/next/css' -import { RootLayout } from '@payloadcms/next/layouts' -/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ -import React from 'react' - -import './custom.scss' -import { importMap } from './admin/importMap' - -type Args = { - children: React.ReactNode -} - -const Layout = ({ children }: Args) => ( - - {children} - -) - -export default Layout diff --git a/_template.scss b/_template.scss index d1dced8..19eb567 100644 --- a/_template.scss +++ b/_template.scss @@ -2,6 +2,7 @@ $base-color: #426156; $shade1: #728F8D; $shade2: #CBD6D5; $shade3: #E3E9E8; +$contrast-color: #9785A9; +$contrast-shade1: #E0DAE5; $text-color: #000000; -$contrast-color: #ffffff; $border-radius: 13px; \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index 8f7b0c2..fbc765d 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -2,10 +2,6 @@ import { withPayload } from '@payloadcms/next/withPayload' /** @type {import('next').NextConfig} */ const nextConfig = { - output: "export", - images: { - unoptimized: true - }, // Your Next.js config here eslint: { // Warning: This allows production builds to successfully complete even if diff --git a/package.json b/package.json index b0ac681..3b39c05 100644 --- a/package.json +++ b/package.json @@ -17,18 +17,19 @@ "chromatic": "npx chromatic --project-token=chpt_70d6a2e05af185a" }, "dependencies": { - "@payloadcms/db-mongodb": "3.0.0-beta.99", - "@payloadcms/next": "3.0.0-beta.99", - "@payloadcms/plugin-cloud": "3.0.0-beta.99", - "@payloadcms/richtext-lexical": "3.0.0-beta.99", + "@payloadcms/db-mongodb": "beta", + "@payloadcms/next": "beta", + "@payloadcms/plugin-cloud": "beta", + "@payloadcms/richtext-lexical": "beta", "classnames": "^2.5.1", "cross-env": "^7.0.3", "graphql": "^16.8.1", "mapbox-gl": "^3.5.2", - "next": "^15.0.2", - "payload": "3.0.0-beta.99", - "react": "19.0.0-rc-f65ac7bd-20240826", - "react-dom": "19.0.0-rc-f65ac7bd-20240826", + "next": "15.0.0", + "payload": "beta", + "qs-esm": "^7.0.2", + "react": "19.0.0-rc-65a56d0e-20241020", + "react-dom": "19.0.0-rc-65a56d0e-20241020", "sharp": "0.32.6" }, "devDependencies": { diff --git a/(payload)/admin/[[...segments]]/not-found.tsx b/src/app/(payload)/admin/[[...segments]]/not-found.tsx similarity index 92% rename from (payload)/admin/[[...segments]]/not-found.tsx rename to src/app/(payload)/admin/[[...segments]]/not-found.tsx index d5e3c92..6410836 100644 --- a/(payload)/admin/[[...segments]]/not-found.tsx +++ b/src/app/(payload)/admin/[[...segments]]/not-found.tsx @@ -1,18 +1,18 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import type { Metadata } from 'next' import config from '@payload-config' -/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import { NotFoundPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/(payload)/admin/[[...segments]]/page.tsx b/src/app/(payload)/admin/[[...segments]]/page.tsx similarity index 92% rename from (payload)/admin/[[...segments]]/page.tsx rename to src/app/(payload)/admin/[[...segments]]/page.tsx index 4d5bbfd..0de685c 100644 --- a/(payload)/admin/[[...segments]]/page.tsx +++ b/src/app/(payload)/admin/[[...segments]]/page.tsx @@ -1,18 +1,18 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import type { Metadata } from 'next' import config from '@payload-config' -/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import { RootPage, generatePageMetadata } from '@payloadcms/next/views' import { importMap } from '../importMap' type Args = { - params: { + params: Promise<{ segments: string[] - } - searchParams: { + }> + searchParams: Promise<{ [key: string]: string | string[] - } + }> } export const generateMetadata = ({ params, searchParams }: Args): Promise => diff --git a/src/app/(payload)/admin/importMap.js b/src/app/(payload)/admin/importMap.js new file mode 100644 index 0000000..dfe0789 --- /dev/null +++ b/src/app/(payload)/admin/importMap.js @@ -0,0 +1,47 @@ +import { RscEntryLexicalCell as RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' +import { RscEntryLexicalField as RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e } from '@payloadcms/richtext-lexical/rsc' +import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { SuperscriptFeatureClient as SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { SubscriptFeatureClient as SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' +import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from '@payloadcms/richtext-lexical/client' + +export const importMap = { + "@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell": RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e, + "@payloadcms/richtext-lexical/rsc#RscEntryLexicalField": RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e, + "@payloadcms/richtext-lexical/client#InlineToolbarFeatureClient": InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient": HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UploadFeatureClient": UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BlockquoteFeatureClient": BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#RelationshipFeatureClient": RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#LinkFeatureClient": LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ChecklistFeatureClient": ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#OrderedListFeatureClient": OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UnorderedListFeatureClient": UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#IndentFeatureClient": IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#AlignFeatureClient": AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#HeadingFeatureClient": HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ParagraphFeatureClient": ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#InlineCodeFeatureClient": InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#SuperscriptFeatureClient": SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#SubscriptFeatureClient": SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#StrikethroughFeatureClient": StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#UnderlineFeatureClient": UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#BoldFeatureClient": BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864, + "@payloadcms/richtext-lexical/client#ItalicFeatureClient": ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 +} diff --git a/(payload)/api/[...slug]/route.ts b/src/app/(payload)/api/[...slug]/route.ts similarity index 53% rename from (payload)/api/[...slug]/route.ts rename to src/app/(payload)/api/[...slug]/route.ts index 52caec9..e58c50f 100644 --- a/(payload)/api/[...slug]/route.ts +++ b/src/app/(payload)/api/[...slug]/route.ts @@ -1,10 +1,19 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -/* DO NOT MODIFY it because it could be re-written at any time. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import config from '@payload-config' -import { REST_DELETE, REST_GET, REST_OPTIONS, REST_PATCH, REST_POST } from '@payloadcms/next/routes' +import '@payloadcms/next/css' +import { + REST_DELETE, + REST_GET, + REST_OPTIONS, + REST_PATCH, + REST_POST, + REST_PUT, +} from '@payloadcms/next/routes' export const GET = REST_GET(config) export const POST = REST_POST(config) export const DELETE = REST_DELETE(config) export const PATCH = REST_PATCH(config) +export const PUT = REST_PUT(config) export const OPTIONS = REST_OPTIONS(config) diff --git a/(payload)/api/graphql-playground/route.ts b/src/app/(payload)/api/graphql-playground/route.ts similarity index 68% rename from (payload)/api/graphql-playground/route.ts rename to src/app/(payload)/api/graphql-playground/route.ts index 7b7f279..17d2954 100644 --- a/(payload)/api/graphql-playground/route.ts +++ b/src/app/(payload)/api/graphql-playground/route.ts @@ -1,6 +1,7 @@ /* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ -/* DO NOT MODIFY it because it could be re-written at any time. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ import config from '@payload-config' +import '@payloadcms/next/css' import { GRAPHQL_PLAYGROUND_GET } from '@payloadcms/next/routes' export const GET = GRAPHQL_PLAYGROUND_GET(config) diff --git a/src/app/(payload)/api/graphql/route.ts b/src/app/(payload)/api/graphql/route.ts new file mode 100644 index 0000000..2069ff8 --- /dev/null +++ b/src/app/(payload)/api/graphql/route.ts @@ -0,0 +1,8 @@ +/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ +import config from '@payload-config' +import { GRAPHQL_POST, REST_OPTIONS } from '@payloadcms/next/routes' + +export const POST = GRAPHQL_POST(config) + +export const OPTIONS = REST_OPTIONS(config) diff --git a/(payload)/custom.scss b/src/app/(payload)/custom.scss similarity index 100% rename from (payload)/custom.scss rename to src/app/(payload)/custom.scss diff --git a/src/app/(payload)/layout.tsx b/src/app/(payload)/layout.tsx new file mode 100644 index 0000000..8df141a --- /dev/null +++ b/src/app/(payload)/layout.tsx @@ -0,0 +1,31 @@ +/* THIS FILE WAS GENERATED AUTOMATICALLY BY PAYLOAD. */ +/* DO NOT MODIFY IT BECAUSE IT COULD BE REWRITTEN AT ANY TIME. */ +import config from '@payload-config' +import '@payloadcms/next/css' +import type { ServerFunctionClient } from 'payload' +import { handleServerFunctions, RootLayout } from '@payloadcms/next/layouts' +import React from 'react' + +import { importMap } from './admin/importMap.js' +import './custom.scss' + +type Args = { + children: React.ReactNode +} + +const serverFunction: ServerFunctionClient = async function (args) { + 'use server' + return handleServerFunctions({ + ...args, + config, + importMap, + }) +} + +const Layout = ({ children }: Args) => ( + + {children} + +) + +export default Layout diff --git a/src/app/blog/[id]/page.tsx b/src/app/blog/[id]/page.tsx new file mode 100644 index 0000000..9e9aa16 --- /dev/null +++ b/src/app/blog/[id]/page.tsx @@ -0,0 +1,45 @@ +import { Section } from '@/components/Section/Section' +import { Container } from '@/components/Container/Container' +import { Title } from '@/components/Title/Title' +import { ContentWithSlider } from '@/compositions/ContentWithSlider/ContentWithSlider' +import { TextDiv } from '@/components/Text/TextDiv' +import { Blog } from '@/payload-types' +import { notFound } from 'next/navigation' + +async function fetchBlog(id: string) { + const res = await fetch(`http://localhost:3000/api/blog/${id}`) + if (!res.ok) return undefined + return res.json(); +} + +export default async function BlogPage({ params }: { params: Promise<{id: string}>}){ + + const id = (await params).id; + const data = await fetchBlog(id) as Blog; + + if(!data) { + notFound(); + } + + return ( +
+ + + +
+ {data.content && data.content.map(item => { + if (item.blockType === "ContentWithSlider") { + return ( + + + + + + ); + } + + })} +
+
+ ) +} \ No newline at end of file diff --git a/src/app/bread.jpg b/src/app/bread.jpg new file mode 100644 index 0000000..a6f8e54 Binary files /dev/null and b/src/app/bread.jpg differ diff --git a/src/app/candle.png b/src/app/candle.png new file mode 100644 index 0000000..a5c8f31 Binary files /dev/null and b/src/app/candle.png differ diff --git a/src/app/fonts.ts b/src/app/fonts.ts index 3f420d6..a545803 100644 --- a/src/app/fonts.ts +++ b/src/app/fonts.ts @@ -7,6 +7,6 @@ export const faustina = Faustina({ export const defaultFont = Cairo({ subsets: ['latin'], - weight: ['400'], + weight: ['400', '300'], display: 'swap', }) diff --git a/src/app/gemeinde/[slug]/page.tsx b/src/app/gemeinde/[slug]/page.tsx new file mode 100644 index 0000000..51632c3 --- /dev/null +++ b/src/app/gemeinde/[slug]/page.tsx @@ -0,0 +1,53 @@ +import { PaginatedDocs } from 'payload' +import { Parish as ParishType } from '@/payload-types' +import { notFound } from 'next/navigation' +import { Parish } from "@/pageComponents/Parish/Parish" +import { stringify } from 'qs-esm' +import { fetchEvents } from '@/fetch/events' +import { fetchWorship } from '@/fetch/worship' + +async function fetchParish(slug: string) { + const query = { + slug: { + equals: slug + } + } + + const stringifiedQuery = stringify( + { + where: query, + }, + { addQueryPrefix: true }, + ) + + const res = await fetch(`http://localhost:3000/api/parish${stringifiedQuery}`) + if (!res.ok) return undefined + return res.json(); +} + +export default async function ParishPage ({ params }: { params: Promise<{slug: string}>}) { + + const slug = (await params).slug; + const parish = await fetchParish(slug) as PaginatedDocs + + if(!parish.docs[0]) { + notFound(); + } + + const { id, name, description, history, contactPersons, contact, photo, churches } = parish.docs[0] + const events = await fetchEvents(id) + const worship = await fetchWorship(churches.map(c => typeof c === "string" ? c : c.id)) + return ( + + ) +} \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css index e8df664..02109cc 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,4 +1,11 @@ html, body { margin: 0; + display: flex; + flex-direction: column; + min-height: 100vh; +} + +main { + flex: 1; } diff --git a/src/app/gottesdienst/[id]/page.tsx b/src/app/gottesdienst/[id]/page.tsx new file mode 100644 index 0000000..49e6c19 --- /dev/null +++ b/src/app/gottesdienst/[id]/page.tsx @@ -0,0 +1,70 @@ +import { Section } from '@/components/Section/Section' +import { Container } from '@/components/Container/Container' +import { notFound } from 'next/navigation' +import { Worship } from '@/payload-types' +import { Title } from '@/components/Title/Title' +import { HR } from '@/components/HorizontalRule/HorizontalRule' +import { liturgicalDayName } from '@/hooks/liturgicalDayName' +import { ChurchWithContact } from '@/compositions/ChurchWithContact/ChurchWithContact' +import { transformCategory } from '@/utils/dto/worship' +import { readableDateTime } from '@/utils/readableDate' + +export default async function WorshipPage({ params }: { params: Promise<{id: string}>}) { + + const id = (await params).id; + const res = await fetch(`http://localhost:3000/api/worship/${id}`); + if (!res.ok) { + notFound() + } + + const event = await res.json() as Worship; + const subtitle = event.title ? event.title : transformCategory(event.type); + const title = event.liturgicalDay ? event.liturgicalDay : liturgicalDayName(event.date); + const church = typeof event.location === "string" ? { name: "Unkown", address: "unknown"} : event.location; + return ( + <> +
+ + + </Container> + <HR/> + </Section> + + <Section backgroundColor={"off-white"}> + <Container textAlign="center"> + <> + <p> + <strong>{church.name}</strong> <br/> + {readableDateTime(event.date)} + </p> + + { event.celebrant && + <p> + <strong>Zelebrant</strong><br/> + {event.celebrant} + </p> + } + + {event.description && + <p> + <strong>Hinweis</strong><br /> + {event.description} + </p> + } + </> + </Container> + </Section> + + + <Section> + <Container> + <ChurchWithContact + church={church.name} + contact={church.address} + /> + </Container> + </Section> + </> + + ) +} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0575175..266eae1 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,8 @@ import type { Metadata } from 'next' import { defaultFont } from './fonts' import './globals.css' +import { Menu } from '@/components/Menu/Menu' +import { Footer } from '@/compositions/Footer/Footer' export const metadata: Metadata = { title: 'Katholische Pfarrei Heilige drei Könige Berlin', @@ -13,7 +15,13 @@ export default function RootLayout({ }>) { return ( <html lang="en" className={defaultFont.className}> - <body>{children}</body> + <body> + <Menu /> + <main> + {children} + </main> + <Footer /> + </body> </html> ) } diff --git a/src/app/mons.jpg b/src/app/mons.jpg new file mode 100644 index 0000000..c5d8563 Binary files /dev/null and b/src/app/mons.jpg differ diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index c88fd49..73602f6 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,15 +1,49 @@ +import { Section } from '@/components/Section/Section' +import { Container } from '@/components/Container/Container' +import { Title } from '@/components/Title/Title' +import { Row } from '@/components/Flex/Row' +import { Col } from '@/components/Flex/Col' + export default function Custom404() { return ( <> - <h1>404 - Seite nicht gefunden</h1> + <Section> + <Container> + <Title title={"Seite nicht gefunden"} /> - <p> - Glorreicher heiliger Antonius, du hast die göttliche Macht ausgeübt, - verlorene Dinge wiederzufinden. Hilf uns, die Gnade Gottes - wiederzuerlangen und mach mich stark im Dienst an Gott und an den - Tugenden. Lass' mich das Verlorene wiederfinden und zeige mir so - deine Güte. - </p> + <p> + Error <strong>404</strong>: Die von Ihnen angeforderte Seite existiert leider nicht. + </p> + + <Title title={"Mögliche Gründe"} size={"sm"} fontStyle={"sans-serif"}/> + + <ul> + <li>Die URL wurde falsch eingegeben.</li> + <li>Die Seite wurde verschoben oder entfernt.</li> + <li>Der Link ist veraltet.</li> + </ul> + + </Container> + </Section> + <Section backgroundColor={"off-white"}> + <Container> + <Row> + <Col> + <p> + Glorreicher heiliger Antonius, du hast die göttliche Macht ausgeübt, + verlorene Dinge wiederzufinden. Hilf uns, die Gnade Gottes + wiederzuerlangen und mach mich stark im Dienst an Gott und an den + Tugenden. Lass' mich das Verlorene wiederfinden und zeige mir so + deine Güte. + </p> + </Col> + <Col> + <></> + </Col> + </Row> + + </Container> + </Section> </> ) } diff --git a/src/app/page.tsx b/src/app/page.tsx index 006aed4..5af4ee2 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,85 +1,71 @@ -import { Menu } from '@/components/Menu/Menu' import { Banner } from '@/components/Banner/Banner' import { Section } from '@/components/Section/Section' import { MainText } from '@/components/MainText/MainText' import { Title } from '@/components/Title/Title' -import { ImageCardSlider } from '@/compositions/ImageCardSlider/ImageCardSlider' import { ImageWithText } from '@/compositions/ImageWithText/ImageWithText' import { Container } from '@/components/Container/Container' import { ContactSection } from '@/compositions/ContactSection/ContactSection' -import { Footer } from '@/compositions/Footer/Footer' -import { EventRow } from '@/components/EventRow/EventRow' -import monst from "./mons.jpg" -import bread from "./bread.jpg" -import candle from "./candle.png" -import { SideSlider } from '@/components/SideSlider/SideSlider' import { ContentWithSlider } from '@/compositions/ContentWithSlider/ContentWithSlider' +import { Events } from '@/compositions/Events/Events' +import { fetchEvents } from '@/fetch/events' +import forest from "../assets/forest.jpeg" +import { fetchWorship } from '@/fetch/worship' +import { Worship } from '@/payload-types' +import { MassTable } from '@/components/MassTable/MassTable' +import { Row } from '@/components/Flex/Row' +import { transformEvents } from '@/utils/dto/events' +import { fetchBlog } from '@/fetch/blog' +import { ImageCardSlider } from '@/compositions/ImageCardSlider/ImageCardSlider' +import { blogToSlides } from '@/utils/dto/blog' -// const extractWorshipHours = (worships: Worship[]) => { -// let worshipByDate = new Map<string, Worship[]>() -// -// for (let worship of worships) { -// const date = worship.date.substring(0, 10) -// -// if (worshipByDate.has(date)) { -// worshipByDate.get(date)?.push(worship) -// } else { -// worshipByDate.set(date, [worship]) -// } -// } -// -// return worshipByDate -// } +const sortWorship = (worship: Worship[]) => { + const map = new Map<string, Worship[]>(); + + worship.map(w => { + if(typeof w.location === "object") { + const title = w.location.name; + + if(map.has(title)) { + map.get(title)?.push(w); + } else { + map.set(title, [w]) + } + } + }) + + return map +} + +export const dynamic = 'force-dynamic' export default async function Home() { - // const today = new Date() - // const nextWeek = new Date(today.getTime() + 7 * 24 * 60 * 60 * 1000) - // const payload = await getPayloadHMR({ config: configPromise }) - // const worship = await payload.find({ - // collection: 'worship', - // where: { - // and: [ - // { - // date: { - // greater_than_equal: today.toISOString().substring(0, 10), - // }, - // }, - // { - // date: { - // less_than: nextWeek.toISOString().substring(0, 10), - // }, - // }, - // ], - // }, - // limit: 30, - // sort: 'date', - // }) - // - // const nextMass = await payload.find({ - // collection: 'worship', - // where: { - // and: [ - // { - // date: { - // greater_than_equal: today.toISOString(), - // }, - // }, - // { - // cancelled: { - // equals: false, - // }, - // }, - // ], - // }, - // limit: 1, - // sort: 'date', - // }) - // - // const worshipByDate = [...extractWorshipHours(worship.docs).entries()] + + const events = await fetchEvents(undefined) + const worship = await fetchWorship() + const worshipPerLocation = Array.from( + sortWorship(worship?.docs || []).entries() + ).sort( + (a, b) => { + const nameA = a[0]; + const nameB = b[0]; + + if (nameA < nameB) { + return -1; + } + if (nameA > nameB) { + return 1; + } + + // names must be equal + return 0; + } + ) + + const blog = await fetchBlog(); + return ( <> - <Menu/> <Banner/> <Container> @@ -88,32 +74,23 @@ export default async function Home() { "Wie die drei Weisen aus dem Morgenland wollen wir uns immer wieder neu auf den Weg machen."} /> </Section> + <Section> + <Title title={"Unsere Gottesdiensten"} align={"center"}/> + + <Row> + {worshipPerLocation.map(value => <MassTable key={value[0]} location={value[0]} masses={value[1]} />)} + </Row> + </Section> + <Section> <Title title={"Aktuelles"} /> - <ImageCardSlider slides={[ - { - id: "id1", - src: monst, - title: "Anbetung in Oktober", - href: "https://somelink" - }, - { - id: "id2", - src: candle, - title: "Allerseelen", - href: "https://somelink" - }, - { - id: "id3", - src: bread, - title: "Erntedankfest", - href: "https://somelink" - } - ]} /> + <ImageCardSlider slides={blogToSlides(blog?.docs || [])} /> </Section> </Container> - <ImageWithText /> + {<ImageWithText backgroundColor={"soft"} title={"Über uns"} text={'Wir begrüßen Sie herzlich in unserer Pfarrei Hl. Drei Könige und im bunten Neukölln mit einer Vielfalt von Kulturen und Nationalitäten.\n' + + '\n' + + 'Unsere Pfarrei Hl. Drei Könige wurde am 01.01.2020 gegründet. Am 12.01.2020 feierte Erzbischof Dr. Heiner Koch mit den Gemeinden die Gründung in einer feierlichen Hl. Messe in der katholischen Marienschule. Anwesende Gäste waren Bürgermeister Martin Hikel, Christian Nottmeier, der Superintendent des evangelischen Kirchenkreises Neukölln und vielen Akteuren aus Kiez und Ökumene. Die Vielfalt der Glaubenswege in unserer Pfarrei sehen wir als Schatz. Wie die drei Weisen aus dem Morgenland wollen wir uns immer wieder neu auf den Weg machen.'} image={forest} />} <ContentWithSlider slider={<> <Title title={"Akutelle Highlights"} size={"md"} fontStyle={"sans-serif"} /> @@ -121,50 +98,12 @@ export default async function Home() { <Container position={"right"}> <Section> <Title title={"Veranstaltungen"} /> - <EventRow - date={"2024-10-23T16:00:00"} - title={"Gemeinsam beten"} - href={"https://link"} - location={"St. Christophorus"} - /> - <EventRow - date={"2024-10-28T19:45:00"} - title={"Rosenkranz"} - href={"https://link"} - location={"St. Clara"} - /> - <EventRow - date={"2024-11-02T19:00:00"} - title={"Allerseelen"} - href={"https://link"} - location={"St. Michael"} - /> - <EventRow - date={"2024-11-11T18:00:00"} - title={"St. Martin"} - href={"https://link"} - location={"Sportplatz St. Christophorus"} - /> - <EventRow - date={"2024-11-11T18:00:00"} - title={"St. Martin"} - href={"https://link"} - location={"Sportplatz St. Christophorus"} - /> - <EventRow - date={"2024-11-11T18:00:00"} - title={"St. Martin"} - href={"https://link"} - location={"Sportplatz St. Christophorus"} - /> + <Events events={transformEvents(events?.docs || [])} n={6}/> </Section> </Container> </ContentWithSlider> <ContactSection /> - - <Footer /> - </> ) } diff --git a/src/app/veranstaltungen/[id]/page.tsx b/src/app/veranstaltungen/[id]/page.tsx new file mode 100644 index 0000000..17fce4e --- /dev/null +++ b/src/app/veranstaltungen/[id]/page.tsx @@ -0,0 +1,47 @@ +import { Section } from '@/components/Section/Section' +import { Container } from '@/components/Container/Container' +import { notFound } from 'next/navigation' +import { Event } from '@/payload-types' +import { Title } from '@/components/Title/Title' +import { HR } from '@/components/HorizontalRule/HorizontalRule' +import { readableDateTime } from '@/utils/readableDate' +import { TextDiv } from '@/components/Text/TextDiv' + +export default async function EventPage({ params }: { params: Promise<{id: string}>}) { + + const id = (await params).id; + const res = await fetch(`http://localhost:3000/api/event/${id}?depth=0`); + + if (!res.ok) { + notFound() + } + + const event = await res.json() as Event; + + return ( + <> + <Section> + <Container> + <Title + title={event.title} + subtitle={readableDateTime(event.date)} + size={"xl"}/> + </Container> + + <HR /> + </Section> + + <Section> + <Container textAlign={"center"}> + <TextDiv text={event.shortDescription} /> + <p> + <strong>Location</strong> <br/> + {event.location} + </p> + </Container> + </Section> + </> + + + ) +} \ No newline at end of file diff --git a/src/compositions/ImageWithText/christophorus.jpeg b/src/assets/christophorus.jpeg similarity index 100% rename from src/compositions/ImageWithText/christophorus.jpeg rename to src/assets/christophorus.jpeg diff --git a/src/compositions/ImageWithText/forest.jpeg b/src/assets/forest.jpeg similarity index 100% rename from src/compositions/ImageWithText/forest.jpeg rename to src/assets/forest.jpeg diff --git a/src/collections/Blog.ts b/src/collections/Blog.ts index ad17c03..f835bf2 100644 --- a/src/collections/Blog.ts +++ b/src/collections/Blog.ts @@ -1,6 +1,37 @@ -import { CollectionConfig } from 'payload' +import { Block, CollectionConfig } from 'payload' import { isAdminOrEmployee } from '@/collections/access/admin' +const QuoteBlock: Block = { + slug: 'Quote', + labels: { + singular: "Zitat", + plural: "Zitaten" + }, + fields: [ + { + name: 'quoteText', + type: 'text', + required: true + }, + ], +} + +const ContentWithSlider: Block = { + slug: 'ContentWithSlider', + fields: [ + { + name: 'sliderContent', + type: 'textarea', + required: true + }, + { + name: 'content', + type: 'textarea', + required: true + } + ] +} + export const Blog: CollectionConfig = { slug: 'blog', labels: { @@ -35,21 +66,14 @@ export const Blog: CollectionConfig = { } }, { - name: 'isHighlight', - type: 'checkbox', - required: true, - label: { - de: "Highlight" - }, - defaultValue: false - }, - { - name: 'text', - type: 'richText', - required: true, - label: { - de: "Post" - } + name: 'content', + type: 'blocks', + minRows: 1, + maxRows: 20, + blocks: [ + QuoteBlock, + ContentWithSlider + ] } ], admin: { diff --git a/src/collections/Events.ts b/src/collections/Events.ts index 1d23c63..bdf7bdc 100644 --- a/src/collections/Events.ts +++ b/src/collections/Events.ts @@ -29,7 +29,7 @@ export const Events: CollectionConfig = { }, }, { - name: 'datum', + name: 'date', type: 'date', required: true, label: { @@ -41,6 +41,14 @@ export const Events: CollectionConfig = { }, }, }, + { + name: 'location', + type: 'text', + required: true, + label: { + de: 'Location' + }, + }, { name: 'parish', type: 'relationship', @@ -70,7 +78,7 @@ export const Events: CollectionConfig = { label: { de: 'Gruppe', }, - validate: (value, options) => { + validate: (value: any, options: { req: { user: any } }) => { let user = options.req.user if (!user) { diff --git a/src/collections/Parish.ts b/src/collections/Parish.ts index 26628c6..0ec3201 100644 --- a/src/collections/Parish.ts +++ b/src/collections/Parish.ts @@ -51,23 +51,29 @@ export const Parish: CollectionConfig = { hasMany: true, }, { - name: 'contact', + name: 'contactPersons', label: { - de: 'Kontaktinformation', + de: "Ansprechpartner" }, - type: 'textarea', - required: true, - admin: { - rows: 10, - }, - }, - { - name: 'title', - label: { - de: 'Titel', - }, - type: 'text', - required: true, + type: 'array', + fields: [ + { + name: 'title', + label: { + de: 'Titel' + }, + type: 'text', + required: true + }, + { + name: 'description', + label: { + de: 'Umschreibung' + }, + type: 'textarea', + required: true + } + ] }, { name: 'description', @@ -80,10 +86,33 @@ export const Parish: CollectionConfig = { rows: 15, }, }, + { + name: 'history', + label: { + de: 'Geschichte', + }, + type: 'textarea', + required: true, + admin: { + rows: 15, + }, + }, + { + name: 'contact', + label: { + de: 'Kontaktinformation', + }, + type: 'textarea', + required: true, + admin: { + rows: 10, + }, + }, { name: 'photo', type: 'upload', relationTo: 'media', + required: true }, ], admin: { diff --git a/src/collections/Worship.ts b/src/collections/Worship.ts index ad88476..52723a0 100644 --- a/src/collections/Worship.ts +++ b/src/collections/Worship.ts @@ -56,6 +56,14 @@ export const Worship: CollectionConfig = { ], required: true, }, + { + name: 'title', + type: 'text', + required: false, + label: { + de: 'Titel' + } + }, { name: 'cancelled', type: 'checkbox', @@ -66,13 +74,21 @@ export const Worship: CollectionConfig = { }, }, { - name: 'title', + name: 'liturgicalDay', type: 'text', required: false, label: { de: 'Liturgischer Tag', }, }, + { + name: 'celebrant', + type: 'text', + required: false, + label: { + de: 'Zelebrant' + } + }, { name: 'description', type: 'textarea', @@ -81,6 +97,10 @@ export const Worship: CollectionConfig = { }, }, ], + admin: { + defaultColumns: ["date", 'location', 'type', 'celebrant'], + listSearchableFields: ['date', 'location'] + }, access: { read: () => true, create: isAdminOrEmployee(), diff --git a/src/components/Button/styles.module.scss b/src/components/Button/styles.module.scss index 7a3acd0..2c0fb36 100644 --- a/src/components/Button/styles.module.scss +++ b/src/components/Button/styles.module.scss @@ -2,7 +2,7 @@ .button { background: $shade1; - color: $contrast-color; + color: $shade3; border-radius: $border-radius; text-align: center; border: 0; diff --git a/src/components/ChurchCard/ChurchCard.stories.tsx b/src/components/ChurchCard/ChurchCard.stories.tsx new file mode 100644 index 0000000..11590b5 --- /dev/null +++ b/src/components/ChurchCard/ChurchCard.stories.tsx @@ -0,0 +1,24 @@ +import { Meta, StoryObj } from '@storybook/react' +import { ChurchCard } from './ChurchCard' + +const meta: Meta<typeof ChurchCard> = { + component: ChurchCard, +} + +type Story = StoryObj<typeof ChurchCard>; +export default meta + +export const Default: Story = { + args: { + church: "anna", + backgroundColor: "#E0DAE5" + }, +} + +export const Small: Story = { + args: { + church: "anna", + backgroundColor: "#E0DAE5", + width: 100 + }, +} \ No newline at end of file diff --git a/src/components/ChurchCard/ChurchCard.tsx b/src/components/ChurchCard/ChurchCard.tsx index 2e1036f..1c2ae14 100644 --- a/src/components/ChurchCard/ChurchCard.tsx +++ b/src/components/ChurchCard/ChurchCard.tsx @@ -1,3 +1,14 @@ -export const ChurchCard = () => { - +import styles from './styles.module.scss' +import { Church, ChurchIcon } from '@/components/ChurchIcon/ChurchIcon' + +type ChurchCardProps = { + church: Church, + width?: number, + backgroundColor: string, +} + +export const ChurchCard = ({church, backgroundColor, width = 286 }: ChurchCardProps) => { + return <div className={styles.card} style={{backgroundColor, width, height: width}}> + <ChurchIcon church={church} style={"outline"} stroke={0.5} color={"#000000"} /> + </div> } \ No newline at end of file diff --git a/src/components/ChurchCard/styles.module.scss b/src/components/ChurchCard/styles.module.scss new file mode 100644 index 0000000..444a67b --- /dev/null +++ b/src/components/ChurchCard/styles.module.scss @@ -0,0 +1,12 @@ +@import "template.scss"; + +.card { + border-radius: $border-radius; + border: 1px solid $shade2; + box-shadow: 3px 7px 26px 0 rgba(0, 0, 0, 0.15); +} + +.card svg { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/src/components/ChurchIcon/ChurchIcon.stories.tsx b/src/components/ChurchIcon/ChurchIcon.stories.tsx index 9be7dc9..fdf93ab 100644 --- a/src/components/ChurchIcon/ChurchIcon.stories.tsx +++ b/src/components/ChurchIcon/ChurchIcon.stories.tsx @@ -3,6 +3,11 @@ import { ChurchIcon } from './ChurchIcon' const meta: Meta<typeof ChurchIcon> = { component: ChurchIcon, + decorators: [ + (Story) => <div style={{width: "50px", height: "50px"}} > + <Story/> + </div> + ] } type Story = StoryObj<typeof ChurchIcon>; @@ -10,30 +15,45 @@ export default meta export const StClara: Story = { args: { - church: "clara" + church: "clara", + style: "outline", + stroke: 3, + color: "#426156", }, } export const StChristophorus: Story = { args: { - church: "christophorus" + church: "christophorus", + style: "outline", + stroke: 3, + color: "#426156", }, } export const StRichard: Story = { args: { - church: "richard" + church: "richard", + style: "outline", + stroke: 3, + color: "#426156", }, } export const StEduard: Story = { args: { - church: "eduard" + church: "eduard", + style: "outline", + stroke: 3, + color: "#426156", }, } export const StAnna: Story = { args: { - church: "anna" + church: "anna", + style: "outline", + stroke: 3, + color: "#426156", }, } \ No newline at end of file diff --git a/src/components/ChurchIcon/ChurchIcon.tsx b/src/components/ChurchIcon/ChurchIcon.tsx index 0f7efce..9cd3780 100644 --- a/src/components/ChurchIcon/ChurchIcon.tsx +++ b/src/components/ChurchIcon/ChurchIcon.tsx @@ -1,32 +1,56 @@ -import christophorus from "./christophorus_full.svg" -import clara from "./clara_full.svg" -import anna from "./anna_full.svg" -import richard from "./richard_full.svg" -import eduard from "./eduard_full.svg" -import Image from 'next/image' + +export type Church = "clara" | "christophorus" | "richard" | "eduard" | "anna" type ChurchIconProps = { - church: "clara" | "christophorus" | "richard" | "eduard" | "anna" + church: Church + style: "outline" | "filled" + stroke: number + color: string } -export const ChurchIcon = ({church}: ChurchIconProps) => { +export const ChurchIcon = ({church, style, stroke, color}: ChurchIconProps) => { if (church === "clara") { - return <Image src={clara} alt={""} /> + return <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g fill={style === 'outline' ? '#ffffff' : color} stroke={color} strokeWidth={stroke}> + <polygon + points="152.25 185.47 103.11 145.09 103.11 134.29 105.39 134.29 105.39 133.29 103.11 133.29 103.11 128.18 102.11 128.18 102.11 133.29 99.68 133.29 99.68 134.29 102.11 134.29 102.11 145.09 86.5 158.05 86.5 128.09 60.44 42.14 60.44 32.72 62.72 32.72 62.72 31.72 60.44 31.72 60.44 26.61 59.44 26.61 59.44 31.72 57.01 31.72 57.01 32.72 59.44 32.72 59.44 42.12 38.88 111.48 38.86 248.62 86 248.22 169.49 248.22 169.49 185.47 152.25 185.47" /> + </g> + </svg> } - if (church === "anna") { - return <Image src={anna} alt={""} /> + if (church === 'anna') { + return <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g fill={style === 'outline' ? '#ffffff' : color} stroke={color} strokeWidth={stroke}> + <polygon + points="143.86 114.51 143.86 73.97 112.05 56.84 112.05 46.53 114.33 46.53 114.33 45.53 112.05 45.53 112.05 40.42 111.05 40.42 111.05 45.53 108.62 45.53 108.62 46.53 111.05 46.53 111.05 56.83 79.7 74.46 79.7 114.76 33.67 126.02 33.43 217.49 33.42 217.99 190.52 217.99 190.52 125.78 143.86 114.51" /> + </g> + </svg> } - if (church === "richard") { - return <Image src={richard} alt={""} /> + if (church === 'richard') { + return <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g fill={style === "outline" ? "#ffffff" : color} stroke={color} strokeWidth={stroke}> + <path + d="M87,80.23l-.23-.06L32.13,120.86v74.19H204.49V109.29Zm18,24.13h-2.28v11h-1v-11H99.32v-1h2.43V98.25h1v5.11H105Z" /> + </g> + </svg> } - if (church === "eduard") { - return <Image src={eduard} alt={""} /> + if (church === 'eduard') { + return <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g fill={style === "outline" ? "#ffffff" : color} stroke={color} strokeWidth={stroke}> + <polygon + points="152.15 168.04 132.61 179.16 132.61 134.31 109.83 37.44 109.83 26.46 112.11 26.46 112.11 25.46 109.83 25.46 109.83 20.35 108.83 20.35 108.83 25.46 106.4 25.46 106.4 26.46 108.83 26.46 108.83 37.44 85.57 133.71 85.56 168.01 74.7 168.01 58.33 191.25 58.24 191.38 58.24 254.87 184.49 254.87 184.49 196.72 152.15 168.04" /> + </g> + </svg> } return ( - <Image src={christophorus} alt={"chris"} /> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g fill={style === "outline" ? "#ffffff" : color} stroke={color} strokeWidth={stroke}> + <polygon + points="138.03 54.42 138.03 44.29 140.3 44.29 140.3 43.29 138.03 43.29 138.03 38.18 137.03 38.18 137.03 43.29 134.6 43.29 134.6 44.29 137.03 44.29 137.03 54.44 94.55 71.65 94.55 186.65 71.4 203.88 71.4 209.82 42.03 209.9 42.07 232.89 174.94 232.89 174.94 72.21 138.03 54.42" /> + </g> + </svg> ) } \ No newline at end of file diff --git a/src/components/ChurchIcon/anna_full.svg b/src/components/ChurchIcon/anna_full.svg index 176f6f5..3025c13 100644 --- a/src/components/ChurchIcon/anna_full.svg +++ b/src/components/ChurchIcon/anna_full.svg @@ -1 +1,6 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 239.12 255.74"><defs><style>.cls-1{fill:#426156;}</style></defs><g id="St._Anna" data-name="St. Anna"><path class="cls-1" d="M152.23,122.54V82L120.42,64.87V54.56h2.28v-1h-2.28V48.45h-1v5.11H117v1h2.43v10.3L88.07,82.49v40.3L42,134.05l-.24,91.47v.5h157.1V133.81ZM88.07,225H42.8L43,134.84l45-11Zm63.16,0H89.07V83.08l30.84-17.35,31.32,16.86Zm46.66,0H152.23V123.57l45.66,11Z"/><polygon class="cls-1" points="197.89 134.59 197.89 225.02 152.23 225.02 152.23 123.57 197.89 134.59"/><polygon class="cls-1" points="151.23 82.59 151.23 225.02 89.07 225.02 89.07 83.08 119.91 65.73 151.23 82.59"/><polygon class="cls-1" points="88.07 123.82 88.07 225.02 42.8 225.02 43.04 134.84 88.07 123.82"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g id="Full_Violet" data-name="Full Violet"> + <polygon class="cls-1" + points="143.86 114.51 143.86 73.97 112.05 56.84 112.05 46.53 114.33 46.53 114.33 45.53 112.05 45.53 112.05 40.42 111.05 40.42 111.05 45.53 108.62 45.53 108.62 46.53 111.05 46.53 111.05 56.83 79.7 74.46 79.7 114.76 33.67 126.02 33.43 217.49 33.42 217.99 190.52 217.99 190.52 125.78 143.86 114.51"/> + </g> +</svg> \ No newline at end of file diff --git a/src/components/ChurchIcon/christophorus_full.svg b/src/components/ChurchIcon/christophorus_full.svg index a146c89..28fca0f 100644 --- a/src/components/ChurchIcon/christophorus_full.svg +++ b/src/components/ChurchIcon/christophorus_full.svg @@ -1,30 +1,6 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - viewBox="0 0 175.75 265.12" - version="1.1" - id="svg34" - xmlns="http://www.w3.org/2000/svg" - xmlns:svg="http://www.w3.org/2000/svg"> - <defs - id="defs27"> - <style - id="style25">.cls-1{fill:#426156;}</style> - </defs> - <g - id="St._Christophorus" - data-name="St. Christophorus"> - <path - class="cls-1" - d="M 114.44,72.08 V 62 h 2.27 v -1 h -2.27 v -5.16 h -1 V 61 H 111 v 1 h 2.43 V 72.1 L 71,89.31 v 115 l -23.19,17.23 v 5.94 l -29.37,0.08 v 23 H 151.35 V 89.87 Z M 113.93,73 c -75.953333,-48.666667 -37.976667,-24.333333 0,0 z" - id="path29" /> - </g> - <g - id="fill"> - <polygon - class="cls-1" - points="113.89,72.99 114.02,72.99 150.35,90.49 150.35,249.55 19.48,249.55 19.44,228.56 48.81,228.48 48.81,222.04 71.96,204.81 71.96,89.98 " - id="polygon31" - style="fill:#426156" - transform="translate(0.04,0.01)" /> - </g> -</svg> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g id="White_Mask" data-name="White Mask"> + <polygon class="cls-3" + points="138.03 54.42 138.03 44.29 140.3 44.29 140.3 43.29 138.03 43.29 138.03 38.18 137.03 38.18 137.03 43.29 134.6 43.29 134.6 44.29 137.03 44.29 137.03 54.44 94.55 71.65 94.55 186.65 71.4 203.88 71.4 209.82 42.03 209.9 42.07 232.89 174.94 232.89 174.94 72.21 138.03 54.42"/> + </g> +</svg> \ No newline at end of file diff --git a/src/components/ChurchIcon/clara_full.svg b/src/components/ChurchIcon/clara_full.svg index 0e20def..9853e78 100644 --- a/src/components/ChurchIcon/clara_full.svg +++ b/src/components/ChurchIcon/clara_full.svg @@ -1 +1,6 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 175.75 265.12"><defs><style>.cls-1{fill:#426156;}</style></defs><g id="St._Eduard" data-name="St. Eduard"><path class="cls-1" d="M136.16,177.51,87,137.13v-10.8H89.3v-1H87v-5.11H86v5.11H83.59v1H86v10.8l-15.61,13v-30L44.35,34.18V24.76h2.28v-1H44.35V18.65h-1v5.11H40.92v1h2.43v9.4L22.79,103.52l0,137.14,47.14-.4H153.4V177.51ZM69.41,239.27l-45.64.38V103.74L43.85,36,69.41,120.2Zm83,0h-82V151.39L86.52,138l49.28,40.49h16.6Z"/><polygon class="cls-1" points="152.4 178.51 152.4 239.26 70.41 239.26 70.41 151.39 86.52 138.02 135.8 178.51 152.4 178.51"/><polygon class="cls-1" points="69.41 120.2 69.41 239.27 23.77 239.65 23.77 103.74 43.85 35.98 69.41 120.2"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g> + <polygon + points="152.25 185.47 103.11 145.09 103.11 134.29 105.39 134.29 105.39 133.29 103.11 133.29 103.11 128.18 102.11 128.18 102.11 133.29 99.68 133.29 99.68 134.29 102.11 134.29 102.11 145.09 86.5 158.05 86.5 128.09 60.44 42.14 60.44 32.72 62.72 32.72 62.72 31.72 60.44 31.72 60.44 26.61 59.44 26.61 59.44 31.72 57.01 31.72 57.01 32.72 59.44 32.72 59.44 42.12 38.88 111.48 38.86 248.62 86 248.22 169.49 248.22 169.49 185.47 152.25 185.47"/> + </g> +</svg> \ No newline at end of file diff --git a/src/components/ChurchIcon/eduard_full.svg b/src/components/ChurchIcon/eduard_full.svg index 3c778a9..a336b4d 100644 --- a/src/components/ChurchIcon/eduard_full.svg +++ b/src/components/ChurchIcon/eduard_full.svg @@ -1,14 +1,6 @@ -<svg xmlns="http://www.w3.org/2000/svg" - viewBox="0 0 175.75 265.12"> - <defs> - <style>.cls-1{fill:#426156;}</style> - </defs> - <g id="St._Eduard" data-name="St. Eduard"> - <path class="cls-1" - d="M117.83,161.61,98.29,172.73V127.88L75.51,31V20h2.28V19H75.51V13.92h-1V19H72.08v1h2.43V31L51.25,127.28v34.3H40.38L24,184.82l-.09.13v63.49H150.17V190.29ZM51.24,247.44H24.92V185.26l16-22.68H51.24Zm46.05,0H52.24v-120L75,33.22l22.29,94.72Zm51.88,0H98.29V173.88l19.41-11,31.47,27.91Z"/> - <polygon class="cls-1" - points="149.17 190.74 149.17 247.44 98.29 247.44 98.29 173.88 117.7 162.83 149.17 190.74"/> - <polygon class="cls-1" points="97.29 127.94 97.29 247.44 52.24 247.44 52.24 127.45 75 33.22 97.29 127.94"/> - <polygon class="cls-1" points="51.24 162.58 51.24 247.44 24.92 247.44 24.92 185.26 40.9 162.58 51.24 162.58"/> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g> + <polygon + points="152.15 168.04 132.61 179.16 132.61 134.31 109.83 37.44 109.83 26.46 112.11 26.46 112.11 25.46 109.83 25.46 109.83 20.35 108.83 20.35 108.83 25.46 106.4 25.46 106.4 26.46 108.83 26.46 108.83 37.44 85.57 133.71 85.56 168.01 74.7 168.01 58.33 191.25 58.24 191.38 58.24 254.87 184.49 254.87 184.49 196.72 152.15 168.04"/> </g> </svg> \ No newline at end of file diff --git a/src/components/ChurchIcon/richard_full.svg b/src/components/ChurchIcon/richard_full.svg index 972c155..6690183 100644 --- a/src/components/ChurchIcon/richard_full.svg +++ b/src/components/ChurchIcon/richard_full.svg @@ -1 +1,6 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 221.52 164.2"><defs><style>.cls-1{fill:#426156;}.cls-2{fill:#728f8d;}.cls-3{fill:#fff;}</style></defs><g id="St._Christophorus" data-name="St. Christophorus"><path class="cls-1" d="M74.29,20.71l-.23-.06L19.41,61.34v74.19H191.77V49.77Zm-.62,113.82H20.41V61.84L73.67,22.19Zm117.1,0H74.67V21.83l116.1,28.73Z"/><path class="cls-2" d="M74.67,21.83v112.7h116.1v-84Zm17.64,23.1H90V56H89v-11H86.6v-1H89V38.82h1v5.11h2.28Z"/><polygon class="cls-1" points="73.67 22.19 73.67 134.53 20.41 134.53 20.41 61.84 73.67 22.19"/><polygon class="cls-3" points="92.31 43.93 92.31 44.93 90.03 44.93 90.03 55.97 89.03 55.97 89.03 44.93 86.6 44.93 86.6 43.93 89.03 43.93 89.03 38.82 90.03 38.82 90.03 43.93 92.31 43.93"/></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223.94 276.25"> + <g> + <path + d="M87,80.23l-.23-.06L32.13,120.86v74.19H204.49V109.29Zm18,24.13h-2.28v11h-1v-11H99.32v-1h2.43V98.25h1v5.11H105Z"/> + </g> +</svg> \ No newline at end of file diff --git a/src/components/ContactPerson/ContactPerson.stories.tsx b/src/components/ContactPerson/ContactPerson.stories.tsx new file mode 100644 index 0000000..3edcfd9 --- /dev/null +++ b/src/components/ContactPerson/ContactPerson.stories.tsx @@ -0,0 +1,17 @@ +import { Meta, StoryObj } from '@storybook/react' +import { ContactPerson } from './ContactPerson' + +const meta: Meta<typeof ContactPerson> = { + component: ContactPerson, +} + +type Story = StoryObj<typeof ContactPerson>; +export default meta + +export const Default: Story = { + args: { + title: "Kirechenvorstand", + description: `Stellv. Vorsitzender: Michael Wolter +Vorsitzender: Pfarrer Ulrich Kotzur` + }, +}; \ No newline at end of file diff --git a/src/components/ContactPerson/ContactPerson.tsx b/src/components/ContactPerson/ContactPerson.tsx new file mode 100644 index 0000000..aa6a022 --- /dev/null +++ b/src/components/ContactPerson/ContactPerson.tsx @@ -0,0 +1,18 @@ +import styles from './styles.module.scss' +import { Title } from '@/components/Title/Title' + +type ContactPersonProps = { + title: string, + description: string +} + +export const ContactPerson = ({ title, description }: ContactPersonProps) => { + return ( + <div> + <Title title={title} size={"sm"} color={"contrast"} fontStyle={"sans-serif"} /> + <div className={styles.description}> + {description} + </div> + </div> + ) +} \ No newline at end of file diff --git a/src/components/ContactPerson/ContactPersonList.stories.tsx b/src/components/ContactPerson/ContactPersonList.stories.tsx new file mode 100644 index 0000000..bff5c56 --- /dev/null +++ b/src/components/ContactPerson/ContactPersonList.stories.tsx @@ -0,0 +1,33 @@ +import { Meta, StoryObj } from '@storybook/react' +import { ContactPersonList } from './ContactPersonList' + +const meta: Meta<typeof ContactPersonList> = { + component: ContactPersonList, +} + +type Story = StoryObj<typeof ContactPersonList>; +export default meta + +export const Default: Story = { + args: { + persons: [ + { + title: "Seelsorgeteam", + description: `Pater Karl Hermann Lenz SAC (Pfarrvikar) +pallottis@christophorus-berlin.de +Lissy Eichert UAC +l.eichert@christophorus-berlin. +` + }, + { + title: "Pallottinische Gemeinschaft", + description: `Lissy Eichert UAC +l.eichert@christophorus-berlin.de` + }, + { + title: "Kirechenvorstand", + description: "Some contactinfo" + } + ] + }, +} \ No newline at end of file diff --git a/src/components/ContactPerson/ContactPersonList.tsx b/src/components/ContactPerson/ContactPersonList.tsx new file mode 100644 index 0000000..dc8860e --- /dev/null +++ b/src/components/ContactPerson/ContactPersonList.tsx @@ -0,0 +1,17 @@ +import styles from "./list.module.scss" +import { ContactPerson } from '@/components/ContactPerson/ContactPerson' + +type ContactPersonListProps = { + persons: { + title: string, + description: string, + }[] +} + +export const ContactPersonList = ({ persons }: ContactPersonListProps) => { + return ( + <div className={styles.list}> + {persons.map(person => <ContactPerson key={person.title} title={person.title} description={person.description} />)} + </div> + ) +} \ No newline at end of file diff --git a/src/components/ContactPerson/list.module.scss b/src/components/ContactPerson/list.module.scss new file mode 100644 index 0000000..6a54107 --- /dev/null +++ b/src/components/ContactPerson/list.module.scss @@ -0,0 +1,5 @@ +.list { + display: flex; + flex-direction: column; + gap: 20px; +} \ No newline at end of file diff --git a/src/components/ContactPerson/styles.module.scss b/src/components/ContactPerson/styles.module.scss new file mode 100644 index 0000000..9127c41 --- /dev/null +++ b/src/components/ContactPerson/styles.module.scss @@ -0,0 +1,5 @@ +@import "template.scss"; + +.description { + white-space: preserve; +} \ No newline at end of file diff --git a/src/components/Container/Container.tsx b/src/components/Container/Container.tsx index b625b69..d0fa29f 100644 --- a/src/components/Container/Container.tsx +++ b/src/components/Container/Container.tsx @@ -4,13 +4,13 @@ import classNames from 'classnames' type ContainerProps = { children: JSX.Element | JSX.Element[], flex?: boolean - position?: "center" | "left" | "right" + position?: "center" | "left" | "right", + textAlign?: "left" | "center" | "right", } -export const Container = ({ children, flex = false, position = "center" }: ContainerProps) => { +export const Container = ({ children, position = "center", textAlign="left" }: ContainerProps) => { return <div className={classNames({ [styles.container]: true, - [styles.flex]: flex, [styles.right]: position === "right", - })}>{children}</div> + })} style={{ textAlign }}>{children}</div> } diff --git a/src/components/Container/styles.module.scss b/src/components/Container/styles.module.scss index 3b53c65..4d6e522 100644 --- a/src/components/Container/styles.module.scss +++ b/src/components/Container/styles.module.scss @@ -5,13 +5,6 @@ $width: 1100px; margin: 0 auto; } -.flex { - display: flex; - gap: 80px; - align-items: center; - flex-wrap: wrap; -} - .right { max-width: inherit; margin-left: calc((100vw - $width) / 2); diff --git a/src/components/EventRow/EventRow.tsx b/src/components/EventRow/EventRow.tsx index 13a01e3..32f2bb2 100644 --- a/src/components/EventRow/EventRow.tsx +++ b/src/components/EventRow/EventRow.tsx @@ -1,8 +1,9 @@ import { useMemo } from 'react' import styles from "./styles.module.scss" import classNames from 'classnames' +import Link from 'next/link' -type EventRowProps = { +export type EventRowProps = { /** datetime 8601 format */ date: string, title: string, @@ -37,29 +38,31 @@ const shortMonth = (date: string) => { -export const EventRow = ({date, title, location, cancelled}: EventRowProps) => { +export const EventRow = ({date, title, location, cancelled, href}: EventRowProps) => { const day = useMemo(() => date.substring(8, 10), [date]); const dateObj = useMemo(() => new Date(date), [date]); const month = useMemo(() => shortMonth(date), [date]); return ( - <div className={styles.container}> - <div className={styles.day}> - {day} <br/> - {month} - </div> + <Link href={href} className={styles.link}> + <div className={styles.container}> + <div className={styles.day}> + {day} <br /> + {month} + </div> - <div className={styles.line}></div> + <div className={styles.line}></div> - <div className={classNames({ - [styles.details]: true, - [styles.cancelled]: cancelled + <div className={classNames({ + [styles.details]: true, + [styles.cancelled]: cancelled })}> - {title} <br/> - {dateObj.toLocaleDateString("de-DE", { weekday: "long"})} {dateObj.toLocaleDateString("de-DE", {dateStyle: "medium"})}, {dateObj.toLocaleTimeString("de-DE", {timeStyle: "short"})} Uhr - <br/> - {location} + {title} <br /> + {dateObj.toLocaleDateString("de-DE", { weekday: "long" })} {dateObj.toLocaleDateString("de-DE", { dateStyle: "medium" })}, {dateObj.toLocaleTimeString("de-DE", { timeStyle: "short" })} Uhr + <br /> + {location} + </div> </div> - </div> + </Link> ); } \ No newline at end of file diff --git a/src/components/EventRow/styles.module.scss b/src/components/EventRow/styles.module.scss index 68c2b4f..72da9e1 100644 --- a/src/components/EventRow/styles.module.scss +++ b/src/components/EventRow/styles.module.scss @@ -28,12 +28,17 @@ margin: 20px 0; } +.link { + text-decoration: none; + color: inherit; +} + .cancelled { text-decoration: line-through; } .container:hover .day { - color: $shade1; + color: $contrast-color; } @media screen and (max-width: 576px) { diff --git a/src/components/Flex/Row.tsx b/src/components/Flex/Row.tsx new file mode 100644 index 0000000..31f8240 --- /dev/null +++ b/src/components/Flex/Row.tsx @@ -0,0 +1,14 @@ +import styles from "./styles.module.scss" + +type RowProps = { + children: React.ReactNode + alignItems?: "center" +} + +export const Row = ({ children, alignItems }: RowProps) => { + return ( + <div className={styles.row} style={{ alignItems: alignItems }}> + {children} + </div> + ) +} \ No newline at end of file diff --git a/src/components/Flex/styles.module.scss b/src/components/Flex/styles.module.scss index a4e4b2d..9a2d6f0 100644 --- a/src/components/Flex/styles.module.scss +++ b/src/components/Flex/styles.module.scss @@ -1,5 +1,12 @@ +.row { + display: flex; + flex-wrap: wrap; + gap: 80px; +} + .col { - width: calc(50% - 40px); + flex: 1 1 0; + width: 0; } @media screen and (max-width: 576px) { diff --git a/src/components/HorizontalRule/HorizontalRule.stories.tsx b/src/components/HorizontalRule/HorizontalRule.stories.tsx new file mode 100644 index 0000000..0ce8c05 --- /dev/null +++ b/src/components/HorizontalRule/HorizontalRule.stories.tsx @@ -0,0 +1,13 @@ +import { Meta, StoryObj } from '@storybook/react' +import { HR } from './HorizontalRule' + +const meta: Meta<typeof HR> = { + component: HR, +} + +type Story = StoryObj<typeof HR>; +export default meta + +export const Default: Story = { + args: {}, +} \ No newline at end of file diff --git a/src/components/HorizontalRule/HorizontalRule.tsx b/src/components/HorizontalRule/HorizontalRule.tsx new file mode 100644 index 0000000..dd442c4 --- /dev/null +++ b/src/components/HorizontalRule/HorizontalRule.tsx @@ -0,0 +1,13 @@ +import styles from "./styles.module.scss" +import Image from "next/image" +import cross from "./cross.svg" + +export const HR = () => { + return ( + <div className={styles.container}> + <div className={styles.line}></div> + <Image src={cross} alt={"Cross"} className={styles.cross} /> + <div className={styles.line}></div> + </div> + ) +} \ No newline at end of file diff --git a/src/components/HorizontalRule/cross.svg b/src/components/HorizontalRule/cross.svg new file mode 100644 index 0000000..e2be0a0 --- /dev/null +++ b/src/components/HorizontalRule/cross.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="40" + height="70" + viewBox="0 0 10.583333 18.520834" + version="1.1" + id="svg5" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs2" /> + <g + id="layer1"> + <rect + style="fill:#426156FF;stroke-width:0.473399" + id="rect846" + width="0.80836952" + height="16.864483" + x="5.1093903" + y="0.83949941" /> + <rect + style="fill:#426156FF;stroke-width:0.454843" + id="rect848" + width="10" + height="0.7728833" + x="0.35068181" + y="4.9346447" /> + </g> +</svg> diff --git a/src/components/HorizontalRule/styles.module.scss b/src/components/HorizontalRule/styles.module.scss new file mode 100644 index 0000000..d84fc92 --- /dev/null +++ b/src/components/HorizontalRule/styles.module.scss @@ -0,0 +1,13 @@ +@import "template.scss"; + +.container { + display: flex; + padding: 10px 5%; + gap: 10px; +} + +.line { + border-bottom: 1.5px solid $base-color; + flex: 1 1 0; + height: 35px; +} diff --git a/src/components/ImageCard/ImageCard.tsx b/src/components/ImageCard/ImageCard.tsx index 7b240da..cf2771f 100644 --- a/src/components/ImageCard/ImageCard.tsx +++ b/src/components/ImageCard/ImageCard.tsx @@ -1,7 +1,8 @@ import styles from "./styles.module.scss" import { StaticImageData } from 'next/image' +import Link from 'next/link' -type ImageCardProps = { +export type ImageCardProps = { src: string | StaticImageData, title: string, href: string @@ -9,10 +10,12 @@ type ImageCardProps = { export const ImageCard = ({src, title, href}: ImageCardProps) => { return ( - <div className={styles.container} style={{backgroundImage: `url(${src})`}}> - <div className={styles.title}> - {title} + <Link href={href}> + <div className={styles.container} style={{ backgroundImage: `url(${src})` }}> + <div className={styles.title}> + {title} + </div> </div> - </div> + </Link> ) } \ No newline at end of file diff --git a/src/components/Input/Input.tsx b/src/components/Input/Input.tsx index 21eb628..bc4709e 100644 --- a/src/components/Input/Input.tsx +++ b/src/components/Input/Input.tsx @@ -4,12 +4,13 @@ type InputProps = { name: string; type: 'textarea' | 'text' | 'email' placeholder?: string + rows?: number } -export const Input = ({name, type, placeholder}: InputProps) => { +export const Input = ({name, type, placeholder, rows = 5}: InputProps) => { if (type === 'textarea') { return ( - <textarea name={name} className={styles.input} placeholder={placeholder}> + <textarea name={name} className={styles.input} placeholder={placeholder} rows={rows}> </textarea> ) diff --git a/src/components/Input/styles.module.scss b/src/components/Input/styles.module.scss index d37f683..d85aef0 100644 --- a/src/components/Input/styles.module.scss +++ b/src/components/Input/styles.module.scss @@ -13,7 +13,7 @@ @media screen and (max-width: 576px) { .input { - padding: 5px 10px; - font-size: 16px; + padding: 10px 15px; + font-size: 18px; } } \ No newline at end of file diff --git a/src/components/Margin/MarbinBottom.tsx b/src/components/Margin/MarbinBottom.tsx new file mode 100644 index 0000000..44e1bae --- /dev/null +++ b/src/components/Margin/MarbinBottom.tsx @@ -0,0 +1,3 @@ +export const MarginBottom = () => { + return <div style={{marginBottom: "70px"}}></div> +} \ No newline at end of file diff --git a/src/components/MassTable/MassTable.tsx b/src/components/MassTable/MassTable.tsx index 14d5fb4..f8b2eba 100644 --- a/src/components/MassTable/MassTable.tsx +++ b/src/components/MassTable/MassTable.tsx @@ -1,9 +1,9 @@ import { MassTableRow } from '@/components/MassTable/MassTableRow' -import { useMemo } from 'react' import styles from './styles.module.css' import { faustina } from '@/app/fonts' import { Worship } from '@/payload-types' -import { useCompactDate } from '@/hooks/useCompactDate' +import { ChurchCard } from '@/components/ChurchCard/ChurchCard' +import { church } from '@/utils/church' type MassTableProps = { location: string @@ -18,6 +18,10 @@ export const MassTable = ({ location, masses }: MassTableProps) => { {location} </h3> + <div className={styles.church}> + <ChurchCard church={church(location)} backgroundColor={"#fffff"} width={200} /> + </div> + {masses.map((mass) => ( <MassTableRow key={mass.id} diff --git a/src/components/MassTable/MassTableRow.tsx b/src/components/MassTable/MassTableRow.tsx index ca27770..6e00c6b 100644 --- a/src/components/MassTable/MassTableRow.tsx +++ b/src/components/MassTable/MassTableRow.tsx @@ -30,7 +30,7 @@ export const MassTableRow = ({ return ( <Link - href={`/worship/${id}`} + href={`/gottesdienst/${id}`} className={classNames({ [styles.cancelled]: cancelled }, styles.link)} > <div diff --git a/src/components/MassTable/styles.module.css b/src/components/MassTable/styles.module.css index 05a62ac..4a8436b 100644 --- a/src/components/MassTable/styles.module.css +++ b/src/components/MassTable/styles.module.css @@ -28,3 +28,7 @@ width: 200px; text-align: center; } + +.church { + margin-bottom: 20px; +} diff --git a/src/components/MegaMenu/MegaMenu.stories.tsx b/src/components/MegaMenu/MegaMenu.stories.tsx new file mode 100644 index 0000000..880d432 --- /dev/null +++ b/src/components/MegaMenu/MegaMenu.stories.tsx @@ -0,0 +1,157 @@ +import { Meta, StoryObj } from '@storybook/react' +import { MegaMenu } from './MegaMenu' + +const meta: Meta<typeof MegaMenu> = { + component: MegaMenu, +} + +type Story = StoryObj<typeof MegaMenu>; +export default meta + +export const TwoColumns: Story = { + args: { + bibleText: "Ich will den HERRN loben allezeit; sein Lob soll immerdar in meinem Munde sein. Meine Seele soll sich rühmen des HERRN, dass es die Elenden hören und sich freuen.", + bibleBook: "Psalm 34 2,3", + groups: [ + { + title: "Sakramenten", + items: [ + { + title: "Taufe", + description: "Neues Leben in Christus", + href: "https://" + }, + { + title: "Eucharistie", + description: "Gemeinschaft durch Brot und Wein", + href: "https://" + }, + { + title: "Firmung", + description: "Stärkung im Heiligen Geist", + href: "https://" + }, + { + title: "Ehe", + description: "Bund in Liebe, Treue", + href: "https://" + }, + { + title: "Beichte", + description: "Sündenbekenntnis, Vergebung und Neuanfang mit Gottes Gnade", + href: "https://" + }, + { + title: "Krankensalbung", + description: "Stärkung und Gottes Beistand", + href: "https://" + } + ] + }, + { + title: "Gebet", + items: [ + { + title: "Gottesdienste", + description: "Begegnung mit Gott", + href: "https://" + }, + { + title: "Rosenkranz", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Anbetung", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Lobpreis", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + } + ] + }, +} + +export const ThreeColumns = { + args: { + bibleText: "„Denn wo zwei oder drei in meinem Namen versammelt sind, da bin ich mitten unter ihnen.“", + bibleBook: "Jacc 45", + groups: [ + { + title: "Gemeinden", + items: [ + { + title: "St. Richard", + description: "Mehr informationen", + href: "https://" + }, + { + title: "St. Christophorus", + description: "Mehr informationen", + href: "https://" + }, + { + title: "St. Clara", + description: "Mehr informationen", + href: "https://" + }, + ] + }, + { + title: "Gruppen", + items: [ + { + title: "Kathoccino", + description: "Begegnung mit Gott", + href: "https://" + }, + { + title: "Credo & Agape", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Mädchengruppe", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Alphakurs", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + }, + { + title: "Aktivitaten", + items: [ + { + title: "Kochen", + description: "Begegnung mit Gott", + href: "https://", + }, + { + title: "Lernen", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Wandern", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Singen", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + } + ] + } +} \ No newline at end of file diff --git a/src/components/MegaMenu/MegaMenu.tsx b/src/components/MegaMenu/MegaMenu.tsx new file mode 100644 index 0000000..3eba282 --- /dev/null +++ b/src/components/MegaMenu/MegaMenu.tsx @@ -0,0 +1,64 @@ +import styles from "./styles.module.scss" +import { faustina } from '@/app/fonts' +import Link from 'next/link' + +type MegaMenuProps = { + bibleText: string, + bibleBook: string, + groups: ItemGroupProps[], + onClick?: () => void +} + +type ItemProps = { + title: string; + description: string + href: string +} + +type ItemGroupProps = { + title: string, + items: ItemProps[] +} + +const Item = ({href, title, description}: ItemProps) => { + return ( + <Link href={href} className={styles.item}> + <div className={styles.itemIcon}> + </div> + <div> + <div className={styles.itemTitle}> + {title} + </div> + <div className={styles.itemDescription}> + {description} + </div> + </div> + </Link> + ) +} + +const ItemGroup = ({title, items}: ItemGroupProps) => { + return ( + <div className={styles.itemGroup}> + <div className={styles.groupTitle}>{title}</div> + {items.map(item => <Item key={item.title} title={item.title} href={item.href} description={item.description} />)} + </div> + ) +} + +export const MegaMenu = ({ bibleText, bibleBook, groups, onClick }: MegaMenuProps) => { + return ( + <div className={styles.menu} onClick={onClick}> + <div className={styles.bibleText}> + <div className={faustina.className}> + {bibleText} + </div> + <div className={styles.book}> + {bibleBook} + </div> + </div> + + {groups.map(group => <ItemGroup key={group.title} title={group.title} items={group.items} />)} + </div> + ) +} \ No newline at end of file diff --git a/src/components/MegaMenu/styles.module.scss b/src/components/MegaMenu/styles.module.scss new file mode 100644 index 0000000..2b6ce3a --- /dev/null +++ b/src/components/MegaMenu/styles.module.scss @@ -0,0 +1,71 @@ +@import "template.scss"; + +$width: 220px; + +.menu { + background-color: $shade3; + display: inline-flex; + gap: 20px; +} + +.bibleText { + background-color: $base-color; + color: $shade3; + width: 200px; + font-size: 24px; + padding: 30px; + display: flex; + flex-direction: column; + justify-content: flex-end; +} + +.book { + text-align: right; + font-size: 14px; +} + +.itemIcon { + height: 50px; + width: 50px; + flex-shrink: 0; + border-radius: 13px; + border: 1px solid $base-color; + box-shadow: 3px 7px 26px -5px rgba(0, 0, 0, 0.15); + transition: background-color 0.2s; +} + +.itemGroup { + padding: 40px; + width: $width; +} + +.groupTitle { + font-size: 22px; + font-weight: bold; + margin-bottom: 10px; +} + +.item { + color: inherit; + text-decoration: none; + display: flex; + gap: 10px; + align-items: center; + margin: 25px 0; + cursor: pointer; +} + +.item:hover .itemIcon { + background-color: $base-color; +} + +.itemTitle { + font-size: 18px; + line-height: 120%; +} + +.itemDescription { + font-size: 16px; + font-weight: 300; + line-height: 95%; +} \ No newline at end of file diff --git a/src/components/Menu/Menu.tsx b/src/components/Menu/Menu.tsx index c8aac89..0c3c0ac 100644 --- a/src/components/Menu/Menu.tsx +++ b/src/components/Menu/Menu.tsx @@ -1,40 +1,220 @@ +"use client" + import styles from './styles.module.scss' import MenuIcon from './menu.svg' import Image from 'next/image' import classNames from 'classnames' +import { useState } from 'react' +import { MegaMenu } from '@/components/MegaMenu/MegaMenu' export const Menu = () => { - return ( - <nav className={classNames(styles.nav)}> - <div className={styles.navMobile}> - <Image src={MenuIcon} width={25} height={25} alt={'Menu'} /> - </div> - <div className={styles.itemsLeft}> - <a className={styles.menuLink} href={'/'}> - Home - </a> - <a className={styles.menuLink} href={''}> - Gemeinschaft finden - </a> - <a className={styles.menuLink} href={''}> - Glauben leben - </a> - <a className={styles.menuLink} href={''}> - Kontakt - </a> - </div> + const [displayMenu2, setDisplayMenu2] = useState(false); + const [displayMenu1, setDisplayMenu1] = useState(false); - <div className={styles.itemsRight}> - <div> - <a className={styles.menuLink} href={''}> - Mithelfen + + const displayFirstMenu = () => { + setDisplayMenu1(true); + setDisplayMenu2(false); + } + + const displaySecondMenu = () => { + setDisplayMenu2(true) + setDisplayMenu1(false) + } + + const displayNothing = () => { + setDisplayMenu1(false); + setDisplayMenu2(false); + } + + return ( + <> + <nav className={classNames(styles.nav)}> + <div className={styles.navMobile}> + <Image src={MenuIcon} width={25} height={25} alt={'Menu'} /> + </div> + <div className={styles.itemsLeft}> + <a className={styles.menuLink} href={'/'} onMouseEnter={displayNothing}> + Home + </a> + <a className={styles.menuLink} href={''} onMouseEnter={displayFirstMenu}> + Gemeinschaft finden + </a> + <a className={styles.menuLink} href={''} onMouseEnter={displaySecondMenu}> + Glauben leben + </a> + <a className={styles.menuLink} href={''} onMouseEnter={displayNothing}> + Kontakt </a> </div> - <div> - <button className={styles.button}>Neu hier?</button> + + <div className={styles.itemsRight}> + <div> + <a className={styles.menuLink} href={''}> + Mithelfen + </a> + </div> + <div> + <button className={styles.button}>Neu hier?</button> + </div> </div> + </nav> + <div + className={styles.megaMenu} + style={{ display: displayMenu2 ? 'block' : 'none', opacity: displayMenu2 ? 1 : 0 }} + onMouseLeave={() => setDisplayMenu2(false)} + > + <MegaMenu + bibleText={"Ich will den HERRN loben allezeit; sein Lob soll immerdar in meinem Munde sein. Meine Seele soll sich rühmen des HERRN, dass es die Elenden hören und sich freuen."} + bibleBook={"Psalm 34 2,3"} + onClick={() => setDisplayMenu2(false)} + groups={[ + { + title: "Sakramenten", + items: [ + { + title: "Taufe", + description: "Neues Leben in Christus", + href: "https://" + }, + { + title: "Eucharistie", + description: "Gemeinschaft durch Brot und Wein", + href: "https://" + }, + { + title: "Firmung", + description: "Stärkung im Heiligen Geist", + href: "https://" + }, + { + title: "Ehe", + description: "Bund in Liebe, Treue", + href: "https://" + }, + { + title: "Beichte", + description: "Sündenbekenntnis, Vergebung und Neuanfang mit Gottes Gnade", + href: "https://" + }, + { + title: "Krankensalbung", + description: "Stärkung und Gottes Beistand", + href: "https://" + } + ] + }, + { + title: "Gebet", + items: [ + { + title: "Gottesdienste", + description: "Begegnung mit Gott", + href: "https://" + }, + { + title: "Rosenkranz", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Anbetung", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Lobpreis", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + } + ]} /> </div> - </nav> + <div + className={styles.megaMenu} + style={{ display: displayMenu1 ? 'block' : 'none', opacity: displayMenu1 ? 1 : 0 }} + onMouseLeave={() => setDisplayMenu1(false)} + > + <MegaMenu + bibleText={"„Denn wo zwei oder drei in meinem Namen versammelt sind, da bin ich mitten unter ihnen.“"} + bibleBook={"Matt 18-2"} + onClick={() => setDisplayMenu1(false)} + groups={[ + { + title: "Gemeinden", + items: [ + { + title: "St. Richard", + description: "Mehr informationen", + href: "/gemeinde/st-richard" + }, + { + title: "St. Christophorus", + description: "Mehr informationen", + href: "/gemeinde/st-christophorus" + }, + { + title: "St. Clara", + description: "Mehr informationen", + href: "/gemeinde/st-clara" + }, + ] + }, + { + title: "Gruppen", + items: [ + { + title: "Kathoccino", + description: "Begegnung mit Gott", + href: "https://" + }, + { + title: "Credo & Agape", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Mädchengruppe", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Alphakurs", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + }, + { + title: "Aktivitaten", + items: [ + { + title: "Kochen", + description: "Begegnung mit Gott", + href: "https://" + }, + { + title: "Lernen", + description: "Gebet der Meditation", + href: "https://" + }, + { + title: "Wandern", + description: "Stille Begegnung mit Gott", + href: "https://" + }, + { + title: "Singen", + description: "Dank, Ehre und Freude", + href: "https://" + }, + ] + } + ]} /> + </div> + </> + ) } diff --git a/src/components/Menu/styles.module.scss b/src/components/Menu/styles.module.scss index e283214..41f2e1b 100644 --- a/src/components/Menu/styles.module.scss +++ b/src/components/Menu/styles.module.scss @@ -59,6 +59,14 @@ cursor: pointer; } +.megaMenu { + position: fixed; + top: 76px; + z-index: 8; + opacity: 0; + transition: opacity 0.2s ease-in-out; +} + @media screen and (max-width: 800px) { .navMobile { display: block; diff --git a/src/components/Section/Section.tsx b/src/components/Section/Section.tsx index ea5b17b..ce93a55 100644 --- a/src/components/Section/Section.tsx +++ b/src/components/Section/Section.tsx @@ -1,7 +1,7 @@ import classNames from 'classnames' import styles from "./styles.module.scss" -export type BackgroundColor = "soft" | undefined +export type BackgroundColor = "soft" | "off-white" | undefined type SectionProps = { backgroundColor?: BackgroundColor @@ -12,7 +12,8 @@ export const Section = ({ children, backgroundColor }: SectionProps) => { return ( <section className={classNames({ [styles.section]: true, - [styles.shade2]: backgroundColor === "soft" + [styles.shade2]: backgroundColor === "soft", + [styles.shade3]: backgroundColor === "off-white" })}> {children} </section> diff --git a/src/components/Section/styles.module.scss b/src/components/Section/styles.module.scss index 8fc4914..eb12880 100644 --- a/src/components/Section/styles.module.scss +++ b/src/components/Section/styles.module.scss @@ -8,6 +8,10 @@ background-color: $shade2; } +.shade3 { + background-color: $shade3; +} + @media screen and (max-width: 576px) { .section { padding: 70px 0; diff --git a/src/components/Text/TextDiv.tsx b/src/components/Text/TextDiv.tsx new file mode 100644 index 0000000..d0dce43 --- /dev/null +++ b/src/components/Text/TextDiv.tsx @@ -0,0 +1,11 @@ +type TextProps = { + text: string +} + +export const TextDiv = ({text}: TextProps) => { + return ( + <div style={{whiteSpace: 'preserve'}}> + {text} + </div> + ) +} \ No newline at end of file diff --git a/src/components/Title/Title.stories.tsx b/src/components/Title/Title.stories.tsx index c9dce00..536ce6f 100644 --- a/src/components/Title/Title.stories.tsx +++ b/src/components/Title/Title.stories.tsx @@ -14,6 +14,20 @@ export const Default: Story = { }, } +export const WithSubtitle: Story = { + args: { + title: 'Wahlfahrt Lourdes', + subtitle: "Sei dabei!" + }, +} + +export const Contrast: Story = { + args: { + title: 'Aktuelles', + color: "contrast" + }, +} + export const BigTitle: Story = { args: { title: 'Veranstaltungen', diff --git a/src/components/Title/Title.tsx b/src/components/Title/Title.tsx index 2a58ce6..0c6de00 100644 --- a/src/components/Title/Title.tsx +++ b/src/components/Title/Title.tsx @@ -4,21 +4,43 @@ import { faustina } from '@/app/fonts' type TitleProps = { title: string; + subtitle?: string; align?: 'left' | 'center'; - size?: 'xl' | 'lg' | 'md'; + size?: 'xl' | 'lg' | 'md' | "sm"; fontStyle?: 'serif' | 'sans-serif' + color?: "base" | "contrast" | "white" } -export const Title = ({title, align = "left", size = "lg", fontStyle = "serif"}: TitleProps) => { +export const Title = ({title, subtitle, align = "left", size = "lg", fontStyle = "serif", color = "base"}: TitleProps) => { return ( - <h2 className={classNames({ - [styles.title]: true, - [styles.extraLarge]: size === "xl", - [styles.large]: size === "lg", - [styles.medium]: size === "md", - [styles.left]: align === "left", - [styles.center]: align === "center", - [faustina.className]: fontStyle == "serif", - })}>{title}</h2> + <> + <h2 className={classNames({ + [styles.title]: true, + [styles.base]: color === "base", + [styles.contrast]: color === "contrast", + [styles.white]: color === "white", + [styles.extraLarge]: size === "xl", + [styles.large]: size === "lg", + [styles.medium]: size === "md", + [styles.small]: size === "sm", + [styles.left]: align === "left", + [styles.center]: align === "center", + [faustina.className]: fontStyle == "serif", + })}>{title}</h2> + {subtitle && + <div className={classNames({ + [styles.subtitle]: true, + [styles.base]: color === "contrast", + [styles.contrast]: color === "base", + [styles.white]: color === "white", + [styles.small]: true, + [styles.left]: align === "left", + [styles.center]: align === "center", + [faustina.className]: fontStyle == "sans-serif" + })}> + {subtitle} + </div> + } + </> ) } \ No newline at end of file diff --git a/src/components/Title/styles.module.scss b/src/components/Title/styles.module.scss index fd84a2f..7c8bd5a 100644 --- a/src/components/Title/styles.module.scss +++ b/src/components/Title/styles.module.scss @@ -1,8 +1,26 @@ @import "template.scss"; .title { - color: $base-color; margin-top: 20px; + margin-bottom: 0.5em; + line-height: 1em; +} + +.subtitle { + position: relative; + top: -30px; +} + +.base { + color: $base-color; +} + +.contrast { + color: $contrast-color; +} + +.white { + color: #ffffff; } .extraLarge { @@ -20,6 +38,12 @@ font-weight: 700; } +.small { + font-size: 25px; + font-weight: 700; + margin: 10px 0 5px 0; +} + .left { text-align: left; } @@ -40,4 +64,8 @@ .medium { font-size: 24px; } + + .small { + font-size: 20px; + } } \ No newline at end of file diff --git a/src/compositions/ChurchWithContact/ChurchWithContact.tsx b/src/compositions/ChurchWithContact/ChurchWithContact.tsx new file mode 100644 index 0000000..385a88e --- /dev/null +++ b/src/compositions/ChurchWithContact/ChurchWithContact.tsx @@ -0,0 +1,31 @@ +import { Col } from '@/components/Flex/Col' +import styles from '@/pageComponents/Parish/styles.module.scss' +import { ChurchCard } from '@/components/ChurchCard/ChurchCard' +import { Title } from '@/components/Title/Title' +import { TextDiv } from '@/components/Text/TextDiv' +import { Row } from '@/components/Flex/Row' +import { church as transform } from '@/utils/church' + +type ChurchWithContactProps = { + church: string, + contact: string +} + +export const ChurchWithContact = ({church, contact}: ChurchWithContactProps) => { + const c = transform(church) + + + return ( + <Row alignItems={"center"}> + <Col> + <div className={styles.churchIcon}> + <ChurchCard church={c} backgroundColor={'#E0DAE5'} /> + </div> + </Col> + <Col> + <Title title={"Kontakt"} size={"md"} color={"contrast"} /> + <TextDiv text={contact} /> + </Col> + </Row> + ) +} \ No newline at end of file diff --git a/src/compositions/ContactSection/ContactSection.tsx b/src/compositions/ContactSection/ContactSection.tsx index f1ff111..72de1f4 100644 --- a/src/compositions/ContactSection/ContactSection.tsx +++ b/src/compositions/ContactSection/ContactSection.tsx @@ -2,29 +2,30 @@ import { Section } from '@/components/Section/Section' import { Container } from '@/components/Container/Container' import { ContactForm } from '@/compositions/ContactForm/ContactForm' import { Title } from '@/components/Title/Title' +import { Col } from '@/components/Flex/Col' +import { Row } from '@/components/Flex/Row' type Col50Props = { children?: React.ReactNode } -const Col50 = ({children}: Col50Props) => { - return <div>{children}</div> -} export const ContactSection = () => { return ( <Section> - <Container flex={true}> - <Col50> - <Title title="Kontakt" size={"lg"} /> - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque lacinia efficitur sapien, vel molestie ligula fermentum rutrum. Maecenas vel mattis leo. Donec dictum convallis mi ac fermentum. Praesent imperdiet dictum arcu, vel lacinia est accumsan ut. Mauris ultrices leo ut mi eleifend, at porttitor mauris condimentum. Quisque a viverra tellus. Cras eu euismod augue. Morbi tristique a nisi vitae tincidunt. Nullam eget dignissim risus, ut tempor nulla. Proin suscipit mi sed leo posuere scelerisque. Sed vel semper ligula. - </p> + <Container> + <Row> + <Col> + <Title title="Kontakt" size={"lg"} /> + <p> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque lacinia efficitur sapien, vel molestie ligula fermentum rutrum. Maecenas vel mattis leo. Donec dictum convallis mi ac fermentum. Praesent imperdiet dictum arcu, vel lacinia est accumsan ut. Mauris ultrices leo ut mi eleifend, at porttitor mauris condimentum. Quisque a viverra tellus. Cras eu euismod augue. Morbi tristique a nisi vitae tincidunt. Nullam eget dignissim risus, ut tempor nulla. Proin suscipit mi sed leo posuere scelerisque. Sed vel semper ligula. + </p> - </Col50> - <Col50> - <ContactForm /> - </Col50> + </Col> + <Col> + <ContactForm /> + </Col> + </Row> </Container> </Section> ) diff --git a/src/compositions/Events/Events.stories.tsx b/src/compositions/Events/Events.stories.tsx new file mode 100644 index 0000000..0abef50 --- /dev/null +++ b/src/compositions/Events/Events.stories.tsx @@ -0,0 +1,66 @@ +import { Meta, StoryObj } from '@storybook/react' +import { Events } from './Events' + +const meta: Meta<typeof Events> = { + component: Events, +} + +type Story = StoryObj<typeof Events>; +export default meta + +export const Default: Story = { + args: { + events: [ + { + title: "Event 1", + date: "2024-01-06T15:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 2", + date: "2024-01-08T19:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 3", + date: "2024-01-09T12:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 4", + date: "2024-01-12T10:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 5", + date: "2024-01-23T09:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 6", + date: "2024-02-01T14:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + { + title: "Event 7", + date: "2024-03-12T18:00:00+01:00", + location: "St Richard", + cancelled: false, + href: "https://some_url" + }, + ], + n: 3 + }, +} \ No newline at end of file diff --git a/src/compositions/Events/Events.tsx b/src/compositions/Events/Events.tsx new file mode 100644 index 0000000..76a980c --- /dev/null +++ b/src/compositions/Events/Events.tsx @@ -0,0 +1,70 @@ +"use client" +import { EventRow, EventRowProps } from '@/components/EventRow/EventRow' +import { useMemo, useState } from 'react' +import styles from "./events.module.scss" + +type EventsProps = { + /** + * All the events + */ + events: EventRowProps[], + + /** + * Display `n` number of events per + * page + */ + n: number, +} + +export const Events = ({ events, n }: EventsProps) => { + + const [page, setPage] = useState<number>(0) + const eventsPerPage = useMemo(() => { + return events.slice(n * page, n * (page+1)) + }, [events, page, n]) + + return ( + <> + { + eventsPerPage.map(event => + <EventRow + key={event.href} + date={event.date} + title={event.title} + href={event.href} + location={event.location} + cancelled={event.cancelled} + />, + )} + + <div className={styles.buttons}> + <button + type={"button"} + disabled={page === 0} + className={styles.button} + onClick={() => setPage(page - 1)} + > + <svg xmlns="http://www.w3.org/2000/svg" fill="#000000" height="30px" + width="30px" version="1.1" id="Layer_1" viewBox="0 0 330 330"> + <path id="XMLID_6_" + d="M165,0C74.019,0,0,74.019,0,165s74.019,165,165,165s165-74.019,165-165S255.981,0,165,0z M205.606,234.394 c5.858,5.857,5.858,15.355,0,21.213C202.678,258.535,198.839,260,195,260s-7.678-1.464-10.606-4.394l-80-79.998 c-2.813-2.813-4.394-6.628-4.394-10.606c0-3.978,1.58-7.794,4.394-10.607l80-80.002c5.857-5.858,15.355-5.858,21.213,0 c5.858,5.857,5.858,15.355,0,21.213l-69.393,69.396L205.606,234.394z" /> + </svg> + </button> + <button + type={"button"} + disabled={n * (page + 1) >= events.length} onClick={() => setPage(page + 1)} + className={styles.button} + > + <svg fill="#000000" height="30px" width="30px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 330 330"> + <path id="XMLID_2_" d="M165,0C74.019,0,0,74.019,0,165s74.019,165,165,165s165-74.019,165-165S255.981,0,165,0z M225.606,175.605 + l-80,80.002C142.678,258.535,138.839,260,135,260s-7.678-1.464-10.606-4.394c-5.858-5.857-5.858-15.355,0-21.213l69.393-69.396 + l-69.393-69.392c-5.858-5.857-5.858-15.355,0-21.213c5.857-5.858,15.355-5.858,21.213,0l80,79.998 + c2.814,2.813,4.394,6.628,4.394,10.606C230,168.976,228.42,172.792,225.606,175.605z" /> + </svg> + </button> + </div> + + </> + ) +} \ No newline at end of file diff --git a/src/compositions/Events/events.module.scss b/src/compositions/Events/events.module.scss new file mode 100644 index 0000000..dd7600c --- /dev/null +++ b/src/compositions/Events/events.module.scss @@ -0,0 +1,28 @@ +@import "template.scss"; + +.button { + border: none; + background: none; + cursor: pointer; +} + +.button svg { + fill: $shade2; +} + +.button:hover svg { + fill: $base-color; +} + +.button:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.button:disabled:hover svg { + fill: $shade2; +} + +.buttons { + padding-left: 130px; +} \ No newline at end of file diff --git a/src/compositions/Footer/Footer.tsx b/src/compositions/Footer/Footer.tsx index 84d96c7..ca40c12 100644 --- a/src/compositions/Footer/Footer.tsx +++ b/src/compositions/Footer/Footer.tsx @@ -2,29 +2,38 @@ import { Section } from '@/components/Section/Section' import { Container } from '@/components/Container/Container' import { Logo } from '@/components/Logo/Logo' import styles from "./styles.module.scss" +import { Row } from '@/components/Flex/Row' +import { Col } from '@/components/Flex/Col' export const Footer = () => { return ( <Section backgroundColor="soft"> - <Container flex={true}> - <Logo - color={"#ffffff"} - textColor={"#426156"} - withText={true} - height={120} - /> - <div className={styles.container}> - <p> - Briesestraße 17 <br/> - 12053 Berlin-Neukölln - </p> + <Container> + <Row> + <Col> + <Logo + color={"#ffffff"} + textColor={"#426156"} + withText={true} + height={120} + /> + </Col> - <p> - T: 030-6889120 <br/> - E: pfarrer@dreikoenige.berlin - </p> - </div> + <Col> + <div className={styles.container}> + <p> + Briesestraße 17 <br /> + 12053 Berlin-Neukölln + </p> + + <p> + T: 030-6889120 <br /> + E: pfarrer@dreikoenige.berlin + </p> + </div> + </Col> + </Row> </Container> </Section> ); diff --git a/src/compositions/ImageCardSlider/ImageCardSlider.tsx b/src/compositions/ImageCardSlider/ImageCardSlider.tsx index 2f087ab..02b714f 100644 --- a/src/compositions/ImageCardSlider/ImageCardSlider.tsx +++ b/src/compositions/ImageCardSlider/ImageCardSlider.tsx @@ -3,7 +3,7 @@ import styles from "./styles.module.scss" import { StaticImageData } from 'next/image' import { Arrow } from '@/components/Arrow/Arrow' -type Slide = { +export type Slide = { id: string, src: string | StaticImageData, title: string, diff --git a/src/compositions/ImageWithText/ImageWithText.stories.tsx b/src/compositions/ImageWithText/ImageWithText.stories.tsx index 200f764..c0df330 100644 --- a/src/compositions/ImageWithText/ImageWithText.stories.tsx +++ b/src/compositions/ImageWithText/ImageWithText.stories.tsx @@ -1,6 +1,6 @@ import { Meta, StoryObj } from '@storybook/react' -import forest from "./forest.jpeg" -import chris from "./christophorus.jpeg" +import forest from "../../assets/forest.jpeg" +import chris from "../../assets/christophorus.jpeg" import { ImageWithText } from './ImageWithText' import { Button } from '@/components/Button/Button' diff --git a/src/compositions/ImageWithText/ImageWithText.tsx b/src/compositions/ImageWithText/ImageWithText.tsx index 8383dfb..6567cbc 100644 --- a/src/compositions/ImageWithText/ImageWithText.tsx +++ b/src/compositions/ImageWithText/ImageWithText.tsx @@ -1,10 +1,10 @@ import { BackgroundColor, Section } from '@/components/Section/Section' import { Title } from '@/components/Title/Title' -import { Button } from '@/components/Button/Button' import { Container } from '@/components/Container/Container' import Image, { StaticImageData } from 'next/image' import styles from "./styles.module.scss" import classNames from 'classnames' +import { Row } from '@/components/Flex/Row' type ImageWithTextProps = { backgroundColor?: BackgroundColor, @@ -15,27 +15,30 @@ type ImageWithTextProps = { } export const ImageWithText = ({backgroundColor, title, image, text, link}: ImageWithTextProps) => { + console.log(image) return ( <Section backgroundColor={backgroundColor}> - <Container flex={true}> - <div className={classNames(styles.col, styles.imageCol)}> - <Image className={styles.image} src={image} objectFit={"cover"} alt={""} /> - </div> - <div className={styles.col}> - <Title title={title} size={"lg"} /> - - <Image className={styles.imageMobile} src={image} objectFit={"cover"} alt={""} /> - - <div> - {text} + <Container> + <Row alignItems={"center"}> + <div className={classNames(styles.col, styles.imageCol)}> + <Image className={styles.image} width={800} height={800} src={image} objectFit={"cover"} alt={""} /> </div> + <div className={styles.col}> + <Title title={title} size={"lg"} /> - {link && - <div className={styles.right}> - {link} + <Image className={styles.imageMobile} width={500} height={500} src={image} objectFit={"cover"} alt={""} /> + + <div> + {text} </div> - } - </div> + + {link && + <div className={styles.right}> + {link} + </div> + } + </div> + </Row> </Container> </Section> ) diff --git a/src/fetch/blog.ts b/src/fetch/blog.ts new file mode 100644 index 0000000..819a0b5 --- /dev/null +++ b/src/fetch/blog.ts @@ -0,0 +1,21 @@ +import { Blog } from '@/payload-types' +import { PaginatedDocs } from 'payload' +import { stringify } from 'qs-esm' + +export const fetchBlog = async (): Promise<PaginatedDocs<Blog> | undefined> => { + const stringifiedQuery = stringify( + { + sort: "-date", + select: { + title: true, + date: true, + photo: true + } + }, + { addQueryPrefix: true }, + ) + + const resp = await fetch(`http://localhost:3000/api/blog`); + if (!resp.ok) return undefined; + return resp.json(); +} \ No newline at end of file diff --git a/src/fetch/events.ts b/src/fetch/events.ts new file mode 100644 index 0000000..e883c24 --- /dev/null +++ b/src/fetch/events.ts @@ -0,0 +1,46 @@ +import { stringify } from 'qs-esm' +import { PaginatedDocs } from 'payload' +import { Event } from '@/payload-types' + +/** + * Fetch a list of events + * + */ +export async function fetchEvents(parishId: string | undefined): Promise<PaginatedDocs<Event> | undefined> { + const date = new Date() + + const query: any = { + and: [ + { + date: { + greater_than_equal: date.toISOString(), + }, + } + ], + } + + if (parishId) { + query.and.push({ + "parish": { + equals: parishId + }, + }) + } + + const stringifiedQuery = stringify( + { + sort: "date", + where: query, + select: { + location: true, + date: true, + title: true + } + }, + { addQueryPrefix: true }, + ) + + const response = await fetch(`http://localhost:3000/api/event${stringifiedQuery}`) + if (!response.ok) return undefined + return response.json() +} diff --git a/src/fetch/worship.ts b/src/fetch/worship.ts new file mode 100644 index 0000000..ede9a0d --- /dev/null +++ b/src/fetch/worship.ts @@ -0,0 +1,45 @@ +import { stringify } from 'qs-esm' +import { PaginatedDocs } from 'payload' +import { Worship } from '@/payload-types' + +export const fetchWorship = async (locations?: string[]): Promise<PaginatedDocs<Worship> | undefined> => { + const date = new Date(); + date.setHours(0, 0, 0, 0); + + const query: any = { + and: [ + { + date: { + greater_than_equal: date.toISOString(), + }, + } + ], + } + + if (locations ) { + query.and.push({ + location: { + in: locations + } + }) + } + + const stringifiedQuery = stringify( + { + sort: "date", + where: query, + select: { + type: true, + date: true, + cancelled: true, + location: true + }, + limit: 15 + }, + { addQueryPrefix: true }, + ) + + const response = await fetch(`http://localhost:3000/api/worship${stringifiedQuery}`) + if (!response.ok) return undefined + return response.json() +} \ No newline at end of file diff --git a/src/hooks/useLiturgyCalendarTitle.ts b/src/hooks/liturgicalDayName.ts similarity index 76% rename from src/hooks/useLiturgyCalendarTitle.ts rename to src/hooks/liturgicalDayName.ts index af4d51b..5032d86 100644 --- a/src/hooks/useLiturgyCalendarTitle.ts +++ b/src/hooks/liturgicalDayName.ts @@ -4,7 +4,7 @@ import { calendar } from '@/hooks/calendars' * Return liturgical name of the date * e.G. "2024-12-25" => Christmas */ -export const useLiturgyCalendarTitle = (date: string) => { +export const liturgicalDayName = (date: string) => { const day = calendar[date.substring(0, 10)] return day.name } diff --git a/src/pageComponents/Home/Home.stories.tsx b/src/pageComponents/Home/Home.stories.tsx new file mode 100644 index 0000000..e15f6aa --- /dev/null +++ b/src/pageComponents/Home/Home.stories.tsx @@ -0,0 +1,24 @@ +import { Meta, StoryObj } from '@storybook/react' +import { Home } from './Home' +import { Menu } from '@/components/Menu/Menu' +import { Footer } from '@/compositions/Footer/Footer' + +const meta: Meta<typeof Home> = { + component: Home, + decorators: [ + (Story) => ( + <> + <Menu/> + <Story /> + <Footer /> + </> + ) + ] +} + +type Story = StoryObj<typeof Home>; +export default meta + +export const Default: Story = { + args: {}, +} \ No newline at end of file diff --git a/src/pageComponents/Home/Home.tsx b/src/pageComponents/Home/Home.tsx new file mode 100644 index 0000000..f6377e7 --- /dev/null +++ b/src/pageComponents/Home/Home.tsx @@ -0,0 +1,72 @@ +import { Banner } from '@/components/Banner/Banner' +import { Container } from '@/components/Container/Container' +import { Section } from '@/components/Section/Section' +import { MainText } from '@/components/MainText/MainText' +import { Title } from '@/components/Title/Title' +import { ImageCardSlider } from '@/compositions/ImageCardSlider/ImageCardSlider' +import monst from '@/app/mons.jpg' +import candle from '@/app/candle.png' +import bread from '@/app/bread.jpg' +import forest from "../../assets/forest.jpeg" +import { ContentWithSlider } from '@/compositions/ContentWithSlider/ContentWithSlider' +import { ContactSection } from '@/compositions/ContactSection/ContactSection' +import { Events } from '@/compositions/Events/Events' +import { ImageWithText } from '@/compositions/ImageWithText/ImageWithText' + +export const Home = () => { + return ( + <> + <Banner/> + + <Container> + <Section> + <MainText text={"Wir begrüßen Sie herzlich in unserer Pfarrei Hl. Drei Könige und im bunten Neukölln mit einer Vielfalt von Kulturen und Nationalitäten. \n" + + "Wie die drei Weisen aus dem Morgenland wollen wir uns immer wieder neu auf den Weg machen."} /> + </Section> + + <Section> + <Title title={"Aktuelles"} /> + <ImageCardSlider slides={[ + { + id: "id1", + src: monst, + title: "Anbetung in Oktober", + href: "https://somelink" + }, + { + id: "id2", + src: candle, + title: "Allerseelen", + href: "https://somelink" + }, + { + id: "id3", + src: bread, + title: "Erntedankfest", + href: "https://somelink" + } + ]} /> + </Section> + </Container> + + <ContentWithSlider slider={<> + <Title title={"Akutelle Highlights"} size={"md"} fontStyle={"sans-serif"} color={"white"} /> + </>}> + <Container position={"right"}> + <Section> + <Title title={"Veranstaltungen"} /> + </Section> + </Container> + </ContentWithSlider> + + <ImageWithText + image={forest} + title={"Über uns"} + text={"yolo"} + backgroundColor={"soft"} + /> + + <ContactSection /> + </> + ) +} \ No newline at end of file diff --git a/src/pageComponents/Parish/Parish.stories.tsx b/src/pageComponents/Parish/Parish.stories.tsx new file mode 100644 index 0000000..1d557c2 --- /dev/null +++ b/src/pageComponents/Parish/Parish.stories.tsx @@ -0,0 +1,65 @@ +import { Meta, StoryObj } from '@storybook/react' +import chris from "../../assets/christophorus.jpeg" +import { Parish } from './Parish' +import { Menu } from '@/components/Menu/Menu' +import { Footer } from '@/compositions/Footer/Footer' + +const meta: Meta<typeof Parish> = { + component: Parish, + decorators: [ + (Story) => ( + <> + <Menu/> + <Story /> + <Footer /> + </> + ) + ] +} + +type Story = StoryObj<typeof Parish>; +export default meta + +export const Default: Story = { + args: { + title: "St. Christophorus", + image: chris, + description: "Die St. Christophorus Kirche in Berlin-Neukölln ist ein bedeutendes Beispiel für modernen Kirchenbau in der Hauptstadt. Erbaut in den 1960er Jahren, spiegelt das Gebäude die Architektur und künstlerische Gestaltung dieser Zeit wider und zeichnet sich durch schlichte, klare Linien und einen funktionalen Stil aus. Die Kirche ist nach dem heiligen Christophorus benannt, dem Schutzpatron der Reisenden, und bietet den Gemeindemitgliedern und Besuchern einen Ort der Ruhe und Besinnung im lebhaften Stadtteil Neukölln. Neben Gottesdiensten finden hier regelmäßig kulturelle Veranstaltungen und soziale Projekte statt, die die Kirche zu einem wichtigen Treffpunkt im Kiez machen.", + history: `Am 27.Juni 1929 erschien folgende Niederschrift in der Märkischen Volkszeitung, die eine berechtigte Freude über die Nachricht von dem Bau der neuen Kirche am Reuterplatz auslöste: + +Eine neue katholische Kirche in Neukölln. + +Den eifrigen Bemühungen des hochw. Herrn Pfarrers Trawnik ist es endlich gelungen, den Plan einer neuen Kirche am schönen Reuterplatz in Neukölln zu verwirklichen. Der Krieg hatte bisher den Kirchbau verhindert, obwohl die Vorbereitungen dazu beendet waren. Die Bank, welche den Bau finanzieren wollte, durfte im Juni 1914 die Bausumme nicht hergeben, weil sie zum Kriegführen benötigt wurde. Nun endlich soll es Wahrheit werden, es wird ein stattliches Gotteshaus erstehen, und sein Turm wird himmelan weisen. + +Durch die sprunghafte Entwicklung Neuköllns hat die Gemeinde rapide an Ausdehnung gewonnen. Das rasche Wachstum der Einwohnerzahl hatte zur Folge, daß die Mietskasernen wie Pilze aus der Erde schossen. +`, + contactPersons: [ + { + title: "Seelsorgeteam", + description: `Pater Karl Hermann Lenz SAC (Pfarrvikar) +pallottis@christophorus-berlin.de +Lissy Eichert UAC +l.eichert@christophorus-berlin. +` + }, + { + title: "Pallottinische Gemeinschaft", + description: `Lissy Eichert UAC +l.eichert@christophorus-berlin.de` + }, + { + title: "Kirechenvorstand", + description: "Some contactinfo" + } + ], + contact: `Nansenstraße 4-7 +12047 Berlin + +Tel. 6 27 30 69-210 +Fax 6 27 30 69-299 +pfarramt@christophorus-berlin.de + +Bürozeiten: +Freitags 09:00 - 12:00 Uhr ` + } +}; \ No newline at end of file diff --git a/src/pageComponents/Parish/Parish.tsx b/src/pageComponents/Parish/Parish.tsx new file mode 100644 index 0000000..1043fc2 --- /dev/null +++ b/src/pageComponents/Parish/Parish.tsx @@ -0,0 +1,75 @@ +import { ImageWithText } from '@/compositions/ImageWithText/ImageWithText' +import { StaticImageData } from 'next/image' +import { Section } from '@/components/Section/Section' +import { Row } from '@/components/Flex/Row' +import { Col } from '@/components/Flex/Col' +import { Container } from '@/components/Container/Container' +import { Title } from '@/components/Title/Title' +import { TwoColumnText } from '@/components/TwoColumnText/TwoColumnText' +import { Events } from '@/compositions/Events/Events' +import { MarginBottom } from '@/components/Margin/MarbinBottom' +import { ContactPersonList } from '@/components/ContactPerson/ContactPersonList' +import { Event, Worship } from '@/payload-types' +import { transformEvents } from '@/utils/dto/events' +import { ChurchWithContact } from '@/compositions/ChurchWithContact/ChurchWithContact' +import { tranformWorship } from '@/utils/dto/worship' + +type ParishProps = { + title: string, + slug: string, + image: string | StaticImageData, + description: string, + history: string + contactPersons: { + title: string, + description: string + }[], + contact: string + events: Event[], + worship: Worship[] +} + + + +export const Parish = ({title, slug, image, description, history, contactPersons, contact, events, worship}: ParishProps) => { + + return ( + <> + <ImageWithText title={title} image={image} text={description} /> + + <Section> + <Container> + <Row> + <Col> + <Title title={"Veranstaltungen"} size={"md"}/> + <Events events={transformEvents(events)} n={4}/> + + <MarginBottom /> + + <Title title={"Gottesdienste"} size={"md"} /> + <Events events={tranformWorship(worship)} n={4}/> + </Col> + <Col> + <Title title={"Ansprechpersonen"} size={"md"} /> + + <ContactPersonList persons={contactPersons} /> + </Col> + </Row> + </Container> + </Section> + + <Section backgroundColor={"soft"}> + <Container> + <Title title={"Unsere Geschichte"} /> + <TwoColumnText text={history} /> + </Container> + </Section> + + <Section> + <Container> + <ChurchWithContact church={title} contact={contact} /> + </Container> + </Section> + </> + ) +} \ No newline at end of file diff --git a/src/pageComponents/Parish/styles.module.scss b/src/pageComponents/Parish/styles.module.scss new file mode 100644 index 0000000..1295775 --- /dev/null +++ b/src/pageComponents/Parish/styles.module.scss @@ -0,0 +1,10 @@ +.churchIcon { + display: flex; + justify-content: flex-end; +} + +@media screen and (max-width: 576px) { + .churchIcon { + justify-content: center; + } +} \ No newline at end of file diff --git a/src/payload-types.ts b/src/payload-types.ts index 2d074d1..be2d523 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -24,17 +24,42 @@ export interface Config { page: Page; users: User; media: Media; + 'payload-locked-documents': PayloadLockedDocument; 'payload-preferences': PayloadPreference; 'payload-migrations': PayloadMigration; }; + collectionsJoins: {}; + collectionsSelect: { + parish: ParishSelect<false> | ParishSelect<true>; + church: ChurchSelect<false> | ChurchSelect<true>; + worship: WorshipSelect<false> | WorshipSelect<true>; + vermeldungen: VermeldungenSelect<false> | VermeldungenSelect<true>; + blog: BlogSelect<false> | BlogSelect<true>; + tweet: TweetSelect<false> | TweetSelect<true>; + event: EventSelect<false> | EventSelect<true>; + group: GroupSelect<false> | GroupSelect<true>; + employees: EmployeesSelect<false> | EmployeesSelect<true>; + testimony: TestimonySelect<false> | TestimonySelect<true>; + page: PageSelect<false> | PageSelect<true>; + users: UsersSelect<false> | UsersSelect<true>; + media: MediaSelect<false> | MediaSelect<true>; + 'payload-locked-documents': PayloadLockedDocumentsSelect<false> | PayloadLockedDocumentsSelect<true>; + 'payload-preferences': PayloadPreferencesSelect<false> | PayloadPreferencesSelect<true>; + 'payload-migrations': PayloadMigrationsSelect<false> | PayloadMigrationsSelect<true>; + }; db: { defaultIDType: string; }; globals: {}; + globalsSelect: {}; locale: null; user: User & { collection: 'users'; }; + jobs?: { + tasks: unknown; + workflows?: unknown; + }; } export interface UserAuthOperations { forgotPassword: { @@ -64,10 +89,17 @@ export interface Parish { slug: string; churches: (string | Church)[]; employees?: (string | Employee)[] | null; - contact: string; - title: string; + contactPersons?: + | { + title: string; + description: string; + id?: string | null; + }[] + | null; description: string; - photo?: (string | null) | Media; + history: string; + contact: string; + photo: string | Media; updatedAt: string; createdAt: string; } @@ -124,8 +156,10 @@ export interface Worship { date: string; location: string | Church; type: 'MASS' | 'FAMILY' | 'WORD'; - cancelled: boolean; title?: string | null; + cancelled: boolean; + liturgicalDay?: string | null; + celebrant?: string | null; description?: string | null; updatedAt: string; createdAt: string; @@ -150,22 +184,23 @@ export interface Blog { photo?: (string | null) | Media; title: string; parish?: (string | Parish)[] | null; - isHighlight: boolean; - text: { - root: { - type: string; - children: { - type: string; - version: number; - [k: string]: unknown; - }[]; - direction: ('ltr' | 'rtl') | null; - format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | ''; - indent: number; - version: number; - }; - [k: string]: unknown; - }; + content?: + | ( + | { + quoteText: string; + id?: string | null; + blockName?: string | null; + blockType: 'Quote'; + } + | { + sliderContent: string; + content: string; + id?: string | null; + blockName?: string | null; + blockType: 'ContentWithSlider'; + } + )[] + | null; updatedAt: string; createdAt: string; } @@ -188,7 +223,8 @@ export interface Event { id: string; photo?: (string | null) | Media; title: string; - datum: string; + date: string; + location: string; parish?: (string | Parish)[] | null; group?: (string | null) | Group; shortDescription: string; @@ -301,6 +337,73 @@ export interface User { lockUntil?: string | null; password?: string | null; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents". + */ +export interface PayloadLockedDocument { + id: string; + document?: + | ({ + relationTo: 'parish'; + value: string | Parish; + } | null) + | ({ + relationTo: 'church'; + value: string | Church; + } | null) + | ({ + relationTo: 'worship'; + value: string | Worship; + } | null) + | ({ + relationTo: 'vermeldungen'; + value: string | Vermeldungen; + } | null) + | ({ + relationTo: 'blog'; + value: string | Blog; + } | null) + | ({ + relationTo: 'tweet'; + value: string | Tweet; + } | null) + | ({ + relationTo: 'event'; + value: string | Event; + } | null) + | ({ + relationTo: 'group'; + value: string | Group; + } | null) + | ({ + relationTo: 'employees'; + value: string | Employee; + } | null) + | ({ + relationTo: 'testimony'; + value: string | Testimony; + } | null) + | ({ + relationTo: 'page'; + value: string | Page; + } | null) + | ({ + relationTo: 'users'; + value: string | User; + } | null) + | ({ + relationTo: 'media'; + value: string | Media; + } | null); + globalSlug?: string | null; + user: { + relationTo: 'users'; + value: string | User; + }; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "payload-preferences". @@ -335,6 +438,261 @@ export interface PayloadMigration { updatedAt: string; createdAt: string; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "parish_select". + */ +export interface ParishSelect<T extends boolean = true> { + name?: T; + slug?: T; + churches?: T; + employees?: T; + contactPersons?: + | T + | { + title?: T; + description?: T; + id?: T; + }; + description?: T; + history?: T; + contact?: T; + photo?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "church_select". + */ +export interface ChurchSelect<T extends boolean = true> { + name?: T; + address?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "worship_select". + */ +export interface WorshipSelect<T extends boolean = true> { + date?: T; + location?: T; + type?: T; + title?: T; + cancelled?: T; + liturgicalDay?: T; + celebrant?: T; + description?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "vermeldungen_select". + */ +export interface VermeldungenSelect<T extends boolean = true> { + date?: T; + parish?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "blog_select". + */ +export interface BlogSelect<T extends boolean = true> { + photo?: T; + title?: T; + parish?: T; + content?: + | T + | { + Quote?: + | T + | { + quoteText?: T; + id?: T; + blockName?: T; + }; + ContentWithSlider?: + | T + | { + sliderContent?: T; + content?: T; + id?: T; + blockName?: T; + }; + }; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "tweet_select". + */ +export interface TweetSelect<T extends boolean = true> { + parish?: T; + text?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "event_select". + */ +export interface EventSelect<T extends boolean = true> { + photo?: T; + title?: T; + date?: T; + location?: T; + parish?: T; + group?: T; + shortDescription?: T; + description?: T; + cancelled?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "group_select". + */ +export interface GroupSelect<T extends boolean = true> { + photo?: T; + name?: T; + description?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "employees_select". + */ +export interface EmployeesSelect<T extends boolean = true> { + photo?: T; + name?: T; + occupation?: T; + email?: T; + telephone?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "testimony_select". + */ +export interface TestimonySelect<T extends boolean = true> { + testimony?: T; + name?: T; + occupation?: T; + category?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "page_select". + */ +export interface PageSelect<T extends boolean = true> { + title?: T; + slug?: T; + content?: + | T + | { + content?: + | T + | { + content?: T; + id?: T; + blockName?: T; + }; + title?: + | T + | { + title?: T; + id?: T; + blockName?: T; + }; + testimony?: + | T + | { + testimony?: T; + id?: T; + blockName?: T; + }; + }; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "users_select". + */ +export interface UsersSelect<T extends boolean = true> { + name?: T; + roles?: T; + groups?: T; + updatedAt?: T; + createdAt?: T; + email?: T; + resetPasswordToken?: T; + resetPasswordExpiration?: T; + salt?: T; + hash?: T; + loginAttempts?: T; + lockUntil?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "media_select". + */ +export interface MediaSelect<T extends boolean = true> { + alt?: T; + updatedAt?: T; + createdAt?: T; + url?: T; + thumbnailURL?: T; + filename?: T; + mimeType?: T; + filesize?: T; + width?: T; + height?: T; + focalX?: T; + focalY?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-locked-documents_select". + */ +export interface PayloadLockedDocumentsSelect<T extends boolean = true> { + document?: T; + globalSlug?: T; + user?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-preferences_select". + */ +export interface PayloadPreferencesSelect<T extends boolean = true> { + user?: T; + key?: T; + value?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "payload-migrations_select". + */ +export interface PayloadMigrationsSelect<T extends boolean = true> { + name?: T; + batch?: T; + updatedAt?: T; + createdAt?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "auth". diff --git a/src/utils/church.ts b/src/utils/church.ts new file mode 100644 index 0000000..039761c --- /dev/null +++ b/src/utils/church.ts @@ -0,0 +1,28 @@ +/** + * Convert string to a church + * @param s + */ +export const church = (s: string) : "anna" | "christophorus" | "richard" | "eduard" | "clara" => { + + if (s.toLowerCase().includes("anna")) { + return "anna" + } + + if (s.toLowerCase().includes("christophorus")) { + return "christophorus" + } + + if (s.toLowerCase().includes("richard")) { + return "richard" + } + + if (s.toLowerCase().includes("eduard")) { + return "eduard" + } + + if (s.toLowerCase().includes("clara")) { + return "clara" + } + + return "clara"; +} \ No newline at end of file diff --git a/src/utils/dto/blog.ts b/src/utils/dto/blog.ts new file mode 100644 index 0000000..86685d7 --- /dev/null +++ b/src/utils/dto/blog.ts @@ -0,0 +1,13 @@ +import { Blog } from '@/payload-types' +import { Slide } from '@/compositions/ImageCardSlider/ImageCardSlider' + +export const blogToSlides = (blog: Blog[]): Slide[] => { + return blog.map(b => { + return { + id: b.id, + title: b.title, + href: `/blog/${b.id}`, + src: typeof b.photo === "string" ? b.photo : b.photo?.url || "" + } + }) +} \ No newline at end of file diff --git a/src/utils/dto/events.ts b/src/utils/dto/events.ts new file mode 100644 index 0000000..b28a6f4 --- /dev/null +++ b/src/utils/dto/events.ts @@ -0,0 +1,15 @@ +import { Event } from '@/payload-types' +import { EventRowProps } from '@/components/EventRow/EventRow' + +export const transformEvents = (events: Event[]): EventRowProps[] => { + return events.map(e => { + return { + id: e.id, + title: e.title, + date: e.date, + href: `/veranstaltungen/${e.id}`, + location: e.location, + cancelled: e.cancelled, + } + }) +} \ No newline at end of file diff --git a/src/utils/dto/worship.ts b/src/utils/dto/worship.ts new file mode 100644 index 0000000..6a8eda0 --- /dev/null +++ b/src/utils/dto/worship.ts @@ -0,0 +1,32 @@ +import { Worship } from '@/payload-types' +import { EventRowProps } from '@/components/EventRow/EventRow' + +/** + * Transform the worship category to a readable string + */ +export const transformCategory = (category: "MASS" | "FAMILY" | "WORD"): string => { + const type = { + 'MASS': 'Eucharistiefeier', + 'FAMILY': 'Familienmesse', + 'WORD': 'Wort-Gottes-Feier', + } + + return type[category] +} + +/** + * Transform worship data to `EventRow` component properties + */ +export const tranformWorship = (worship: Worship[]): EventRowProps[] => { + + return worship.map(w => { + return { + id: w.id, + title: transformCategory(w.type), + date: w.date, + href: `/gottesdienst/${w.id}`, + location: typeof w.location === 'string' ? w.location : w.location.name, + cancelled: w.cancelled, + } + }) +} \ No newline at end of file diff --git a/src/utils/readableDate.ts b/src/utils/readableDate.ts new file mode 100644 index 0000000..3a3868d --- /dev/null +++ b/src/utils/readableDate.ts @@ -0,0 +1,11 @@ +/** + * Return a readable date time + * e.G. Samstag 13-01-2024, 12:00 Uhr + */ +export const readableDateTime = (date: string) => { + const dateObj = new Date(date); + const dayName = dateObj.toLocaleDateString("de-DE", { weekday: "long" }); + const normalDate = dateObj.toLocaleDateString("de-DE", { dateStyle: "medium" }); + const time = dateObj.toLocaleTimeString("de-DE", { timeStyle: "short" }); + return `${dayName} ${normalDate}, ${time} Uhr`; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 86d517c..a3c54b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3292,263 +3292,265 @@ __metadata: languageName: node linkType: hard -"@lexical/clipboard@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/clipboard@npm:0.17.0" +"@lexical/clipboard@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/clipboard@npm:0.20.0" dependencies: - "@lexical/html": "npm:0.17.0" - "@lexical/list": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/a07214236556a0a20bd0f9fcba09219a61c9065dd0259eef6add66cf7d9954ade38cc6b747c5823206b66e7f86d3726d353891fe4523d73b60c279501c879b46 + "@lexical/html": "npm:0.20.0" + "@lexical/list": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/7f69a9db79c14c2ff87e50d4f5fa94bc3abc65e1e025e11e9961395ce5acfd5c3ef85f86717d6db3070d66e6b0763bf68c02a59e539aa3f8824ce5657f5fbb12 languageName: node linkType: hard -"@lexical/code@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/code@npm:0.17.0" +"@lexical/code@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/code@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" prismjs: "npm:^1.27.0" - checksum: 10c0/de616cc73507cb307c267c1475f23f7b210aa98bb26ca6df293e78beffd9154d0a98b88f8c4ed0f37c8702b1d3879b2ac96dbd8dfb4b4a8897f6ef26cea44213 + checksum: 10c0/82b0396ec0223dfd2c05c75a9b2eb895ea1d905a5d6fef9d611b73785c40dd431c2aa94de6ef6321627cd2b1f9dbb8356df617b76f617c4fe307a91347c74e9d languageName: node linkType: hard -"@lexical/devtools-core@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/devtools-core@npm:0.17.0" +"@lexical/devtools-core@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/devtools-core@npm:0.20.0" dependencies: - "@lexical/html": "npm:0.17.0" - "@lexical/link": "npm:0.17.0" - "@lexical/mark": "npm:0.17.0" - "@lexical/table": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" + "@lexical/html": "npm:0.20.0" + "@lexical/link": "npm:0.20.0" + "@lexical/mark": "npm:0.20.0" + "@lexical/table": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" peerDependencies: react: ">=17.x" react-dom: ">=17.x" - checksum: 10c0/e36463dac228a930ae8bb62eaa3e6e368ddbe77180b668058daf29da867833c7243d5b70e7d75df949a69f89565806d9bf43a19374c535e26d28072835cea39c + checksum: 10c0/cd3701e1b467e32e9dd9ecc9da828e83b271990c9fe8e967ac6e1cf05795c046c7959f6ac73f4791db537c8e045c4a001ba96c81916e011003de83281b9683a0 languageName: node linkType: hard -"@lexical/dragon@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/dragon@npm:0.17.0" +"@lexical/dragon@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/dragon@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/2a300a6ab20b1e729aae8125a113dbddf865ca11928dcfee3f233c1d88cc17f5b80498067cf6aa5764978c6737bd825cbf04ba43487ccf477b1322ddd1962cb2 + lexical: "npm:0.20.0" + checksum: 10c0/91e3b6e1e1ca3e7dc5562e25a6a92c2d53a13560b6cf3cd8291e4aed8d2585f9f0eb7fbaf50935779c8488afdcf8579bb8264692425c9b3121c02702dd1af2d8 languageName: node linkType: hard -"@lexical/hashtag@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/hashtag@npm:0.17.0" +"@lexical/hashtag@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/hashtag@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/6c19710e7bf8770c37edd2874a565d5ef13de22c5a1104006671724376f20aa79ae725a43073bc947594aa5290e38d8a6dc978ba2128d4c00e9d6e100e6412d3 + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/09e9e312bac04aeccbc6b7dc89efca6c1ff87c7cbd52b045b6216e67584f4a2fb1506b8c1597beae60be09698a768cc2b29950d999736dda4a58800da4275bf7 languageName: node linkType: hard -"@lexical/headless@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/headless@npm:0.17.0" +"@lexical/headless@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/headless@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/5a5ad214aa56b7d357697311afa3e044447237567cf5182d5789d40c8fb3c21e45c786a1014ee881cc8d865005584615275238930bc2a3ac46c8a452b284f5ad + lexical: "npm:0.20.0" + checksum: 10c0/f2511f4313fa5958fcadf69423eef5cb22b4dcd87ce266ea7fb68c228e0fad15648bd04c6f53e9b03906f7c675f9f1aea43fea5aa947a94c0cc777b01f222235 languageName: node linkType: hard -"@lexical/history@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/history@npm:0.17.0" +"@lexical/history@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/history@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/67d38fa33821820ac1e9664d9d9f7a448de8347fec6675b1380b2b9f1f22b2f28d7f918cf6bd49ed7d590fc19052c02cad4b549b36ca354f3f04e800cf0e6465 + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/924518ac01cee53ad5c172ac39013e82b845be522c75bc2366a3090c071770a5bfe3fb595e96f8a7124cad236e0f6203bfb8492b19ea3e12ee287a2f607d0ab1 languageName: node linkType: hard -"@lexical/html@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/html@npm:0.17.0" +"@lexical/html@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/html@npm:0.20.0" dependencies: - "@lexical/selection": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/06684c4b0a5b794997fb28f7577e3e32aec7e37c559189e7aebe704c31f626fbb30a428e47676c434cd64ca1e233d3bfa3da7898ab1d4a02c23f8b68a9aaf155 + "@lexical/selection": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/a64df25fa6cd014a0ee3e04a9b16d2f843a2e182bbc11054aff33108b2df24c057545d40dcbe350f62ce8b7e69d0c243f2361e02c965b84a00f3ea98468e5e1d languageName: node linkType: hard -"@lexical/link@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/link@npm:0.17.0" +"@lexical/link@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/link@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/d104f2e9ec180c6351fbf5af79df86979cb98eebf03d543182d947fdfd8a4e702c622c71083e98147f10aa546fea6dfd7298c031c8cc905794ed4abc13ce210f + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/dc29fd6e5533c3ba6618466ec7a4efa7a4e7061e67d7adb385d54d909c84ace1875d71cdd5e27979ffde38787c60ec9425a4c32ddb0d6991c849a065c7140703 languageName: node linkType: hard -"@lexical/list@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/list@npm:0.17.0" +"@lexical/list@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/list@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/405654ff661ef1f3a05ff1bd36de3690bc982c50fcffda823ea41b3b730bf048e062aa39d486c0ae5f685c10b99ffa1fb4e0ce3ec76b6eab56621a81fb26358f + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/4f9861262988fb49bf6bc1f8e8b362102de0466435f573fc5a749b5fb79ffed2b9272987a14d59f53f430332136bd80c5b01c0da407711821100c13b4914b5a2 languageName: node linkType: hard -"@lexical/mark@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/mark@npm:0.17.0" +"@lexical/mark@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/mark@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/8799b319f54e928eb289332d690eaf8c47bb556bc2802a3de49f52a447f3c034dc37bee046efa554b1d08cb8c697c71ba32d26cfbaa49ee28d9a15de6e15d381 + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/25a7dffb6d29532851d59804dd23acec3c0b4c757a6d1e7a4ee63c9eb3bcb98d5be879a31a7619c33a09dc8282a9eb651dd17cc9a8f1c93377d5cf9db675ad48 languageName: node linkType: hard -"@lexical/markdown@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/markdown@npm:0.17.0" +"@lexical/markdown@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/markdown@npm:0.20.0" dependencies: - "@lexical/code": "npm:0.17.0" - "@lexical/link": "npm:0.17.0" - "@lexical/list": "npm:0.17.0" - "@lexical/rich-text": "npm:0.17.0" - "@lexical/text": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/4d20d1ff2399b33925554dab038db319edfeefbcc04a197c6414f3c533c60769a62f47fcd1e98076307f949e8934e0b37ce6d8df13bbb836237b6c3b99e02cc6 + "@lexical/code": "npm:0.20.0" + "@lexical/link": "npm:0.20.0" + "@lexical/list": "npm:0.20.0" + "@lexical/rich-text": "npm:0.20.0" + "@lexical/text": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/187fb4aadaf33d6d6bcdae15446082d533f08bd1f1ea498ef6a9febdce9c483a6ab4e0e9f1fc8f9b947b2133712e87c8216685873f948fe662cacbd6ca1574cf languageName: node linkType: hard -"@lexical/offset@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/offset@npm:0.17.0" +"@lexical/offset@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/offset@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/1810bc76c8cb7a405b40d6ff58692c960fec48e2e2d34096b292ce10caad978628484f7cad45cc1555c23da8182c142b9d15eb1af1fdde6ff3fd1e8277e676b3 + lexical: "npm:0.20.0" + checksum: 10c0/bb22d1938e39aa516a33f23c6f377d6f85d2efae83241ecf66aba6f3355f11e2d557781392e279a6143138a04569c6ee1ed655706f94ff8bf54ca2b0c75f241b languageName: node linkType: hard -"@lexical/overflow@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/overflow@npm:0.17.0" +"@lexical/overflow@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/overflow@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/6918cad2b9b8c76f691907e6984997531f3e8794c78e61f1587cb50578c4baa9ed1030755f9dde6a7dd0bb4e67b628aeacc4d0568b9285cd5e18d4ffbe947f84 + lexical: "npm:0.20.0" + checksum: 10c0/8904d0f6ad2d4990dbe9ea431a7f9cd12f9285dfb8b536d78dc0d15f8a6dfa73dc4662da6979c6ddf0e90fd27a9cb64aee8a091b66bb37d3c52b6c0ea115e0ef languageName: node linkType: hard -"@lexical/plain-text@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/plain-text@npm:0.17.0" +"@lexical/plain-text@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/plain-text@npm:0.20.0" dependencies: - "@lexical/clipboard": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/c555e9b83872bbaec235ff4ad19c18b647b3a278cdc48caa7a1f5145cae1e67921d19f6cdb7129b564ea654172313665df5ef03937f969a0c25f99a14989314d + "@lexical/clipboard": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/04f0c1cd8517d63c5f05ccfa8c1a6f98df251431712d654077fd44ba26eeace514280a68051c9f82e7e6548b452e21e1d034f004102033e762757072e30a0c8d languageName: node linkType: hard -"@lexical/react@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/react@npm:0.17.0" +"@lexical/react@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/react@npm:0.20.0" dependencies: - "@lexical/clipboard": "npm:0.17.0" - "@lexical/code": "npm:0.17.0" - "@lexical/devtools-core": "npm:0.17.0" - "@lexical/dragon": "npm:0.17.0" - "@lexical/hashtag": "npm:0.17.0" - "@lexical/history": "npm:0.17.0" - "@lexical/link": "npm:0.17.0" - "@lexical/list": "npm:0.17.0" - "@lexical/mark": "npm:0.17.0" - "@lexical/markdown": "npm:0.17.0" - "@lexical/overflow": "npm:0.17.0" - "@lexical/plain-text": "npm:0.17.0" - "@lexical/rich-text": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/table": "npm:0.17.0" - "@lexical/text": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - "@lexical/yjs": "npm:0.17.0" - lexical: "npm:0.17.0" + "@lexical/clipboard": "npm:0.20.0" + "@lexical/code": "npm:0.20.0" + "@lexical/devtools-core": "npm:0.20.0" + "@lexical/dragon": "npm:0.20.0" + "@lexical/hashtag": "npm:0.20.0" + "@lexical/history": "npm:0.20.0" + "@lexical/link": "npm:0.20.0" + "@lexical/list": "npm:0.20.0" + "@lexical/mark": "npm:0.20.0" + "@lexical/markdown": "npm:0.20.0" + "@lexical/overflow": "npm:0.20.0" + "@lexical/plain-text": "npm:0.20.0" + "@lexical/rich-text": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/table": "npm:0.20.0" + "@lexical/text": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + "@lexical/yjs": "npm:0.20.0" + lexical: "npm:0.20.0" react-error-boundary: "npm:^3.1.4" peerDependencies: react: ">=17.x" react-dom: ">=17.x" - checksum: 10c0/ca002438b01d9d35ed7e768662fbcd1a04d70a9b851124f9af3e5d554d834a6ae379f7e5ff503b45634f5eea7a428ad234b7190cc794b179e73e3cacf7a6fd44 + checksum: 10c0/852457e750ce95dd7040cd73b36bde52e9e0266924f286565b826f82eb9b9908e8e38d39e7e26d49fc17660714ee0bf7d5986c9c2a47395fb3ada76905376559 languageName: node linkType: hard -"@lexical/rich-text@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/rich-text@npm:0.17.0" +"@lexical/rich-text@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/rich-text@npm:0.20.0" dependencies: - "@lexical/clipboard": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/380e1b96f2c6c4ec55f5b26e8383611873dae4bb8b3e40f234e6fd3011ad46528d495cbbbcf6120ac828381e9d94ede6c6d28ba8f0a5330647b219e93d94fec4 + "@lexical/clipboard": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/56c596d423141d8d53f9fc9e63a721463295889ae461b78a69d80cad61945b5462cbe5fba3aadd47aa5af155cdeee0893f6be44a28e8610de3268a8e475f8505 languageName: node linkType: hard -"@lexical/selection@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/selection@npm:0.17.0" +"@lexical/selection@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/selection@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/e79784d8e9d1c5c83523ea2d686bb6fbd748b766a6d8d10109f2af0f7441a6d3f6027e5c246aaf8667c260e339493846df7de3abfa92bde125f213c41b7ed97b + lexical: "npm:0.20.0" + checksum: 10c0/c43f1a7a0afadc87539decc1da1902bd508d00f6999173eef15491e2d7e6d8ba152bcb037b21385bef9a9d0a3a4c909d3220ee56a70b3e67f7745b7bada3c72b languageName: node linkType: hard -"@lexical/table@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/table@npm:0.17.0" +"@lexical/table@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/table@npm:0.20.0" dependencies: - "@lexical/utils": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/ac33639e6f13579918922756098e33ffc94b0704822bbc176d8e83149b8c4be66ac818cabb4a9b84b43aac8ba2576a3f0774c2c7760bb6b52368a52a4621fb07 + "@lexical/clipboard": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/1c848c514603f08e821f9a320fc73d4b9df99810d6db3ff16f36f8d37152003bfa16f9694eb87dc9f006a08084ff953e0146bf0bcc84c1e301f2064e4712b646 languageName: node linkType: hard -"@lexical/text@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/text@npm:0.17.0" +"@lexical/text@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/text@npm:0.20.0" dependencies: - lexical: "npm:0.17.0" - checksum: 10c0/24e7a370347d5553d3ffa4a12f87d025b4c0e2b66745dc4e6f7a025f7dafbb4f7c534866362edb47ead2aa9628956e3957eb318127ad4446cc9e1b7f30e72bd0 + lexical: "npm:0.20.0" + checksum: 10c0/4c41c3558cbd8bf0b28af9853a779344195f2e8ccfee710d24e19328e84566ef3168a1d3c4915c70c16361dd1f2163783767ac9ed2d2b86b97af6c3ba93ab388 languageName: node linkType: hard -"@lexical/utils@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/utils@npm:0.17.0" +"@lexical/utils@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/utils@npm:0.20.0" dependencies: - "@lexical/list": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/table": "npm:0.17.0" - lexical: "npm:0.17.0" - checksum: 10c0/bfb6e1f21e5be0b8c1d7a72608b8314fabb20fb8df602a897ec1c7c8f06315d4bcc6c2807ed0d925d8c6198581989d342b2456c99a01095605239f8b082cb358 + "@lexical/list": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/table": "npm:0.20.0" + lexical: "npm:0.20.0" + checksum: 10c0/1e451ebf9f9f86ee7b5f4f034b4260a10aedb29a58546076f1dedc2b3b74d2f3fd0e01c7533108cfb13eb392b8ba875e200f1db60a9f2dc55871c89bef33dc8d languageName: node linkType: hard -"@lexical/yjs@npm:0.17.0": - version: 0.17.0 - resolution: "@lexical/yjs@npm:0.17.0" +"@lexical/yjs@npm:0.20.0": + version: 0.20.0 + resolution: "@lexical/yjs@npm:0.20.0" dependencies: - "@lexical/offset": "npm:0.17.0" - lexical: "npm:0.17.0" + "@lexical/offset": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + lexical: "npm:0.20.0" peerDependencies: yjs: ">=13.5.22" - checksum: 10c0/454868cb51c791f2ea96306c026ca2dd75ab3644787025172d0502178bb7e1ff5874cf1719099401ae65ffd24b164468678e43287ce4cf2abc740518b8c3d4f0 + checksum: 10c0/459c7ec4156402c9d8be67b3a4cc54b626adb99d639a29157d221daf5b01091bef4beb4b034b11f6bb4ad528bb0f5e72f89f6626d2835fbd1384afae0a3f0202 languageName: node linkType: hard @@ -3664,17 +3666,17 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.0.2": - version: 15.0.2 - resolution: "@next/env@npm:15.0.2" - checksum: 10c0/9c8eb08d6221ba2e2ccbfc887239aed83e62c18be7ff796b9b7c894e0be1a976a717e17eaf1be1fd61a919f7083112b2ffec5c0d071a4ac9b3881b439813a2e7 +"@next/env@npm:15.0.0": + version: 15.0.0 + resolution: "@next/env@npm:15.0.0" + checksum: 10c0/cc01e37af13a2a8fada74b2ee335dcd0a16424461a4316c26776fbb768491288a166075a2bcf8e0ab1afd6e66026c4e30bf9f9026dd693ac657ccff7d17aa4bc languageName: node linkType: hard -"@next/env@npm:^15.0.0-canary.104": - version: 15.0.0-rc.0 - resolution: "@next/env@npm:15.0.0-rc.0" - checksum: 10c0/d431c28d1ff3a00ab2b9a70ae65441b9f716e2b5f1fb0867684674e654f420702f3529cf689d809328e10f6304d3827d5a63bd56ee4ef2872ac1f087f1dcf16d +"@next/env@npm:^15.0.0": + version: 15.0.3 + resolution: "@next/env@npm:15.0.3" + checksum: 10c0/63582fed80d6a28fff102c935095da71fd57ddf6b5f5d564e85ebdefdeb93298f7f7cf7d813c75b460c6627106717ea959b4c232939e7abb97d73d8b8467d4cd languageName: node linkType: hard @@ -3687,58 +3689,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-darwin-arm64@npm:15.0.2" +"@next/swc-darwin-arm64@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-darwin-arm64@npm:15.0.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-darwin-x64@npm:15.0.2" +"@next/swc-darwin-x64@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-darwin-x64@npm:15.0.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-linux-arm64-gnu@npm:15.0.2" +"@next/swc-linux-arm64-gnu@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-linux-arm64-gnu@npm:15.0.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-linux-arm64-musl@npm:15.0.2" +"@next/swc-linux-arm64-musl@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-linux-arm64-musl@npm:15.0.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-linux-x64-gnu@npm:15.0.2" +"@next/swc-linux-x64-gnu@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-linux-x64-gnu@npm:15.0.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-linux-x64-musl@npm:15.0.2" +"@next/swc-linux-x64-musl@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-linux-x64-musl@npm:15.0.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-win32-arm64-msvc@npm:15.0.2" +"@next/swc-win32-arm64-msvc@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-win32-arm64-msvc@npm:15.0.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.0.2": - version: 15.0.2 - resolution: "@next/swc-win32-x64-msvc@npm:15.0.2" +"@next/swc-win32-x64-msvc@npm:15.0.0": + version: 15.0.0 + resolution: "@next/swc-win32-x64-msvc@npm:15.0.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3806,60 +3808,61 @@ __metadata: languageName: node linkType: hard -"@payloadcms/db-mongodb@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/db-mongodb@npm:3.0.0-beta.99" +"@payloadcms/db-mongodb@npm:beta": + version: 3.0.0-beta.130 + resolution: "@payloadcms/db-mongodb@npm:3.0.0-beta.130" dependencies: bson-objectid: "npm:2.0.4" http-status: "npm:1.6.2" mongoose: "npm:6.12.3" + mongoose-aggregate-paginate-v2: "npm:1.0.6" mongoose-paginate-v2: "npm:1.7.22" prompts: "npm:2.4.2" uuid: "npm:10.0.0" peerDependencies: - payload: 3.0.0-beta.99 - checksum: 10c0/8867c16f4d58a2836b84d9b4b58a5d9c764750f42dfe555e519b9bf8c9fc63c2ae8949c05402919d4b0c90076d08fed7fdc1ac9c5638ebc0258d2d2c80c40f6e + payload: 3.0.0-beta.130 + checksum: 10c0/7ab80b76c46ecf1693b6d780f5b8089b62f83bc19379d61a28acb944617d5f898d3ffaf305c92b2655badd29be8408370ce9bf1e14d0f920f8120996e777df8a languageName: node linkType: hard -"@payloadcms/email-nodemailer@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/email-nodemailer@npm:3.0.0-beta.99" +"@payloadcms/email-nodemailer@npm:3.0.0-beta.118": + version: 3.0.0-beta.118 + resolution: "@payloadcms/email-nodemailer@npm:3.0.0-beta.118" dependencies: nodemailer: "npm:6.9.10" peerDependencies: - payload: 3.0.0-beta.99 - checksum: 10c0/75a54bda59fdea2d246a04c22f033ea25229c16278cdc2fd4e46ca49851e49e5f614b0c285c2ac324b6b7b5eefe37f3a6a7cee3cf2d3a284608de0b15d286a66 + payload: 3.0.0-beta.118 + checksum: 10c0/f72f1153c5e373696f6eb8b96ae885645a456f4ce5a921895b5014fc08d61bb525f6769c764cbb0577610074192803f16c4f45391aad20e42599d95e1c72efa4 languageName: node linkType: hard -"@payloadcms/graphql@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/graphql@npm:3.0.0-beta.99" +"@payloadcms/graphql@npm:3.0.0-beta.130": + version: 3.0.0-beta.130 + resolution: "@payloadcms/graphql@npm:3.0.0-beta.130" dependencies: graphql-scalars: "npm:1.22.2" pluralize: "npm:8.0.0" - ts-essentials: "npm:7.0.3" - tsx: "npm:4.17.0" + ts-essentials: "npm:10.0.3" + tsx: "npm:4.19.2" peerDependencies: graphql: ^16.8.1 - payload: 3.0.0-beta.99 + payload: 3.0.0-beta.130 bin: payload-graphql: bin.js - checksum: 10c0/85cf37a9d316b5e3764dac2622b2552664dc0b850c9d00353202f1e34cc840a71c6916e6b5074fe22cdc791182b729fd428ed8af3c8be91268e1fa867073a335 + checksum: 10c0/7eafdabdd308c982fb4b8b34f570c87736b92926d576fa0abae86aad924b5544340cc7cc13d83de668b1853bcc4b97ce0eab5241f8196a9f6b2d815709840d9e languageName: node linkType: hard -"@payloadcms/next@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/next@npm:3.0.0-beta.99" +"@payloadcms/next@npm:beta": + version: 3.0.0-beta.130 + resolution: "@payloadcms/next@npm:3.0.0-beta.130" dependencies: "@dnd-kit/core": "npm:6.0.8" - "@payloadcms/graphql": "npm:3.0.0-beta.99" - "@payloadcms/translations": "npm:3.0.0-beta.99" - "@payloadcms/ui": "npm:3.0.0-beta.99" + "@payloadcms/graphql": "npm:3.0.0-beta.130" + "@payloadcms/translations": "npm:3.0.0-beta.130" + "@payloadcms/ui": "npm:3.0.0-beta.130" busboy: "npm:^1.6.0" - file-type: "npm:17.1.6" + file-type: "npm:19.3.0" graphql-http: "npm:^1.22.0" graphql-playground-html: "npm:1.6.30" http-status: "npm:1.6.2" @@ -3872,86 +3875,87 @@ __metadata: ws: "npm:^8.16.0" peerDependencies: graphql: ^16.8.1 - next: ^15.0.0-canary.104 - payload: 3.0.0-beta.99 - checksum: 10c0/c9c6d079bbf1797c2d9674897613a1e7753361c3c4ce81f612963289d8a8ebe576ceec213b54114e787c27a9c4f643b53ea114d783dd8cfb20421517f2546496 + next: ^15.0.0 + payload: 3.0.0-beta.130 + checksum: 10c0/68735950a5f8bcac8abeebdf043bb10a88e335f4692dee2953fce0d006ac86af6a9ff7eb419cc1bc74532e421b5b2f879f41f239716d1b276ca0ed740afca95d languageName: node linkType: hard -"@payloadcms/plugin-cloud@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/plugin-cloud@npm:3.0.0-beta.99" +"@payloadcms/plugin-cloud@npm:beta": + version: 3.0.0-beta.118 + resolution: "@payloadcms/plugin-cloud@npm:3.0.0-beta.118" dependencies: "@aws-sdk/client-cognito-identity": "npm:^3.614.0" "@aws-sdk/client-s3": "npm:^3.614.0" "@aws-sdk/credential-providers": "npm:^3.614.0" "@aws-sdk/lib-storage": "npm:^3.614.0" - "@payloadcms/email-nodemailer": "npm:3.0.0-beta.99" + "@payloadcms/email-nodemailer": "npm:3.0.0-beta.118" amazon-cognito-identity-js: "npm:^6.1.2" nodemailer: "npm:6.9.10" resend: "npm:^0.17.2" peerDependencies: - payload: 3.0.0-beta.99 - checksum: 10c0/f60d39ad6eb42be742ad27f195322332bbd056923bf59547a37c990b263ffd3f0b31f7f6577a85c7fb0a8d7b4a1909f51133a42d80f5c3f36558b0c73184086a + payload: 3.0.0-beta.118 + checksum: 10c0/fd8a668c5f188aeddfe658daa370004e46bbe5ea1a6d41c4233f1637eeeaba1fe33c3549b58e9049d1a55b8755a1391ceecf429f4fd9f5ca590ac68ac235a49b languageName: node linkType: hard -"@payloadcms/richtext-lexical@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/richtext-lexical@npm:3.0.0-beta.99" +"@payloadcms/richtext-lexical@npm:beta": + version: 3.0.0-beta.130 + resolution: "@payloadcms/richtext-lexical@npm:3.0.0-beta.130" dependencies: - "@lexical/headless": "npm:0.17.0" - "@lexical/link": "npm:0.17.0" - "@lexical/list": "npm:0.17.0" - "@lexical/mark": "npm:0.17.0" - "@lexical/markdown": "npm:0.17.0" - "@lexical/react": "npm:0.17.0" - "@lexical/rich-text": "npm:0.17.0" - "@lexical/selection": "npm:0.17.0" - "@lexical/utils": "npm:0.17.0" - "@payloadcms/translations": "npm:3.0.0-beta.99" - "@payloadcms/ui": "npm:3.0.0-beta.99" + "@lexical/headless": "npm:0.20.0" + "@lexical/link": "npm:0.20.0" + "@lexical/list": "npm:0.20.0" + "@lexical/mark": "npm:0.20.0" + "@lexical/markdown": "npm:0.20.0" + "@lexical/react": "npm:0.20.0" + "@lexical/rich-text": "npm:0.20.0" + "@lexical/selection": "npm:0.20.0" + "@lexical/utils": "npm:0.20.0" + "@payloadcms/translations": "npm:3.0.0-beta.130" + "@payloadcms/ui": "npm:3.0.0-beta.130" "@types/uuid": "npm:10.0.0" bson-objectid: "npm:2.0.4" dequal: "npm:2.0.3" escape-html: "npm:1.0.3" - lexical: "npm:0.17.0" + lexical: "npm:0.20.0" react-error-boundary: "npm:4.0.13" + ts-essentials: "npm:10.0.3" uuid: "npm:10.0.0" peerDependencies: "@faceless-ui/modal": 3.0.0-beta.2 "@faceless-ui/scroll-info": 2.0.0-beta.0 - "@lexical/headless": 0.17.0 - "@lexical/link": 0.17.0 - "@lexical/list": 0.17.0 - "@lexical/mark": 0.17.0 - "@lexical/markdown": 0.17.0 - "@lexical/react": 0.17.0 - "@lexical/rich-text": 0.17.0 - "@lexical/selection": 0.17.0 - "@lexical/table": 0.17.0 - "@lexical/utils": 0.17.0 - "@payloadcms/next": 3.0.0-beta.99 - lexical: 0.17.0 - payload: 3.0.0-beta.99 - react: ^19.0.0 || ^19.0.0-rc-06d0b89e-20240801 - react-dom: ^19.0.0 || ^19.0.0-rc-06d0b89e-20240801 - checksum: 10c0/9b3023abf9cfa63b9bff059971632ff51792a56ba20072caf5564e37c4d57c75dbc79cbf328600dba22ac34c868817f9cff4501ad9927a0fc2381a5efd5f4acb + "@lexical/headless": 0.20.0 + "@lexical/link": 0.20.0 + "@lexical/list": 0.20.0 + "@lexical/mark": 0.20.0 + "@lexical/markdown": 0.20.0 + "@lexical/react": 0.20.0 + "@lexical/rich-text": 0.20.0 + "@lexical/selection": 0.20.0 + "@lexical/table": 0.20.0 + "@lexical/utils": 0.20.0 + "@payloadcms/next": 3.0.0-beta.130 + lexical: 0.20.0 + payload: 3.0.0-beta.130 + react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + checksum: 10c0/6064a58b9b1209f257f1cf189b47050c2e9c8524feb5ecc43ae662082c532abf32f2badf44a162a4233109faf20f995b80b18fee61c9d889fb03b9b113ec7b35 languageName: node linkType: hard -"@payloadcms/translations@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/translations@npm:3.0.0-beta.99" +"@payloadcms/translations@npm:3.0.0-beta.130": + version: 3.0.0-beta.130 + resolution: "@payloadcms/translations@npm:3.0.0-beta.130" dependencies: date-fns: "npm:3.3.1" - checksum: 10c0/99df8a389f146da2c7ad60ff603caed9e3a2c2becfd56c98ea7779a3a77563a5ad1cf4105ca16b9d4d0878a8cca23bc2677238f484d2ed93f2b2fc06c004012a + checksum: 10c0/3a928fae250a0e97bcb40f4281d10c04cc5a40cdad9eb8d33248d0c49091b66ac6bc22a01d553a8727b6e83e57767d8d76bb96317bf7685780550c2f2b8ca3ea languageName: node linkType: hard -"@payloadcms/ui@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "@payloadcms/ui@npm:3.0.0-beta.99" +"@payloadcms/ui@npm:3.0.0-beta.130": + version: 3.0.0-beta.130 + resolution: "@payloadcms/ui@npm:3.0.0-beta.130" dependencies: "@dnd-kit/core": "npm:6.0.8" "@dnd-kit/sortable": "npm:7.0.2" @@ -3959,7 +3963,7 @@ __metadata: "@faceless-ui/scroll-info": "npm:2.0.0-beta.0" "@faceless-ui/window-info": "npm:3.0.0-beta.0" "@monaco-editor/react": "npm:4.6.0" - "@payloadcms/translations": "npm:3.0.0-beta.99" + "@payloadcms/translations": "npm:3.0.0-beta.130" body-scroll-lock: "npm:4.0.0-beta.0" bson-objectid: "npm:2.0.4" date-fns: "npm:3.3.1" @@ -3971,17 +3975,17 @@ __metadata: react-datepicker: "npm:6.9.0" react-image-crop: "npm:10.1.8" react-select: "npm:5.8.0" - scheduler: "npm:0.25.0-rc-f994737d14-20240522" + scheduler: "npm:0.0.0-experimental-3edc000d-20240926" sonner: "npm:^1.5.0" - ts-essentials: "npm:7.0.3" + ts-essentials: "npm:10.0.3" use-context-selector: "npm:2.0.0" uuid: "npm:10.0.0" peerDependencies: - next: ^15.0.0-canary.104 - payload: 3.0.0-beta.99 - react: ^19.0.0 || ^19.0.0-rc-06d0b89e-20240801 - react-dom: ^19.0.0 || ^19.0.0-rc-06d0b89e-20240801 - checksum: 10c0/2d79f3d3f8f85b82e2502ea050e18f9e650996c079534742828c81dc47ee609616c609b1e405a12d278c96e80d0922a7ebff7e0f03b74ff73e0b5833e28aaa16 + next: ^15.0.0 + payload: 3.0.0-beta.130 + react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020 + checksum: 10c0/e1dbae279c1a9ca663d2084e9eae79763e71edc597207669d1f078042504b659ebf4c87389e8ceb8400ea1002b514515e1e662d2cefbfe1d41a1e7f2f87a943b languageName: node linkType: hard @@ -5721,6 +5725,13 @@ __metadata: languageName: node linkType: hard +"@types/lodash@npm:^4.17.7": + version: 4.17.13 + resolution: "@types/lodash@npm:4.17.13" + checksum: 10c0/c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9 + languageName: node + linkType: hard + "@types/mapbox__point-geometry@npm:*": version: 0.1.4 resolution: "@types/mapbox__point-geometry@npm:0.1.4" @@ -6471,15 +6482,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:8.14.0": - version: 8.14.0 - resolution: "ajv@npm:8.14.0" +"ajv@npm:8.17.1, ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" dependencies: fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - uri-js: "npm:^4.4.1" - checksum: 10c0/89aedf51bc3cd2a98214ef8d4081a9d5c02cedbfd28ada48deb9ae3d456fdfe3dc8899cce44736c80b3965840e32ba8827032df6a60af5671f27f47f8082a3bf + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 languageName: node linkType: hard @@ -6495,18 +6506,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" - dependencies: - fast-deep-equal: "npm:^3.1.3" - fast-uri: "npm:^3.0.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 - languageName: node - linkType: hard - "amazon-cognito-identity-js@npm:^6.1.2": version: 6.3.13 resolution: "amazon-cognito-identity-js@npm:6.3.13" @@ -7231,13 +7230,6 @@ __metadata: languageName: node linkType: hard -"buffer-equal-constant-time@npm:1.0.1": - version: 1.0.1 - resolution: "buffer-equal-constant-time@npm:1.0.1" - checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -7821,12 +7813,12 @@ __metadata: languageName: node linkType: hard -"console-table-printer@npm:2.11.2": - version: 2.11.2 - resolution: "console-table-printer@npm:2.11.2" +"console-table-printer@npm:2.12.1": + version: 2.12.1 + resolution: "console-table-printer@npm:2.12.1" dependencies: simple-wcswidth: "npm:^1.0.1" - checksum: 10c0/03d46563591395f54fb756a7793b289d1f162eac8dfabf52dbb31b71bf5745e11e6d002da92c38e25b94bb2f5302bae707693ebbfbe406109f21e9e486ddecfb + checksum: 10c0/8f28e9c0ae5df77f5d60da3da002ecd95ebe1812b0b9e0a6d2795c81b5121b39774f32506bccf68830a838ca4d8fbb2ab8824e729dba2c5e30cdeb9df4dd5f2b languageName: node linkType: hard @@ -7971,6 +7963,13 @@ __metadata: languageName: node linkType: hard +"croner@npm:9.0.0": + version: 9.0.0 + resolution: "croner@npm:9.0.0" + checksum: 10c0/c530c80f580d4d8638ac114c97467806d7e016d9ff28033bbf29f21fad160467cbeeff7247f4a2cc68b4e5be2350f28cf3f5329a9a6a901acb0de4dd0caeef08 + languageName: node + linkType: hard + "cross-env@npm:^7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -8564,10 +8563,10 @@ __metadata: resolution: "drei-koenige-v3@workspace:." dependencies: "@chromatic-com/storybook": "npm:^1.6.1" - "@payloadcms/db-mongodb": "npm:3.0.0-beta.99" - "@payloadcms/next": "npm:3.0.0-beta.99" - "@payloadcms/plugin-cloud": "npm:3.0.0-beta.99" - "@payloadcms/richtext-lexical": "npm:3.0.0-beta.99" + "@payloadcms/db-mongodb": "npm:beta" + "@payloadcms/next": "npm:beta" + "@payloadcms/plugin-cloud": "npm:beta" + "@payloadcms/richtext-lexical": "npm:beta" "@storybook/addon-essentials": "npm:^8.2.9" "@storybook/addon-interactions": "npm:^8.2.9" "@storybook/addon-links": "npm:^8.2.9" @@ -8590,10 +8589,11 @@ __metadata: eslint-plugin-storybook: "npm:^0.8.0" graphql: "npm:^16.8.1" mapbox-gl: "npm:^3.5.2" - next: "npm:^15.0.2" - payload: "npm:3.0.0-beta.99" - react: "npm:19.0.0-rc-f65ac7bd-20240826" - react-dom: "npm:19.0.0-rc-f65ac7bd-20240826" + next: "npm:15.0.0" + payload: "npm:beta" + qs-esm: "npm:^7.0.2" + react: "npm:19.0.0-rc-65a56d0e-20241020" + react-dom: "npm:19.0.0-rc-65a56d0e-20241020" sharp: "npm:0.32.6" storybook: "npm:^8.2.9" typescript: "npm:5.5.4" @@ -8614,15 +8614,6 @@ __metadata: languageName: node linkType: hard -"ecdsa-sig-formatter@npm:1.0.11": - version: 1.0.11 - resolution: "ecdsa-sig-formatter@npm:1.0.11" - dependencies: - safe-buffer: "npm:^5.0.1" - checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c - languageName: node - linkType: hard - "editorconfig@npm:^1.0.4": version: 1.0.4 resolution: "editorconfig@npm:1.0.4" @@ -9799,6 +9790,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.2": + version: 6.4.2 + resolution: "fdir@npm:6.4.2" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/34829886f34a3ca4170eca7c7180ec4de51a3abb4d380344063c0ae2e289b11d2ba8b724afee974598c83027fea363ff598caf2b51bc4e6b1e0d8b80cc530573 + languageName: node + linkType: hard + "fflate@npm:^0.8.1": version: 0.8.2 resolution: "fflate@npm:0.8.2" @@ -9815,7 +9818,18 @@ __metadata: languageName: node linkType: hard -"file-type@npm:17.1.6, file-type@npm:^17.1.6": +"file-type@npm:19.3.0": + version: 19.3.0 + resolution: "file-type@npm:19.3.0" + dependencies: + strtok3: "npm:^8.0.0" + token-types: "npm:^6.0.0" + uint8array-extras: "npm:^1.3.0" + checksum: 10c0/53d06f746da5eca8d4c5b89174cd0d8f3f229bc8ef53d760673d7f7149442b25efc7b00c9a91a9e0b6fa5b671816181b65166f576bee11bbf583bd7598d6cad7 + languageName: node + linkType: hard + +"file-type@npm:^17.1.6": version: 17.1.6 resolution: "file-type@npm:17.1.6" dependencies: @@ -9921,17 +9935,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:7.0.0": - version: 7.0.0 - resolution: "find-up@npm:7.0.0" - dependencies: - locate-path: "npm:^7.2.0" - path-exists: "npm:^5.0.0" - unicorn-magic: "npm:^0.1.0" - checksum: 10c0/e6ee3e6154560bc0ab3bc3b7d1348b31513f9bdf49a5dd2e952495427d559fa48cdf33953e85a309a323898b43fa1bfbc8b80c880dfc16068384783034030008 - languageName: node - linkType: hard - "find-up@npm:^3.0.0": version: 3.0.0 resolution: "find-up@npm:3.0.0" @@ -10272,7 +10275,16 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.7.2, get-tsconfig@npm:^4.7.5": +"get-tsconfig@npm:4.8.1": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/536ee85d202f604f4b5fb6be81bcd6e6d9a96846811e83e9acc6de4a04fb49506edea0e1b8cf1d5ee7af33e469916ec2809d4c5445ab8ae015a7a51fbd1572f9 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.7.5": version: 4.8.0 resolution: "get-tsconfig@npm:4.8.0" dependencies: @@ -10345,7 +10357,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.12, glob@npm:^10.3.3": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -11437,6 +11449,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:5.9.6": + version: 5.9.6 + resolution: "jose@npm:5.9.6" + checksum: 10c0/d6bcd8c7d655b5cda8e182952a76f0c093347f5476d74795405bb91563f7ab676f61540310dd4b1531c60d685335ceb600571a409551d2cbd2ab3e9f9fbf1e4d + languageName: node + linkType: hard + "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -11567,21 +11586,22 @@ __metadata: languageName: node linkType: hard -"json-schema-to-typescript@npm:15.0.1": - version: 15.0.1 - resolution: "json-schema-to-typescript@npm:15.0.1" +"json-schema-to-typescript@npm:15.0.3": + version: 15.0.3 + resolution: "json-schema-to-typescript@npm:15.0.3" dependencies: "@apidevtools/json-schema-ref-parser": "npm:^11.5.5" "@types/json-schema": "npm:^7.0.15" - glob: "npm:^10.3.12" + "@types/lodash": "npm:^4.17.7" is-glob: "npm:^4.0.3" js-yaml: "npm:^4.1.0" lodash: "npm:^4.17.21" minimist: "npm:^1.2.8" prettier: "npm:^3.2.5" + tinyglobby: "npm:^0.2.9" bin: json2ts: dist/src/cli.js - checksum: 10c0/1154d49920029a9621742bae9153339f5539378c7db4e845ff37147b3e4aa108eb7384734268d632a0b48dc53d177e5f5c54388aea4035fa2845c836992de8e9 + checksum: 10c0/b972ceb85c9491a08964669ba878b2f12ba27ef14d4ac0444dac6c9479f91e635b1a6a3bf491a8b36cba6409edbdb2730a8f30db6106305e344f5bce0bf1a76d languageName: node linkType: hard @@ -11639,18 +11659,6 @@ __metadata: languageName: node linkType: hard -"jsonwebtoken@npm:9.0.1": - version: 9.0.1 - resolution: "jsonwebtoken@npm:9.0.1" - dependencies: - jws: "npm:^3.2.2" - lodash: "npm:^4.17.21" - ms: "npm:^2.1.1" - semver: "npm:^7.3.8" - checksum: 10c0/3508912a0fb5ad06a09a79f655681f6fc389376fb8e7fdcaf367fbdd02e9fb5e11a7a4ff715cbe44d8be0e7a99319b03a7d34ef5daede61cf1f8d3519bbb08d6 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -11663,27 +11671,6 @@ __metadata: languageName: node linkType: hard -"jwa@npm:^1.4.1": - version: 1.4.1 - resolution: "jwa@npm:1.4.1" - dependencies: - buffer-equal-constant-time: "npm:1.0.1" - ecdsa-sig-formatter: "npm:1.0.11" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9 - languageName: node - linkType: hard - -"jws@npm:^3.2.2": - version: 3.2.2 - resolution: "jws@npm:3.2.2" - dependencies: - jwa: "npm:^1.4.1" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff - languageName: node - linkType: hard - "kareem@npm:2.5.1": version: 2.5.1 resolution: "kareem@npm:2.5.1" @@ -11777,10 +11764,10 @@ __metadata: languageName: node linkType: hard -"lexical@npm:0.17.0": - version: 0.17.0 - resolution: "lexical@npm:0.17.0" - checksum: 10c0/5a616294aa7354a56cc6ce87352bd81763f3f33b85427d1e92ff761e5c481ae806f19100869bc3e69e8e26f2ce74d499e541667ec3cff8b3e1607b24cdea331e +"lexical@npm:0.20.0": + version: 0.20.0 + resolution: "lexical@npm:0.20.0" + checksum: 10c0/f1dc5b0b9ffec64abee2b322688f0525944c80da0b60a3687e647429523ac872d80a18d521bd0d149b91515472f3c57b5c8ca154775f00971d87d868659c7ba5 languageName: node linkType: hard @@ -11844,7 +11831,7 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^7.1.0, locate-path@npm:^7.2.0": +"locate-path@npm:^7.1.0": version: 7.2.0 resolution: "locate-path@npm:7.2.0" dependencies: @@ -12420,6 +12407,13 @@ __metadata: languageName: node linkType: hard +"mongoose-aggregate-paginate-v2@npm:1.0.6": + version: 1.0.6 + resolution: "mongoose-aggregate-paginate-v2@npm:1.0.6" + checksum: 10c0/9dd9e4e40059bae4fd66051142aabc4e1279a8b25bdda9e8599e7e59481dcda1bca39f0b0305ac8424a7a5aa347c52e968d5a64471a7befe6f9a0921587b320c + languageName: node + linkType: hard + "mongoose-paginate-v2@npm:1.7.22": version: 1.7.22 resolution: "mongoose-paginate-v2@npm:1.7.22" @@ -12523,19 +12517,19 @@ __metadata: languageName: node linkType: hard -"next@npm:^15.0.2": - version: 15.0.2 - resolution: "next@npm:15.0.2" +"next@npm:15.0.0": + version: 15.0.0 + resolution: "next@npm:15.0.0" dependencies: - "@next/env": "npm:15.0.2" - "@next/swc-darwin-arm64": "npm:15.0.2" - "@next/swc-darwin-x64": "npm:15.0.2" - "@next/swc-linux-arm64-gnu": "npm:15.0.2" - "@next/swc-linux-arm64-musl": "npm:15.0.2" - "@next/swc-linux-x64-gnu": "npm:15.0.2" - "@next/swc-linux-x64-musl": "npm:15.0.2" - "@next/swc-win32-arm64-msvc": "npm:15.0.2" - "@next/swc-win32-x64-msvc": "npm:15.0.2" + "@next/env": "npm:15.0.0" + "@next/swc-darwin-arm64": "npm:15.0.0" + "@next/swc-darwin-x64": "npm:15.0.0" + "@next/swc-linux-arm64-gnu": "npm:15.0.0" + "@next/swc-linux-arm64-musl": "npm:15.0.0" + "@next/swc-linux-x64-gnu": "npm:15.0.0" + "@next/swc-linux-x64-musl": "npm:15.0.0" + "@next/swc-win32-arm64-msvc": "npm:15.0.0" + "@next/swc-win32-x64-msvc": "npm:15.0.0" "@swc/counter": "npm:0.1.3" "@swc/helpers": "npm:0.5.13" busboy: "npm:1.6.0" @@ -12547,8 +12541,8 @@ __metadata: "@opentelemetry/api": ^1.1.0 "@playwright/test": ^1.41.2 babel-plugin-react-compiler: "*" - react: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 - react-dom: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 + react: ^18.2.0 || 19.0.0-rc-65a56d0e-20241020 + react-dom: ^18.2.0 || 19.0.0-rc-65a56d0e-20241020 sass: ^1.3.0 dependenciesMeta: "@next/swc-darwin-arm64": @@ -12580,7 +12574,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/3bfbecda05bbd537260d21466dc91c6cc53e25318eef22748164ad9a3bcb0ac662327c68b0a8d7322808fefeed306402b79e53c46fbec342de600fd9dd977549 + checksum: 10c0/79614fb29c1806f945da4400a86028c875b6d69e532551c53458e6e20b39019b100ccdc051005a41a77eb2d7900363f2537b1117f6bcf3c4a6356eda5db8c84e languageName: node linkType: hard @@ -13319,41 +13313,41 @@ __metadata: languageName: node linkType: hard -"payload@npm:3.0.0-beta.99": - version: 3.0.0-beta.99 - resolution: "payload@npm:3.0.0-beta.99" +"payload@npm:beta": + version: 3.0.0-beta.130 + resolution: "payload@npm:3.0.0-beta.130" dependencies: "@monaco-editor/react": "npm:4.6.0" - "@next/env": "npm:^15.0.0-canary.104" - "@payloadcms/translations": "npm:3.0.0-beta.99" + "@next/env": "npm:^15.0.0" + "@payloadcms/translations": "npm:3.0.0-beta.130" "@types/busboy": "npm:1.5.4" - ajv: "npm:8.14.0" + ajv: "npm:8.17.1" bson-objectid: "npm:2.0.4" ci-info: "npm:^4.0.0" - console-table-printer: "npm:2.11.2" + console-table-printer: "npm:2.12.1" + croner: "npm:9.0.0" dataloader: "npm:2.2.2" deepmerge: "npm:4.3.1" - file-type: "npm:17.1.6" - find-up: "npm:7.0.0" - get-tsconfig: "npm:^4.7.2" + file-type: "npm:19.3.0" + get-tsconfig: "npm:4.8.1" http-status: "npm:1.6.2" image-size: "npm:^1.1.1" - json-schema-to-typescript: "npm:15.0.1" - jsonwebtoken: "npm:9.0.1" + jose: "npm:5.9.6" + json-schema-to-typescript: "npm:15.0.3" minimist: "npm:1.2.8" - pino: "npm:9.3.1" - pino-pretty: "npm:11.2.1" + pino: "npm:9.5.0" + pino-pretty: "npm:13.0.0" pluralize: "npm:8.0.0" sanitize-filename: "npm:1.6.3" scmp: "npm:2.1.0" - ts-essentials: "npm:7.0.3" - tsx: "npm:4.17.0" + ts-essentials: "npm:10.0.3" + tsx: "npm:4.19.2" uuid: "npm:10.0.0" peerDependencies: graphql: ^16.8.1 bin: payload: bin.js - checksum: 10c0/1251daaf563865eb8737fc9bfbaba68fbc78335f482f04366e390a1fb6ec10d447759e2cc996b77fc4334f2cb3e1329303bf8a82f7bfdf836758364504e36a8f + checksum: 10c0/c5bb13687e5bea04af322298ea192d4cf9592fab1f6f4ff7575bd345f525c933557152efd7f301d0cd7a85265c03d5a3bf1a253344709e4c7f35561a9f398158 languageName: node linkType: hard @@ -13396,6 +13390,13 @@ __metadata: languageName: node linkType: hard +"peek-readable@npm:^5.1.4": + version: 5.3.1 + resolution: "peek-readable@npm:5.3.1" + checksum: 10c0/49f628e4728887230c158699e422ebb10747f5e02aee930ec10634fa7142e74e67d3fb3a780e7a9b9f092c61bf185f07d167c099b2359b22a58cee3dbfe0e43b + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": version: 1.1.0 resolution: "picocolors@npm:1.1.0" @@ -13410,6 +13411,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "pify@npm:^2.2.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -13424,19 +13432,18 @@ __metadata: languageName: node linkType: hard -"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.2.0": - version: 1.2.0 - resolution: "pino-abstract-transport@npm:1.2.0" +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" dependencies: - readable-stream: "npm:^4.0.0" split2: "npm:^4.0.0" - checksum: 10c0/b4ab59529b7a91f488440147fc58ee0827a6c1c5ca3627292339354b1381072c1a6bfa9b46d03ad27872589e8477ecf74da12cf286e1e6b665ac64a3b806bf07 + checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f languageName: node linkType: hard -"pino-pretty@npm:11.2.1": - version: 11.2.1 - resolution: "pino-pretty@npm:11.2.1" +"pino-pretty@npm:13.0.0": + version: 13.0.0 + resolution: "pino-pretty@npm:13.0.0" dependencies: colorette: "npm:^2.0.7" dateformat: "npm:^4.6.3" @@ -13446,15 +13453,14 @@ __metadata: joycon: "npm:^3.1.1" minimist: "npm:^1.2.6" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.0.0" + pino-abstract-transport: "npm:^2.0.0" pump: "npm:^3.0.0" - readable-stream: "npm:^4.0.0" secure-json-parse: "npm:^2.4.0" sonic-boom: "npm:^4.0.1" strip-json-comments: "npm:^3.1.1" bin: pino-pretty: bin.js - checksum: 10c0/6c7f15b5bf8a007c8b7157eae445675b13cd95097ffa512d5ebd661f9e7abd328fa27592b25708756a09f098f87cb03ca81837518cd725c16e3f801129b941d4 + checksum: 10c0/015dac25006c1b9820b9e01fccb8a392a019e12b30e6bfc3f3f61ecca8dbabcd000a8f3f64410b620b7f5d08579ba85e6ef137f7fbeaad70d46397a97a5f75ea languageName: node linkType: hard @@ -13465,16 +13471,16 @@ __metadata: languageName: node linkType: hard -"pino@npm:9.3.1": - version: 9.3.1 - resolution: "pino@npm:9.3.1" +"pino@npm:9.5.0": + version: 9.5.0 + resolution: "pino@npm:9.5.0" dependencies: atomic-sleep: "npm:^1.0.0" fast-redact: "npm:^3.1.1" on-exit-leak-free: "npm:^2.1.0" - pino-abstract-transport: "npm:^1.2.0" + pino-abstract-transport: "npm:^2.0.0" pino-std-serializers: "npm:^7.0.0" - process-warning: "npm:^3.0.0" + process-warning: "npm:^4.0.0" quick-format-unescaped: "npm:^4.0.3" real-require: "npm:^0.2.0" safe-stable-stringify: "npm:^2.3.1" @@ -13482,7 +13488,7 @@ __metadata: thread-stream: "npm:^3.0.0" bin: pino: bin.js - checksum: 10c0/ab1e81b3e5a91852136d80a592939883eeb81442e5d3a2c070bdbdeb47c5aaa297ead246530b10eb6d5ff59445f4645d1333d342f255d9f002f73aea843e74ee + checksum: 10c0/b06590c5f4da43df59905af1aac344432b43154c4c1569ebea168e7ae7fd0a4181ccabb769a6568cf3e781e1d1b9df13d65b3603e25ebb05539bcb02ea04215e languageName: node linkType: hard @@ -13787,10 +13793,10 @@ __metadata: languageName: node linkType: hard -"process-warning@npm:^3.0.0": - version: 3.0.0 - resolution: "process-warning@npm:3.0.0" - checksum: 10c0/60f3c8ddee586f0706c1e6cb5aa9c86df05774b9330d792d7c8851cf0031afd759d665404d07037e0b4901b55c44a423f07bdc465c63de07d8d23196bb403622 +"process-warning@npm:^4.0.0": + version: 4.0.0 + resolution: "process-warning@npm:4.0.0" + checksum: 10c0/5312a72b69d37a1b82ad03f3dfa0090dab3804a8fd995d06c28e3c002852bd82f5584217d9f4a3f197892bb2afc22d57e2c662c7e906b5abb48c0380c7b0880d languageName: node linkType: hard @@ -13908,7 +13914,7 @@ __metadata: languageName: node linkType: hard -"qs-esm@npm:7.0.2": +"qs-esm@npm:7.0.2, qs-esm@npm:^7.0.2": version: 7.0.2 resolution: "qs-esm@npm:7.0.2" checksum: 10c0/b46e15883b91818fd6b0862cac97439dfe67a1401c00729756b16463fa97e094239017dd4f17369dd0cf586e262305b165ee485c0b1088ca4d2eb7ad11c0c8fe @@ -14141,14 +14147,14 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:19.0.0-rc-f65ac7bd-20240826": - version: 19.0.0-rc-f65ac7bd-20240826 - resolution: "react-dom@npm:19.0.0-rc-f65ac7bd-20240826" +"react-dom@npm:19.0.0-rc-65a56d0e-20241020": + version: 19.0.0-rc-65a56d0e-20241020 + resolution: "react-dom@npm:19.0.0-rc-65a56d0e-20241020" dependencies: - scheduler: "npm:0.25.0-rc-f65ac7bd-20240826" + scheduler: "npm:0.25.0-rc-65a56d0e-20241020" peerDependencies: - react: 19.0.0-rc-f65ac7bd-20240826 - checksum: 10c0/f5d3171ba1d675a6ffd90aee92588e205d6e5ac8491b924d219b40f937607ad8038381813934f37b51466e192dd7085948b003e77225d8777e5447ace4a3e0fe + react: 19.0.0-rc-65a56d0e-20241020 + checksum: 10c0/b2c7f4e641c8b87cc799ab95abd50d8c4cf8dae200a58dd468f56852730d6b131f6e115d06ed9ef3ed5d701282de84cb19e7980d9a7170dfbbe5272905ce40dd languageName: node linkType: hard @@ -14298,10 +14304,10 @@ __metadata: languageName: node linkType: hard -"react@npm:19.0.0-rc-f65ac7bd-20240826": - version: 19.0.0-rc-f65ac7bd-20240826 - resolution: "react@npm:19.0.0-rc-f65ac7bd-20240826" - checksum: 10c0/e0b98473a0585be4b50c41fc55d9a639f090d1824af124c063e7f8dbc34e5a4d8d7de2d8e480918c79593ab0e0597ffdee88282b1a14cb75ead2fb8e2291e4cc +"react@npm:19.0.0-rc-65a56d0e-20241020": + version: 19.0.0-rc-65a56d0e-20241020 + resolution: "react@npm:19.0.0-rc-65a56d0e-20241020" + checksum: 10c0/4199dd282163ad411373e8e06a5e4f2d9b7d9ab938b4ef5483d045973eebca2cdd02db02431e7b22426b429c7ff252db9cbe80f77cdbaa15a632927d4e124c75 languageName: node linkType: hard @@ -14838,17 +14844,17 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:0.25.0-rc-f65ac7bd-20240826": - version: 0.25.0-rc-f65ac7bd-20240826 - resolution: "scheduler@npm:0.25.0-rc-f65ac7bd-20240826" - checksum: 10c0/ca90218e1d99d32900b4956d0f0b7128cf258947c11d40ed54390b74a46108df9c02bd692d2a0b7a77834f85fd4c199cb889daf29557e149373c537dbeabe77f +"scheduler@npm:0.0.0-experimental-3edc000d-20240926": + version: 0.0.0-experimental-3edc000d-20240926 + resolution: "scheduler@npm:0.0.0-experimental-3edc000d-20240926" + checksum: 10c0/f5812005e9b1a20efbe96eca7baf145c64cf54a35ecf4e98d97329ce6d9f3b38053701823ec920516b6ccf66c2e4425221357962913d3e14fa9dd6d2c553f2a6 languageName: node linkType: hard -"scheduler@npm:0.25.0-rc-f994737d14-20240522": - version: 0.25.0-rc-f994737d14-20240522 - resolution: "scheduler@npm:0.25.0-rc-f994737d14-20240522" - checksum: 10c0/7d538084e6a1c328a90f09d071aaad5fb04ab8343655c4831e664a59003c6165c355c58333ba83ef045a010b8ce99d1595d6a7e700fe56ab693b2f52c084d2c1 +"scheduler@npm:0.25.0-rc-65a56d0e-20241020": + version: 0.25.0-rc-65a56d0e-20241020 + resolution: "scheduler@npm:0.25.0-rc-65a56d0e-20241020" + checksum: 10c0/0af8bef9b23d26f6d8929ef3eb3c78ac3af8edbd1a54d522c2bbd8da236f3639ab2201a8f2612bf349b1e8f5ace5816f51d751f29f97d390de707670f01ed816 languageName: node linkType: hard @@ -15738,6 +15744,16 @@ __metadata: languageName: node linkType: hard +"strtok3@npm:^8.0.0": + version: 8.1.0 + resolution: "strtok3@npm:8.1.0" + dependencies: + "@tokenizer/token": "npm:^0.3.0" + peek-readable: "npm:^5.1.4" + checksum: 10c0/e999dda4ea423773c7da01f19bd156f07ce3d88fe1fc92557d18a5c95cd56e1223d0cd501e743de88db047d58c71b8e52af28b1a465b501ab28c719bf26ed4ff + languageName: node + linkType: hard + "style-loader@npm:^3.3.1": version: 3.3.4 resolution: "style-loader@npm:3.3.4" @@ -16024,6 +16040,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.9": + version: 0.2.10 + resolution: "tinyglobby@npm:0.2.10" + dependencies: + fdir: "npm:^6.4.2" + picomatch: "npm:^4.0.2" + checksum: 10c0/ce946135d39b8c0e394e488ad59f4092e8c4ecd675ef1bcd4585c47de1b325e61ec6adfbfbe20c3c2bfa6fd674c5b06de2a2e65c433f752ae170aff11793e5ef + languageName: node + linkType: hard + "tinyqueue@npm:^3.0.0": version: 3.0.0 resolution: "tinyqueue@npm:3.0.0" @@ -16071,6 +16097,16 @@ __metadata: languageName: node linkType: hard +"token-types@npm:^6.0.0": + version: 6.0.0 + resolution: "token-types@npm:6.0.0" + dependencies: + "@tokenizer/token": "npm:^0.3.0" + ieee754: "npm:^1.2.1" + checksum: 10c0/5bf5eba51d63f71f301659ff70ce10ca43e7038364883437d8b4541cc98377e3e56109b11720e25fe51047014efaccdff90eaf6de9a78270483578814b838ab9 + languageName: node + linkType: hard + "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -16121,12 +16157,15 @@ __metadata: languageName: node linkType: hard -"ts-essentials@npm:7.0.3": - version: 7.0.3 - resolution: "ts-essentials@npm:7.0.3" +"ts-essentials@npm:10.0.3": + version: 10.0.3 + resolution: "ts-essentials@npm:10.0.3" peerDependencies: - typescript: ">=3.7.0" - checksum: 10c0/ea1919534ec6ce4ca4d9cb0ff1ab8e053509237da8d4298762ab3bfba4e78ca5649a599ce78a5c7c2624f3a7a971f62b265b7b0c3c881336e4fa6acaf6f37544 + typescript: ">=4.5.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1bbad8241d8db1ebe4b2eb8f3c984b879de24b14ea42010fcbbc71d9a61a4e3ccd95f7a22c8c0709e2cad578fe1722012e9fbf74420a2ca3fc840565d0b8eb9d languageName: node linkType: hard @@ -16199,9 +16238,9 @@ __metadata: languageName: node linkType: hard -"tsx@npm:4.17.0": - version: 4.17.0 - resolution: "tsx@npm:4.17.0" +"tsx@npm:4.19.2": + version: 4.19.2 + resolution: "tsx@npm:4.19.2" dependencies: esbuild: "npm:~0.23.0" fsevents: "npm:~2.3.3" @@ -16211,7 +16250,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: 10c0/ad720b81d6447c7695d24c27947fa1a2b6db9d2ef03216389edd6fa0006aa479bc0d8348a1ac9975a08edef4ce791ff5629a24d8dccbb0987f42e5407785cfa4 + checksum: 10c0/63164b889b1d170403e4d8753a6755dec371f220f5ce29a8e88f1f4d6085a784a12d8dc2ee669116611f2c72757ac9beaa3eea5c452796f541bdd2dc11753721 languageName: node linkType: hard @@ -16378,6 +16417,13 @@ __metadata: languageName: node linkType: hard +"uint8array-extras@npm:^1.3.0": + version: 1.4.0 + resolution: "uint8array-extras@npm:1.4.0" + checksum: 10c0/eaffd3388634b7e5e1496073b878dd19136043137d3e7e0d2a453e37f566a5a551e640819e1a6596c6df9b9d1f7b70884cc29db6a357bdd424811f3598d504dd + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -16549,7 +16595,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": +"uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: