initial import

This commit is contained in:
2023-12-27 15:45:49 +01:00
commit c0b7458bf7
20 changed files with 7918 additions and 0 deletions

14
app/layout.tsx Normal file
View File

@@ -0,0 +1,14 @@
import '@/app/ui/global.css';
import { inter } from '@/app/ui/fonts';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={`${inter.className} antialiased`}>{children}</body>
</html>
);
}

2
app/lib/actions.ts Normal file
View File

@@ -0,0 +1,2 @@
'use server';

25
app/lib/sql-shim.ts Normal file
View File

@@ -0,0 +1,25 @@
import { Client, QueryResult, QueryResultRow } from 'pg';
const client = new Client({
// connectionString: process.env.DATABASE_URL,
host: process.env.POSTGRES_HOST,
user: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
database: process.env.POSTGRES_DB
});
client.connect();
/** an adapter function which simulates @vercel/postgres `sql` function */
export function sql<T extends QueryResultRow>(strings: TemplateStringsArray, ...values: any[]): Promise<QueryResult<T>> {
// string values need to be wrapped in single quotes
const fixedValues = values.map((value) => {
if (typeof value === 'string') {
return `'${value}'`;
}
return value;
});
const query = String.raw(strings, ...fixedValues);
return client.query<T>(query);
}

51
app/page.tsx Normal file
View File

@@ -0,0 +1,51 @@
import Link from 'next/link';
import styles from '@/app/ui/home.module.css';
import { lusitana } from './ui/fonts';
import Image from 'next/image';
import {
Cog8ToothIcon
} from '@heroicons/react/24/outline';
export default function Page() {
return (
<main className="flex min-h-screen flex-col p-6 bg-base-300">
<div className="card card-compact card-bordered max-w-[36em] bg-base-100 shadow-s my-1">
<div className="card-body">
<h2 className="card-title">2023-05 Budakova <Cog8ToothIcon className="h-[1em] w-[1em] absolute right-4 cursor-pointer" /></h2>
<div className="card-actions">
<div className="badge badge-lg badge-success cursor-pointer">GDKG</div>
<div className="badge badge-lg badge-neutral cursor-pointer">HEP Elektra</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Iskon</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Plinara</div>
</div>
</div>
</div>
<div className="card card-compact card-bordered max-w-[36em] bg-base-100 shadow-s my-1">
<div className="card-body">
<h2 className="card-title">2023-05 Kopernikova <Cog8ToothIcon className="h-[1em] w-[1em] absolute right-4 cursor-pointer" /></h2>
<div className="card-actions">
<div className="badge badge-lg badge-success cursor-pointer">GDKG</div>
<div className="badge badge-lg badge-neutral cursor-pointer">HEP Elektra</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Iskon</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Plinara</div>
</div>
</div>
</div>
<div className="card card-compact card-bordered max-w-[36em] bg-base-100 shadow-s my-1">
<div className="card-body">
<h2 className="card-title">2023-05 Šišićeva <Cog8ToothIcon className="h-[1em] w-[1em] absolute right-4 cursor-pointer" /></h2>
<div className="card-actions">
<div className="badge badge-lg badge-success cursor-pointer">GDKG</div>
<div className="badge badge-lg badge-neutral cursor-pointer">HEP Elektra</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Iskon</div>
<div className="badge badge-lg badge-neutral cursor-pointer">Plinara</div>
</div>
</div>
</div>
</main>
);
}

19
app/ui/button.tsx Normal file
View File

@@ -0,0 +1,19 @@
import clsx from 'clsx';
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
children: React.ReactNode;
}
export function Button({ children, className, ...rest }: ButtonProps) {
return (
<button
{...rest}
className={clsx(
'flex h-10 items-center rounded-lg bg-blue-500 px-4 text-sm font-medium text-white transition-colors hover:bg-blue-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500 active:bg-blue-600 aria-disabled:cursor-not-allowed aria-disabled:opacity-50',
className,
)}
>
{children}
</button>
);
}

4
app/ui/fonts.ts Normal file
View File

@@ -0,0 +1,4 @@
import { Inter, Lusitana } from 'next/font/google';
export const inter = Inter({ subsets: ['latin'] });
export const lusitana = Lusitana({ weight: ["400", "700"], subsets: ['latin'] });

18
app/ui/global.css Normal file
View File

@@ -0,0 +1,18 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
input[type='number'] {
-moz-appearance: textfield;
appearance: textfield;
}
input[type='number']::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}

7
app/ui/home.module.css Normal file
View File

@@ -0,0 +1,7 @@
.shape {
height: 0;
width: 0;
border-bottom: 30px solid indigo;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
}