refactor: delete unused components

This commit is contained in:
Benno Tielen 2025-02-21 15:29:07 +01:00
parent d6ecb21300
commit 1b19989710
25 changed files with 0 additions and 767 deletions

View file

@ -1,13 +0,0 @@
import type { Meta, StoryObj } from '@storybook/react'
import { BannerText } from './BannerText'
const meta: Meta<typeof BannerText> = {
component: BannerText,
}
type Story = StoryObj<typeof BannerText>
export default meta
export const Default: Story = {
args: {},
}

View file

@ -1,18 +0,0 @@
import styles from './bannerText.module.css'
import { faustina, defaultFont } from '@/assets/fonts'
export const BannerText = () => {
return (
<div className={faustina.className + ' ' + styles.container}>
<div className={styles.catholic}>KATHOLISCHE</div>
<div className={styles.name}>
PFARREI <br />
HEILIGE <br />
DREI KÖNIGE <br />
</div>
<div className={styles.berlin + ' ' + defaultFont.className}>
Berlin Nord-Neukölln
</div>
</div>
)
}

View file

@ -1,59 +0,0 @@
.catholic {
font-weight: 600;
font-size: 35px;
position: relative;
bottom: -15px;
left: 10px;
animation: slidein 0.3s backwards;
animation-delay: 0.5s;
}
.container {
position: absolute;
bottom: 100px;
color: #ffffff;
}
.name {
font-weight: 600;
font-size: 120px;
line-height: 105px;
padding: 20px 0;
animation: slidein 0.2s backwards;
animation-delay: 1s;
}
.berlin {
position: relative;
left: 10px;
animation: slidein 0.3s backwards;
animation-delay: 1.5s;
}
@keyframes slidein {
from {
transform: translateX(-150%);
}
to {
transform: translateX(0);
}
}
@media screen and (max-width: 420px) {
.name {
font-size: 42px;
line-height: 42px;
padding: 5px 0;
}
.catholic {
font-size: 18px;
bottom: 0;
left: 0;
}
.berlin {
left: 0;
}
}

View file

@ -1,15 +0,0 @@
import { Meta, StoryObj } from '@storybook/react'
import { Card } from './Card'
const meta: Meta<typeof Card> = {
component: Card,
}
type Story = StoryObj<typeof Card>
export default meta
export const Default: Story = {
args: {
children: <>Some content</>,
},
}

View file

@ -1,9 +0,0 @@
import styles from './styles.module.css'
type CardProps = {
children?: JSX.Element | JSX.Element[]
}
export const Card = ({ children }: CardProps) => {
return <div className={styles.card}>{children}</div>
}

View file

@ -1,6 +0,0 @@
.card {
height: 260px;
width: 240px;
box-shadow: 0 0 11px 0 rgba(79, 66, 79, 0.26);
background-color: #ffffff;
}

View file

@ -1,19 +0,0 @@
.splash-bg {
background-color: #8d5fd3;
}
.splash {
height: 80vh;
background: url('bg.svg') center center;
background-size: cover;
color: #ffffff;
padding: 20px;
position: relative;
}
.stars {
position: absolute;
top: 0;
left: 0;
z-index: 0;
}

View file

@ -1,15 +0,0 @@
import type { Meta, StoryObj } from '@storybook/react'
import { HomeBanner } from '@/components/archive/HomeBanner/HomeBanner'
const meta: Meta<typeof HomeBanner> = {
component: HomeBanner,
}
type Story = StoryObj<typeof HomeBanner>
export default meta
export const Default: Story = {
args: {
stars: 50,
},
}

View file

@ -1,84 +0,0 @@
import React, {
forwardRef,
useCallback,
useEffect,
useImperativeHandle,
useRef,
} from 'react'
import './HomeBanner.css'
type HomeBannerProps = {
children?: React.ReactNode
stars: number
}
export type HomeBannerHandle = {
newStar: () => void
}
export const HomeBanner = forwardRef<HomeBannerHandle, HomeBannerProps>(
function HomeBanner({ children, stars }: HomeBannerProps, ref) {
const canvasRef = useRef<HTMLCanvasElement>(null)
const containerRef = useRef<HTMLDivElement>(null)
const drawStarAtPosition = useCallback(
(ctx: CanvasRenderingContext2D, x: number, y: number) => {
let r = 2.5 * Math.random()
//Draw the stars;
ctx.beginPath()
ctx.fillStyle = 'white'
ctx.arc(x, y, r, 0, Math.PI * 2)
ctx.fill()
},
[],
)
const drawStar = useCallback(
(ctx: CanvasRenderingContext2D) => {
//Random position and size of stars;
let x = ctx.canvas.width * Math.random()
let y = ctx.canvas.height * Math.random()
drawStarAtPosition(ctx, x, y)
},
[drawStarAtPosition],
)
useImperativeHandle(ref, () => {
return {
newStar() {
const context = canvasRef.current?.getContext('2d')
if (context) {
drawStar(context)
}
},
}
}, [drawStar])
useEffect(() => {
if (canvasRef.current) {
canvasRef.current.width =
containerRef.current?.clientWidth || window.innerWidth
canvasRef.current.height = 0.8 * window.innerHeight
}
const context = canvasRef.current?.getContext('2d')
if (context) {
for (let i = 0; i < stars; i++) {
//Glow effect;
context.shadowBlur = 10
context.shadowColor = 'white'
setTimeout(() => drawStar(context), i * 100)
}
}
}, [drawStar, stars])
return (
<div className="splash-bg" ref={containerRef}>
<canvas ref={canvasRef} className="stars"></canvas>
<div className="splash">{children}</div>
</div>
)
},
)

View file

@ -1,150 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1280"
height="720"
viewBox="0 0 338.66667 190.5"
version="1.1"
id="svg1"
inkscape:version="1.3.1 (9b9bdc1480, 2023-11-25, custom)"
sodipodi:docname="bg2.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:lockguides="false"
inkscape:zoom="1.0476431"
inkscape:cx="869.09368"
inkscape:cy="315.94729"
inkscape:window-width="3368"
inkscape:window-height="1376"
inkscape:window-x="72"
inkscape:window-y="1107"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
showgrid="true">
<inkscape:grid
id="grid1"
units="mm"
originx="0"
originy="0"
spacingx="1"
spacingy="1"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<linearGradient
id="linearGradient8"
inkscape:collect="always">
<stop
style="stop-color:#b380ff;stop-opacity:1"
offset="0"
id="stop8" />
<stop
style="stop-color:#5fd3bc;stop-opacity:0;"
offset="1"
id="stop9" />
</linearGradient>
<linearGradient
id="linearGradient6"
inkscape:collect="always">
<stop
style="stop-color:#5fd3bc;stop-opacity:1;"
offset="0"
id="stop6" />
<stop
style="stop-color:#5fd3bc;stop-opacity:0;"
offset="1"
id="stop7" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6"
id="linearGradient7"
x1="11.633274"
y1="180.37541"
x2="185.67206"
y2="-7.3487453"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.99320034,0,0,1.0022678,1.7447527,6.0845905e-4)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient8"
id="linearGradient9"
x1="329.23218"
y1="182.37346"
x2="226.32838"
y2="17.87619"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0022746,0,0,1,7.7762959e-4,0)" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="display:none;fill:#8d5fd3;fill-opacity:1;stroke-width:0.264832"
id="rect3"
width="338.71875"
height="190.45135"
x="0.089720808"
y="-0.030377436" />
<path
style="fill:#5fd3bc;fill-opacity:1;stroke-width:0.264583"
d="m 123.81562,155.12003 34.30109,-17.03714 40.81875,19.87171 -18.75878,28.51298 -51.8867,-3.49732 z"
id="path6" />
<path
style="fill:#8787de;fill-opacity:1;stroke-width:0.264269"
d="m -0.102359,160.41197 72.554869,-32.2325 126.91331,60.8393 -199.03795731,1.50639 z"
id="path4"
sodipodi:nodetypes="ccccc" />
<path
style="fill:#afafe9;fill-opacity:1;stroke-width:0.264583"
d="m 126.81453,190.57041 c 6.23387,-2.16904 151.87751,-93.709178 151.87751,-93.709178 l 60.12563,39.370248 -0.78639,53.91102 z"
id="path5"
sodipodi:nodetypes="ccccc" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
style="display:inline"
sodipodi:insensitive="true">
<rect
style="fill:url(#linearGradient9);fill-opacity:1;stroke-width:0.264884"
id="rect7"
width="339.0639"
height="190.00063"
x="-0.34187973"
y="0.55117559" />
<rect
style="display:inline;fill:url(#linearGradient7);fill-opacity:1;stroke-width:0.26398"
id="rect6"
width="338.85544"
height="190.7338"
x="0.019881012"
y="-0.26830679"
inkscape:label="rect6" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -1,52 +0,0 @@
import type { Meta, StoryObj } from '@storybook/react'
import { MassTimer } from './MassTimer'
import { fn } from '@storybook/test'
const meta: Meta<typeof MassTimer> = {
component: MassTimer,
}
type Story = StoryObj<typeof MassTimer>
export default meta
export const OneDay: Story = {
args: {
nextMass: {
id: '1',
location: {
id: "d",
name: "St. Richard",
address: "Wegstraße 12",
updatedAt: "2025-08-23T15:00:00.000Z",
createdAt: '2025-08-23T15:00:00.000Z',
},
date: '2025-08-23T15:00:00.000Z',
type: 'WORD',
cancelled: false,
createdAt: '2025-08-23T15:00:00.000Z',
updatedAt: '2025-08-23T15:00:00.000Z',
},
onStarClick: fn(),
},
}
export const TimeOut: Story = {
args: {
nextMass: {
id: '1',
location: {
id: "d",
name: "St. Richard",
address: "Wegstraße 12",
updatedAt: "2025-08-23T15:00:00.000Z",
createdAt: '2025-08-23T15:00:00.000Z',
},
date: '2025-08-23T15:00:00.000Z',
type: 'WORD',
cancelled: false,
createdAt: '2025-08-23T15:00:00.000Z',
updatedAt: '2025-08-23T15:00:00.000Z',
},
onStarClick: fn(),
},
}

View file

@ -1,56 +0,0 @@
'use client'
import { useCountdown } from '@/components/archive/MassTimer/useCountdown'
import styles from './masstimer.module.css'
import { useState } from 'react'
import { MassTimerTooltip } from '@/components/archive/MassTimerTooltip/MassTimerTooltip'
import { Worship } from '@/payload-types'
type MassTimerProps = {
nextMass: Worship
/**
* Optional click handler
*/
onStarClick?: () => void
}
export const MassTimer = ({ nextMass, onStarClick }: MassTimerProps) => {
const [displayTooltip, setDisplayTooltip] = useState<boolean>(false)
const [days, hours, minutes, seconds] = useCountdown(
new Date(nextMass.date).getTime(),
)
return (
<div className={styles.container}>
<div>
<button
className={styles.starButton}
type={'button'}
onClick={onStarClick}
>
🌟
</button>
<span
onMouseEnter={() => setDisplayTooltip(true)}
suppressHydrationWarning={true}
>
{days}T {hours}S {minutes}M {seconds}S
</span>
</div>
<div
className={styles.tooltip}
style={{
visibility: displayTooltip ? 'visible' : 'hidden',
opacity: displayTooltip ? 1 : 0,
transition: 'ease-out 0.2s',
}}
onMouseLeave={() => setDisplayTooltip(false)}
>
<MassTimerTooltip nextMass={nextMass} />
</div>
</div>
)
}

View file

@ -1,20 +0,0 @@
.container {
position: relative;
width: 145px;
}
.starButton {
background: none;
border: none;
margin-right: 5px;
}
.starButton:hover {
cursor: pointer;
}
.tooltip {
position: absolute;
right: 0;
top: 35px;
}

View file

@ -1,39 +0,0 @@
import { useEffect, useState } from 'react'
/**
* Countdown until targetDate,
* return an array of four numbers representing the
* number of days, hours, minutes and seconds until targetDate
*
*/
const useCountdown = (targetDate: number) => {
const [countDown, setCountDown] = useState(targetDate - new Date().getTime())
useEffect(() => {
if (countDown > 0) {
setTimeout(() => setCountDown(countDown - 1000), 1000)
} else {
setCountDown(0)
}
}, [countDown])
return getDaysHoursMinutesAndSeconds(countDown)
}
/**
* Return an array of four numbers, representing the
* numbers days, hours, minutes and seconds
*/
const getDaysHoursMinutesAndSeconds = (countDown: number) => {
// calculate time left
const days = Math.floor(countDown / (1000 * 60 * 60 * 24))
const hours = Math.floor(
(countDown % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60),
)
const minutes = Math.floor((countDown % (1000 * 60 * 60)) / (1000 * 60))
const seconds = Math.floor((countDown % (1000 * 60)) / 1000)
return [days, hours, minutes, seconds]
}
export { useCountdown }

View file

@ -1,29 +0,0 @@
import type { Meta, StoryObj } from '@storybook/react'
import { MassTimerTooltip } from './MassTimerTooltip'
const meta: Meta<typeof MassTimerTooltip> = {
component: MassTimerTooltip,
}
type Story = StoryObj<typeof MassTimerTooltip>
export default meta
export const Default: Story = {
args: {
nextMass: {
id: "12",
date: '2024-08-23T15:00:00.000Z',
location: {
id: "d",
name: "St. Richard",
address: "Wegstraße 12",
updatedAt: "2025-08-23T15:00:00.000Z",
createdAt: '2025-08-23T15:00:00.000Z',
},
type: "MASS",
cancelled: false,
updatedAt: '2025-08-23T15:00:00.000Z',
createdAt: '2025-08-23T15:00:00.000Z'
}
},
}

View file

@ -1,29 +0,0 @@
import styles from './massTimerTooltip.module.css'
import clara from './clara.svg'
import Image from 'next/image'
import { Worship } from '@/payload-types'
import { useTime } from '@/hooks/useTime'
import { useLocationName } from '@/hooks/useLocationName'
import { useCompactDate } from '@/hooks/useCompactDate'
type MassTimerTooltipProps = {
nextMass: Worship
}
export const MassTimerTooltip = ({ nextMass }: MassTimerTooltipProps) => {
const time = useTime(nextMass.date)
const location = useLocationName(nextMass.location)
const date = useCompactDate(nextMass.date)
return (
<div className={styles.tooltip}>
<div className={styles.church}>
<Image src={clara} width={75} height={75} alt={''} />
</div>
<div>
Die nächste Messe is am {date} um {time} Uhr in {location}.
</div>
</div>
)
}

View file

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="120"
height="120"
viewBox="0 0 120 120"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer2">
<path
id="path1"
style="fill:#555555;stroke-width:1.60965"
d="m 42.761659,6.1722208 v 3.627996 h -4.879246 v 1.5279092 h 4.866672 V 26.846143 L 21.006255,64.119566 V 186.45283 H 181.97111 V 99.531834 L 112.21714,89.552843 86.964115,74.406226 V 62.509917 h 4.637171 l 0.0032,-1.600218 h -4.640347 v -3.555687 h -1.559346 v 3.624852 h -4.879248 v 1.531053 h 4.866673 V 73.777455 L 66.076412,89.873941 V 64.119566 L 44.321008,26.824136 v -15.49601 h 4.637169 l 0.0032,-1.5970722 h -4.640388 v -3.558833 z"
clip-path="none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 905 B

View file

@ -1,32 +0,0 @@
.tooltip {
width: 310px;
padding: 20px;
color: #4d4d4d;
background: rgb(244, 244, 244);
background: linear-gradient(
40deg,
rgba(244, 244, 244, 1) 0%,
rgba(228, 228, 228, 1) 100%
);
border: solid 1px #dddddd;
border-radius: 6px;
display: flex;
gap: 20px;
align-items: center;
}
.church {
width: 75px;
height: 75px;
border-radius: 50%;
flex-shrink: 0;
background-color: #f6f6f6;
border: solid 2px #c2c2c2;
transition: background-color 200ms ease-in;
overflow: clip;
}
.church:hover {
cursor: pointer;
background-color: #fff318;
}

View file

@ -1,23 +0,0 @@
import { Meta, StoryObj } from '@storybook/react'
import { MassTitle } from './MassTitle'
const meta: Meta<typeof MassTitle> = {
component: MassTitle,
}
type Story = StoryObj<typeof MassTitle>
export default meta
export const Default: Story = {
args: {
title: 'Mittwoch der 19. Woche im Jahreskreis',
cancelled: false,
},
}
export const Cancelled: Story = {
args: {
title: 'Mittwoch der 19. Woche im Jahreskreis',
cancelled: true,
},
}

View file

@ -1,26 +0,0 @@
import classNames from 'classnames'
import { faustina } from '@/assets/fonts'
import styles from './styles.module.css'
import { Pill } from '@/components/Pill/Pill'
type MassTitleProps = {
title: string
cancelled: boolean
}
export const MassTitle = ({ title, cancelled }: MassTitleProps) => {
return (
<div>
<div className={styles.mass}>
Gottesdienst {cancelled && <Pill>ABGESAGT</Pill>}
</div>
<h1
className={classNames(faustina.className, styles.title, {
[styles.cancelled]: cancelled,
})}
>
{title}
</h1>
</div>
)
}

View file

@ -1,14 +0,0 @@
.title {
font-size: 48px;
font-weight: 700;
margin-block-start: -10px;
}
.mass {
font-size: 16px;
font-weight: 700;
}
.cancelled {
text-decoration: line-through;
}

View file

@ -1,13 +0,0 @@
import { Meta, StoryObj } from '@storybook/react'
import { MenuBaseLayer } from '@/components/archive/MenuBaseLayer/MenuBaseLayer'
const meta: Meta<typeof MenuBaseLayer> = {
component: MenuBaseLayer,
}
type Story = StoryObj<typeof MenuBaseLayer>
export default meta
export const Default: Story = {
args: {},
}

View file

@ -1,5 +0,0 @@
import styles from './style.module.css'
export const MenuBaseLayer = () => {
return <div className={styles.background}></div>
}

View file

@ -1,9 +0,0 @@
<svg width="952" height="348" viewBox="0 0 952 348" fill="none" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 348V0H952V153.638L0 348Z" fill="url(#paint0_linear_13_7)" fill-opacity="0.5"/>
<defs>
<linearGradient id="paint0_linear_13_7" x1="907.131" y1="1.77536e-05" x2="16.2387" y2="104.935" gradientUnits="userSpaceOnUse">
<stop stop-color="#A790EA"/>
<stop offset="1" stop-color="#3BEBB9"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 455 B

View file

@ -1,10 +0,0 @@
.background {
width: 100%;
height: 340px;
background-image: url('bg.svg');
background-size: 100% 100%;
position: absolute;
top: 0;
left: 0;
z-index: -1;
}