Recent Overhaul to content structure, simplifying, read README #1
|
@ -1,5 +1,5 @@
|
|||
<script lang="ts">
|
||||
export let clazz: string = "";
|
||||
export let clazz = "w-8";
|
||||
</script>
|
||||
|
||||
<svg
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
<section class=" sm:inline-flex space-x-1">
|
||||
<a
|
||||
class="brand-icon"
|
||||
class="btn-icon hover:variant-soft-primary"
|
||||
href="{config.instagram}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
|
@ -32,7 +32,7 @@
|
|||
<i class="fa-brands fa-instagram text-lg" />
|
||||
</a>
|
||||
<a
|
||||
class="brand-icon"
|
||||
class="btn-icon hover:variant-soft-primary"
|
||||
href="{config.facebook}"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
|
@ -53,8 +53,4 @@
|
|||
</AppBar>
|
||||
|
||||
<style lang="postcss">
|
||||
|
||||
.brand-icon {
|
||||
@apply btn-icon hover:variant-soft-primary;
|
||||
}
|
||||
</style>
|
|
@ -4,7 +4,7 @@
|
|||
export let item: any = {};
|
||||
</script>
|
||||
|
||||
<a href="/sluzby/{item.id}" class="w-72 card variant-glass-secondary mx-2 my-4 duration-500 hover:scale-105 hover:shadow-xl shadow-md">
|
||||
<a href="/sluzby/{item.id}" id="{item.id}"class="w-72 card variant-glass-secondary mx-2 my-4 duration-500 hover:scale-105 hover:shadow-xl shadow-md">
|
||||
<header>
|
||||
<img src={getImageLink({id: item.id, w: 288, h: 320 })} class="bg-black/50 object-cover aspect-[9/10] rounded-t-xl" alt="Post" />
|
||||
</header>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
<script lang="ts">
|
||||
import type { Service } from '$lib/types/service';
|
||||
import ServiceCard from '$lib/components/services/ServiceCard.svelte';
|
||||
|
@ -30,13 +31,13 @@
|
|||
|
||||
|
||||
<style lang="postcss">
|
||||
.services-container {
|
||||
/* .services-container {
|
||||
@apply grid md:grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 p-4;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.services-container {
|
||||
@apply grid-cols-1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
</style>
|
|
@ -8,3 +8,18 @@ export const author = 'Klára Morinová';
|
|||
export const email = 'klara@kkosmetickysalon.cz';
|
||||
export const facebook = 'https://www.facebook.com/jack.morin.712';
|
||||
export const instagram = 'https://www.instagram.com/kkosmetickysalon/';
|
||||
|
||||
// prettier-ignore
|
||||
export const socialLinks = [
|
||||
{ title: 'Instagram', href: 'https://www.instagram.com/kkosmetickysalon/', icon: 'fa-brands fa-linkedin'},
|
||||
{ title: 'Phone', href: 'tel:+420792304497', icon: './MatrixLogo' },
|
||||
{ title: 'Facebook', href: 'hhttps://www.facebook.com/jack.morin.712', icon: 'fa-brands fa-facebook'},
|
||||
{ title: 'Email', href: 'klara@kkosmetickysalon.cz', icon: 'fa-regular fa-envelope'},
|
||||
];
|
||||
|
||||
// Routes
|
||||
export const NavRoutes = [
|
||||
{ title: 'Home', href: '/' },
|
||||
{ title: 'Sluzby', href: '/Sluzby' },
|
||||
{ title: 'O-mne', href: '/o-mne' }
|
||||
];
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<script lang="ts">
|
||||
|
||||
// Styleshit
|
||||
import '../app.postcss';
|
||||
import '$src/app.postcss';
|
||||
|
||||
// Font Gruesome
|
||||
import '@fortawesome/fontawesome-free/css/fontawesome.css';
|
||||
|
@ -9,7 +9,12 @@
|
|||
import '@fortawesome/fontawesome-free/css/solid.css';
|
||||
|
||||
// Components & Utilities
|
||||
import { AppShell } from '@skeletonlabs/skeleton';
|
||||
import { AppShell, Drawer, initializeStores, getDrawerStore } from '@skeletonlabs/skeleton';
|
||||
import { } from '@skeletonlabs/skeleton';
|
||||
|
||||
initializeStores();
|
||||
const drawerStore = getDrawerStore();
|
||||
$: positionClasses = $drawerStore.open ? 'translate-x-[50%]' : '';
|
||||
import { page } from '$app/stores';
|
||||
|
||||
// Floating UI for Popups
|
||||
|
@ -42,12 +47,17 @@
|
|||
}
|
||||
};
|
||||
|
||||
// Scroll heading into view
|
||||
function scrollHeadingIntoView(): void {
|
||||
if (!window.location.hash) return;
|
||||
const elemTarget: HTMLElement | null = document.querySelector(window.location.hash);
|
||||
if (elemTarget) elemTarget.scrollIntoView({ behavior: 'smooth' });
|
||||
};
|
||||
|
||||
// Scroll to anchor
|
||||
$: if ($page.url.pathname) {
|
||||
// Workaround until https://github.com/sveltejs/kit/issues/2664 is fixed
|
||||
if (typeof window !== 'undefined' && window.location.hash) {
|
||||
const deepLinkedElement = document.getElementById(window.location.hash.substring(1));
|
||||
if (deepLinkedElement) {
|
||||
deepLinkedElement.scrollIntoView();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- SEO -->
|
||||
|
@ -80,7 +90,9 @@
|
|||
|
||||
<!-- <Analytics /> -->
|
||||
<!-- App Shell -->
|
||||
<AppShell>
|
||||
<Drawer />
|
||||
|
||||
<AppShell class="transition-transform {positionClasses}">
|
||||
<svelte:fragment slot="header">
|
||||
<MainHeader />
|
||||
</svelte:fragment>
|
|
@ -1,13 +1,20 @@
|
|||
import { error } from '@sveltejs/kit';
|
||||
import { IG_API_KEY } from '$env/static/private';
|
||||
import { RequestHandler} from './$types';
|
||||
|
||||
export async function GET() {
|
||||
try {
|
||||
const response = await fetch(`https://graph.instagram.com/me/media?fields=id,media_type,media_url,caption,timestamp&access_token=${IG_API_KEY}`);
|
||||
const data = await response.json();
|
||||
return new Response(JSON.stringify(data));
|
||||
} catch (err) {
|
||||
console.log('Error: ', err);
|
||||
throw error(500, 'Error retrieving Instagram data');
|
||||
}
|
||||
export const POST: RequestHandler = async ({ request }) => {
|
||||
try {
|
||||
const { next } = await request.json();
|
||||
const response = await fetch(next, {
|
||||
method: 'GET',
|
||||
});
|
||||
const data = await response.json();
|
||||
return new Response(data, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.log('Error: ', err);
|
||||
error(500, 'Error retrieving data in /api/instagram.json');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
// === THANKS TO https://github.com/rodneylab/sveltekit-hcaptcha-form/blob/main/src/routes/api/verify/%2Bserver.js
|
||||
// I cleaned it and converted to TS
|
||||
import { HCAPTCHA_SECRETKEY } from '$env/static/private';
|
||||
import { PUBLIC_HCAPTCHA_SITEKEY } from '$env/static/public';
|
||||
import { RequestHandler } from './$types';
|
||||
|
||||
export const POST: RequestHandler = async ({ request }) => {
|
||||
try {
|
||||
const { name, email, message, response: hCaptchaClientResponse } = await request.json();
|
||||
|
||||
// const secret = HCAPTCHA_SECRETKEY;
|
||||
// const sitekey = PUBLIC_HCAPTCHA_SITEKEY;
|
||||
const body = new URLSearchParams({ response: hCaptchaClientResponse, HCAPTCHA_SECRETKEY, PUBLIC_HCAPTCHA_SITEKEY });
|
||||
|
||||
const response = await fetch('https://hcaptcha.com/siteverify', {
|
||||
method: 'POST',
|
||||
credentials: 'omit',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
body: body.toString(),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
const { success } = data;
|
||||
console.log('data: ', data);
|
||||
if (success) {
|
||||
console.log('hCaptcha says yes!');
|
||||
} else {
|
||||
console.log('hCaptcha says no!');
|
||||
}
|
||||
|
||||
// process name, email and message here e.g. email site admin with message details
|
||||
console.log({ name, email, message });
|
||||
|
||||
return new Response('OK');
|
||||
} catch (err) {
|
||||
const error = `HCaptcha Error in /verify.json.js: ${err}`;
|
||||
console.error(error);
|
||||
return {
|
||||
status: 500,
|
||||
error,
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import { error } from '@sveltejs/kit';
|
||||
import { IG_ACCESS_TOKEN } from '$env/static/private';
|
||||
import { PageServerLoad} from './$types';
|
||||
|
||||
|
||||
export const load: PageServerLoad = async () => {
|
||||
try {
|
||||
const url = `https://graph.instagram.com/me/media?fields=caption,id,media_type,media_url,timestamp&access_token=${IG_ACCESS_TOKEN}`;
|
||||
const response = await fetch(url, {
|
||||
method: 'GET',
|
||||
});
|
||||
const data = await response.json();
|
||||
return new Response(data, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.log('Error: ', err);
|
||||
throw error(500, 'Error retrieving Instagram data');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
<script lang="ts">
|
||||
import { PUBLIC_MAPBOX_ACCESS_TOKEN } from '$env/static/public';
|
||||
|
||||
|
||||
</script>
|
|
@ -0,0 +1,97 @@
|
|||
<!--
|
||||
This is just a very simple page with a button to throw an example error.
|
||||
Feel free to delete this file and the entire sentry route.
|
||||
-->
|
||||
|
||||
<script>
|
||||
import * as Sentry from '@sentry/sveltekit';
|
||||
|
||||
function getSentryData() {
|
||||
Sentry.startSpan({
|
||||
name: 'Example Frontend Span',
|
||||
op: 'test',
|
||||
}, async () => {
|
||||
const res = await fetch('/sentry-example');
|
||||
if (!res.ok) {
|
||||
throw new Error('Sentry Example Frontend Error');
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<head>
|
||||
<title>Sentry Onboarding</title>
|
||||
<meta name="description" content="Test Sentry for your SvelteKit app!" />
|
||||
</head>
|
||||
|
||||
<main>
|
||||
<h1>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 44">
|
||||
<path
|
||||
fill="currentColor"
|
||||
d="M124.32,28.28,109.56,9.22h-3.68V34.77h3.73V15.19l15.18,19.58h3.26V9.22h-3.73ZM87.15,23.54h13.23V20.22H87.14V12.53h14.93V9.21H83.34V34.77h18.92V31.45H87.14ZM71.59,20.3h0C66.44,19.06,65,18.08,65,15.7c0-2.14,1.89-3.59,4.71-3.59a12.06,12.06,0,0,1,7.07,2.55l2-2.83a14.1,14.1,0,0,0-9-3c-5.06,0-8.59,3-8.59,7.27,0,4.6,3,6.19,8.46,7.52C74.51,24.74,76,25.78,76,28.11s-2,3.77-5.09,3.77a12.34,12.34,0,0,1-8.3-3.26l-2.25,2.69a15.94,15.94,0,0,0,10.42,3.85c5.48,0,9-2.95,9-7.51C79.75,23.79,77.47,21.72,71.59,20.3ZM195.7,9.22l-7.69,12-7.64-12h-4.46L186,24.67V34.78h3.84V24.55L200,9.22Zm-64.63,3.46h8.37v22.1h3.84V12.68h8.37V9.22H131.08ZM169.41,24.8c3.86-1.07,6-3.77,6-7.63,0-4.91-3.59-8-9.38-8H154.67V34.76h3.8V25.58h6.45l6.48,9.2h4.44l-7-9.82Zm-10.95-2.5V12.6h7.17c3.74,0,5.88,1.77,5.88,4.84s-2.29,4.86-5.84,4.86Z M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z"
|
||||
/>
|
||||
</svg>
|
||||
</h1>
|
||||
<p>
|
||||
Get Started with this <strong>simple Example:</strong>
|
||||
</p>
|
||||
|
||||
<p>1. Send us a sample error:</p>
|
||||
<button
|
||||
type="button"
|
||||
on:click={getSentryData}>
|
||||
Throw error!
|
||||
</button>
|
||||
|
||||
<p>
|
||||
2. Look for the error on the
|
||||
<a href="https://none-b0c3fadae.sentry.io/issues/?project=4506871754326016">Issues Page</a>.
|
||||
</p>
|
||||
<p style="margin-top: 24px;">
|
||||
For more information, take a look at the
|
||||
<a href="https://docs.sentry.io/platforms/javascript/guides/sveltekit/">
|
||||
Sentry SvelteKit Documentation
|
||||
</a>
|
||||
</p>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 4rem;
|
||||
margin: 14px 0;
|
||||
}
|
||||
|
||||
svg {
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 12px;
|
||||
cursor: pointer;
|
||||
background-color: rgb(54, 45, 89);
|
||||
border-radius: 4px;
|
||||
border: none;
|
||||
color: white;
|
||||
font-size: 1em;
|
||||
margin: 1em;
|
||||
transition: all 0.25s ease-in-out;
|
||||
}
|
||||
button:hover {
|
||||
background-color: #8c5393;
|
||||
box-shadow: 4px;
|
||||
box-shadow: 0px 0px 15px 2px rgba(140, 83, 147, 0.5);
|
||||
}
|
||||
button:active {
|
||||
background-color: #c73852;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,6 @@
|
|||
// This is just a very simple API route that throws an example error.
|
||||
// Feel free to delete this file and the entire sentry route.
|
||||
|
||||
export const GET = async () => {
|
||||
throw new Error("Sentry Example API Route Error");
|
||||
};
|
|
@ -1,22 +1,22 @@
|
|||
<script lang="ts">
|
||||
import ServicesLayout from '$lib/components/services/ServicesLayout.svelte';
|
||||
import type { Service } from '$lib/types/service';
|
||||
let id: string;
|
||||
export const id = '';
|
||||
|
||||
// Locally populated services
|
||||
let services: Service[] = [
|
||||
{
|
||||
category: 'Permanentní make-up',
|
||||
items: [
|
||||
{ name: 'Obočí Pudrové, Ombré', id: 'oboci',price: 3000, duration: 2.5 },
|
||||
{ name: 'Horní linky - meziřasové přirozené', id: 'linky', price: 2000, duration: 2 },
|
||||
{ name: 'Klasické linky - s ocáskem', id: 'classic-linky', price: 3000, duration: 2.5 },
|
||||
{ name: 'Klasické linky - s ocáskem + spodní linky', id: 'classic-linky+spodni', price: 3500, duration: 2.5 },
|
||||
{ name: 'Rty - kontura', id: 'rty', price: 2500, duration: 2 },
|
||||
{ name: '3D Rty (kontura a stínování), Full Lips (plné rty)', id: '3d-rty', price: 3500, duration: 2.5 },
|
||||
{ name: 'Aquarelle Lips (přirodní stínování, bez kontury)', id: 'aquarelle', price: 3000, duration: 2 },
|
||||
{ name: 'První korekce po aplikaci pmu max. do 3 měsíců', id: 'korekce', price: 1000, duration: 1.5 },
|
||||
{ name: 'Oprava práce obočí jiného salonu', id: 'oprava-oboci', price: 'na domluvě', duration: 'na domluvě' }
|
||||
{ name: 'Obočí Pudrové, Ombré', description: 'Diagnostika pleti, odlíčení tonizace', id: 'oboci',price: 3000, duration: 2.5 },
|
||||
{ name: 'Horní linky - meziřasové přirozené', description: 'Diagnostika pleti, odlíčení tonizace', id: 'linky', price: 2000, duration: 2 },
|
||||
{ name: 'Klasické linky - s ocáskem', description: 'Diagnostika pleti, odlíčení tonizace', id: 'classic-linky', price: 3000, duration: 2.5 },
|
||||
{ name: 'Klasické linky - s ocáskem + spodní linky', description: 'Diagnostika pleti, odlíčení tonizace', id: 'classic-linky+spodni', price: 3500, duration: 2.5 },
|
||||
{ name: 'Rty - kontura', description: 'Diagnostika pleti, odlíčení tonizace', id: 'rty', price: 2500, duration: 2 },
|
||||
{ name: '3D Rty (kontura a stínování), Full Lips (plné rty)', description: 'Diagnostika pleti, odlíčení tonizace', id: '3d-rty', price: 3500, duration: 2.5 },
|
||||
{ name: 'Aquarelle Lips (přirodní stínování, bez kontury)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'aquarelle', price: 3000, duration: 2 },
|
||||
{ name: 'První korekce po aplikaci pmu max. do 3 měsíců', description: 'Diagnostika pleti, odlíčení tonizace', id: 'korekce', price: 1000, duration: 1.5 },
|
||||
{ name: 'Oprava práce obočí jiného salonu', description: 'Diagnostika pleti, odlíčení tonizace', id: 'oprava-oboci', price: 'na domluvě', duration: 'na domluvě' }
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -26,41 +26,41 @@
|
|||
{ name: 'ZÁKLADNÍ + CALM PLUS', description:'Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra dle typu pleti, masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)', id: 'zakladni-calm-plus', price: 600, duration: 1 },
|
||||
{ name: 'RELAXAČNÍ', id: 'relaxacni', description:'Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra, masáž relaxační (tvář,krk dekolt), masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)', price: 690, duration: 1.5 },
|
||||
{ name: 'LIFTINGOVÉ - ANTI AGE', description:'Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, vacupres ošetření – lifting obličeje krku a dekoltu, séra, masky (tvář,krk,dekolt), alginátová maska, závěrečná péče (oční a denní krém)', id: 'liftingove-anti-age', price: 690, duration: 1.5 },
|
||||
{ name: 'CLEAR + ANTI AKNÉ', id: 'clear-anti-akne', price: 690, duration: 1.5 },
|
||||
{ name: 'Odlíčení + sérum + alginátová maska (PROJASNĚNÍ)', id: 'odliceni-serum-alginatova-maska', price: 300, duration: 1 },
|
||||
{ name: 'CLEAR + ANTI AKNÉ', description: 'Diagnostika pleti, odlíčení tonizace', id: 'clear-anti-akne', price: 690, duration: 1.5 },
|
||||
{ name: 'Odlíčení + sérum + alginátová maska (PROJASNĚNÍ)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'odliceni-serum-alginatova-maska', price: 300, duration: 1 },
|
||||
]
|
||||
},
|
||||
{
|
||||
category: 'DALŠÍ VELMI OBLÍBENÉ SLUŽBY',
|
||||
items: [
|
||||
{ name: 'Lifting řas booster (botox)', id: 'lifting-ras-booster', price: 500, duration: 1 },
|
||||
{ name: 'Laminace obočí + výživa', id: 'laminace-oboci-vyziva', price: 500, duration: 1 },
|
||||
{ name: 'Úprava obočí (tvar + barva)', id: 'uprava-oboci-tvar-barva', price: 250, duration: 1 },
|
||||
{ name: 'Úprava obočí + řasy (tvar + barvení)', id: 'uprava-oboci-rasy-tvar-barveni', price: 300, duration: 1 },
|
||||
{ name: 'Lifting řas booster (botox)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'lifting-ras-booster', price: 500, duration: 1 },
|
||||
{ name: 'Laminace obočí + výživa', description: 'Diagnostika pleti, odlíčení tonizace', id: 'laminace-oboci-vyziva', price: 500, duration: 1 },
|
||||
{ name: 'Úprava obočí (tvar + barva)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'uprava-oboci-tvar-barva', price: 250, duration: 1 },
|
||||
{ name: 'Úprava obočí + řasy (tvar + barvení)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'uprava-oboci-rasy-tvar-barveni', price: 300, duration: 1 },
|
||||
]
|
||||
},
|
||||
{
|
||||
category: 'Depilace',
|
||||
items: [
|
||||
{ name: 'Depilace Horní ret', id: 'depilace-horni-ret', price: 80, duration: 0.5 },
|
||||
{ name: 'Depilace Brada', id: 'depilace-brada', price: 80, duration: 0.5 },
|
||||
{ name: 'Depilace Obočí', id: 'depilace-oboci', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Tváře', id: 'depilace-tvare', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Podpaží', id: 'depilace-podpazi', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Předloktí', id: 'depilace-predlokti', price: 200, duration: 0.5 },
|
||||
{ name: 'Depilace Celé ruce', id: 'depilace-cele-ruce', price: 350, duration: 1 },
|
||||
{ name: 'Depilace Lýtka', id: 'depilace-lytka', price: 350, duration: 1 },
|
||||
{ name: 'Depilace Celé nohy', id: 'depilace-cele-nohy', price: 500, duration: 1 }
|
||||
{ name: 'Depilace Horní ret', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-horni-ret', price: 80, duration: 0.5 },
|
||||
{ name: 'Depilace Brada', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-brada', price: 80, duration: 0.5 },
|
||||
{ name: 'Depilace Obočí', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-oboci', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Tváře', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-tvare', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Podpaží', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-podpazi', price: 150, duration: 0.5 },
|
||||
{ name: 'Depilace Předloktí', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-predlokti', price: 200, duration: 0.5 },
|
||||
{ name: 'Depilace Celé ruce', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-cele-ruce', price: 350, duration: 1 },
|
||||
{ name: 'Depilace Lýtka', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-lytka', price: 350, duration: 1 },
|
||||
{ name: 'Depilace Celé nohy', description: 'Diagnostika pleti, odlíčení tonizace', id: 'depilace-cele-nohy', price: 500, duration: 1 }
|
||||
]
|
||||
},
|
||||
{
|
||||
category: 'Vakuslim 48 - zeštíhlující procedura',
|
||||
items: [
|
||||
{ name: 'Ošetření horních končetin', id: 'vakuslim-48-zestihlujici-procedura-horni-koncetiny', price: 600, duration: 2 },
|
||||
{ name: '1 ošetření spodní části těla (břicho, boky, dolní končetiny)', id: 'vakuslim-48-zestihlujici-procedura-spodni-cast-tela', price: 800, duration: 2 },
|
||||
{ name: '1 ošetření komplet horní-dolní části', id: 'vakuslim-48-zestihlujici-procedura-komplet-horni-dolni-cast', price: 1200, duration: 2 },
|
||||
{ name: '6 ošetření předplatné kompet', id: 'vakuslim-48-zestihlujici-procedura-6-o-setreni-predplatne-kompet', price: 6600, duration: 2 },
|
||||
{ name: '12 ošetření předplatné komplet', id: 'vakuslim-48-zestihlujici-procedura-12-o-setreni-predplatne-komplet', price: 11000, duration: 2 }
|
||||
{ name: 'Ošetření horních končetin', description: 'Diagnostika pleti, odlíčení tonizace', id: 'vakuslim-48-zestihlujici-procedura-horni-koncetiny', price: 600, duration: 2 },
|
||||
{ name: '1 ošetření spodní části těla (břicho, boky, dolní končetiny)', description: 'Diagnostika pleti, odlíčení tonizace', id: 'vakuslim-48-zestihlujici-procedura-spodni-cast-tela', price: 800, duration: 2 },
|
||||
{ name: '1 ošetření komplet horní-dolní části', description: 'Diagnostika pleti, odlíčení tonizace', id: 'vakuslim-48-zestihlujici-procedura-komplet-horni-dolni-cast', price: 1200, duration: 2 },
|
||||
{ name: '6 ošetření předplatné kompet', description: 'Diagnostika pleti, odlíčení tonizace', id: 'vakuslim-48-zestihlujici-procedura-6-o-setreni-predplatne-kompet', price: 6600, duration: 2 },
|
||||
{ name: '12 ošetření předplatné komplet', description: 'Diagnostika pleti, odlíčení tonizace', id: 'vakuslim-48-zestihlujici-procedura-12-o-setreni-predplatne-komplet', price: 11000, duration: 2 }
|
||||
]
|
||||
}
|
||||
];
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import adapter from '@sveltejs/adapter-node';
|
||||
import preprocess from 'svelte-preprocess';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://github.com/sveltejs/svelte-preprocess
|
||||
// for more information about preprocessors
|
||||
preprocess: [
|
||||
preprocess({
|
||||
postcss: true
|
||||
}),
|
||||
],
|
||||
kit: {
|
||||
adapter: adapter(),
|
||||
env: {
|
||||
publicPrefix: "PUBLIC_",
|
||||
},
|
||||
|
||||
// https://kit.svelte.dev/docs/configuration#alias
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export default config;
|
|
@ -1,32 +0,0 @@
|
|||
import adapter from '@sveltejs/adapter-node';
|
||||
import { vitePreprocess } from '@sveltejs/kit/vite';
|
||||
import preprocess from 'svelte-preprocess';
|
||||
import { join, dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { Config } from '@sveltejs/kit';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
|
||||
const config: Config = {
|
||||
// Consult https://github.com/sveltejs/svelte-preprocess
|
||||
// for more information about preprocessors
|
||||
preprocess: [
|
||||
preprocess({
|
||||
postcss: true
|
||||
}),
|
||||
vitePreprocess({
|
||||
style: {
|
||||
css: {
|
||||
postcss: join(__dirname, 'postcss.config.cjs')
|
||||
}
|
||||
}
|
||||
})
|
||||
],
|
||||
kit: {
|
||||
adapter: adapter()
|
||||
// https://kit.svelte.dev/docs/configuration#alias
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
Loading…
Reference in New Issue