add itens

This commit is contained in:
2025-04-17 11:43:26 -03:00
parent af15518b21
commit 1f9754f681
12 changed files with 204 additions and 161 deletions

View File

@@ -5,69 +5,28 @@ import {
} from '@headlessui/react' } from '@headlessui/react'
import { ChevronDownIcon } from '@heroicons/react/24/solid' import { ChevronDownIcon } from '@heroicons/react/24/solid'
export function FAQ() { export function Faq({ topics }) {
return ( return (
<> <>
<ListItem defaultOpen={false}> {topics?.map((topic, idx) => (
<ListButton>1. Introdução</ListButton> <ListItem defaultOpen={false} key={idx}>
<ListPanel> <ListButton>
<p> {idx + 1}. {topic}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit </ListButton>
amet neque id libero semper vulputate a ut ex. Pellentesque semper <ListPanel>
ultrices mi in efficitur. <p>
</p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit
<p> amet neque id libero semper vulputate a ut ex. Pellentesque semper
Nulla sit amet quam eu neque convallis volutpat. Pellentesque eu ultrices mi in efficitur.
commodo sem. Suspendisse ac lobortis massa, ac mattis mauris. </p>
Integer malesuada bibendum ante, sed consequat augue convallis et. <p>
</p> Nulla sit amet quam eu neque convallis volutpat. Pellentesque eu
</ListPanel> commodo sem. Suspendisse ac lobortis massa, ac mattis mauris.
</ListItem> Integer malesuada bibendum ante, sed consequat augue convallis et.
<ListItem> </p>
<ListButton>2. Aspectos gerais dos primeiros socorros</ListButton> </ListPanel>
<ListPanel> </ListItem>
<p> ))}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit
amet neque id libero semper vulputate a ut ex. Pellentesque semper
ultrices mi in efficitur.
</p>
<p>
Nulla sit amet quam eu neque convallis volutpat. Pellentesque eu
commodo sem. Suspendisse ac lobortis massa, ac mattis mauris.
Integer malesuada bibendum ante, sed consequat augue convallis et.
</p>
</ListPanel>
</ListItem>
<ListItem>
<ListButton>3. Sinais vitais e avaliação primária</ListButton>
<ListPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit
amet neque id libero semper vulputate a ut ex. Pellentesque semper
ultrices mi in efficitur.
</p>
<p>
Nulla sit amet quam eu neque convallis volutpat. Pellentesque eu
commodo sem. Suspendisse ac lobortis massa, ac mattis mauris.
Integer malesuada bibendum ante, sed consequat augue convallis et.
</p>
</ListPanel>
</ListItem>
<ListItem>
<ListButton>4. Parada cardiorrespiratória</ListButton>
<ListPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sit
amet neque id libero semper vulputate a ut ex. Pellentesque semper
ultrices mi in efficitur.
</p>
<p>
Nulla sit amet quam eu neque convallis volutpat. Pellentesque eu
commodo sem. Suspendisse ac lobortis massa, ac mattis mauris.
Integer malesuada bibendum ante, sed consequat augue convallis et.
</p>
</ListPanel>
</ListItem>
</> </>
) )
} }

View File

@@ -1,13 +1,32 @@
import { defineCollection, z } from 'astro:content' import { defineCollection, z, reference } from 'astro:content'
import { glob } from 'astro/loaders' import { glob } from 'astro/loaders'
const trainers = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/data/trainers' }),
schema: z.object({
name: z.string(),
bio: z.string(),
}),
})
const courses = defineCollection({ const courses = defineCollection({
loader: glob({ pattern: '**/*.md', base: './src/data/courses' }), loader: glob({ pattern: '**/*.md', base: './src/data/courses' }),
schema: z.object({ schema: z.object({
id: z.string(), id: z.string(),
title: z.string(), title: z.string(),
slug: z.string(), slug: z.string(),
course: z.object({
hours: z.number(),
modules: z.array(z.string()),
trainer: reference('trainers').optional(),
}),
seo: z
.object({
tags: z.array(z.string()),
})
.optional(),
draft: z.boolean().default(true),
}), }),
}) })
export const collections = { courses } export const collections = { trainers, courses }

View File

@@ -1,7 +1,20 @@
--- ---
id: '96c03c32-089c-4ccb-8aa1-73b0f49228b9' id: 96c03c32-089c-4ccb-8aa1-73b0f49228b9
title: 'Lei Lucas' title: Lei Lucas
slug: 'lei-lucas' slug: lei-lucas
--- draft: false
asdasdas course:
hours: 8
modules:
- Introdução à Lei Lucas
- Aspectos gerais dos primeiros socorros
- Sinais vitais e avaliação primária
- Parada cardiorrespiratória (PCR)
- Hemorragias e controle
- Queimaduras
- Engasgo e manobra de Heimlich
- fraturas, luxações e entorses
- Emergências traumáticas
- Convulsões e desmaios
---

View File

@@ -1,7 +1,23 @@
--- ---
id: '450a70ca-8ab5-4520-8a22-0e277359797d' id: 450a70ca-8ab5-4520-8a22-0e277359797d
title: 'NR-18 PEMT Plataforma Móvel de Trabalho Aéreo' title: NR-18 PEMT Plataforma Móvel de Trabalho Aéreo
slug: 'nr-18-plataforma-de-trabalho-aereo' slug: nr-18-plataforma-de-trabalho-aereo
draft: false
seo:
tags:
- test
course:
hours: 4
trainer: francis
modules:
- Aspectos regulamentares e legais da NR-18
- Tipos construtivos das PEMTs, aplicações, características técnicas e operacionais
- Acidentes previsíveis com PEMTs e como evitá-los
- Plano de segurança da operação PSO
- Manutenção mínima de segurança nas PEMTs
- Noções de primeiros socorros
--- ---
asdasdas asdasdas

View File

@@ -1,7 +1,15 @@
--- ---
id: 'e1c44881-2fe3-484e-ada2-12b6bf5b9398' id: e1c44881-2fe3-484e-ada2-12b6bf5b9398
title: 'NR-35 Trabalho em Altura' title: NR-35 Trabalho em Altura
slug: 'nr-35-trabalhos-em-altura-teorico' slug: nr-35-trabalhos-em-altura-teorico
--- draft: false
asdasdas course:
hours: 8
trainer: francis
modules:
- Introdução
- Aspectos gerais dos primeiros socorros
- Sinais vitais e avaliação primária
- Parada cardiorrespiratória
---

View File

@@ -0,0 +1,10 @@
---
title: 'Prevenção na segurança do trabalho: um investimento que salva vidas'
slug: prevencao-na-seguranca-do-trabalho
---
Prevenção na segurança do trabalho ainda é vista por muitas empresas como um custo. No entanto, a verdade é que prevenir não é apenas mais barato — é vital. Reagir após um acidente pode custar milhões, impactar a imagem da empresa e, o mais grave, custar vidas humanas.
Quando falamos de segurança do trabalho, a frase “prevenir é melhor do que remediar” não é apenas um clichê. É uma realidade que salva vidas, preserva famílias e evita prejuízos financeiros gigantescos para as empresas. Apesar disso, muitas organizações ainda enxergam a prevenção como um gasto, e não como um investimento estratégico.
Neste artigo, vamos explorar por que essa visão precisa mudar com urgência. Afinal, reagir a um acidente de trabalho pode custar infinitamente mais — em dinheiro, em reputação e, mais grave ainda, em vidas humanas.

View File

@@ -0,0 +1,9 @@
---
name: Francis Ricardo Baretta
bio:
Francis Ricardo Baretta é Engenheiro em Segurança do Trabalho e Engenheiro Eletricista com registro no CREA SC 126693-0. Além disso, possui formação acadêmica pela Universidade Regional de Blumenau (FURB) em Engenharia de Telecomunicações e Engenharia Elétrica, além de estar cursando Pós-Graduação em Engenharia de Segurança do Trabalho pela UNIASSELVI.
Participou de cursos e atividades complementares, incluindo NR-10, NR-35, eficiência energética, gerenciamento de projetos, energia fotovoltaica e treinamento de ferramentas de gestão avançadas.
networks:
- linkedin: https://www.linkedin.com/in/francis-ricardo-baretta-5262ab11a/
---

View File

@@ -1,9 +1,15 @@
--- ---
import '../styles/app.css' export interface Props {
import { Regular as Logo } from '@components/Logo' title: string
import { Container } from '@components/Container' }
import { Menu } from '@components/Menu'
import '~/styles/app.css'
import { Regular as Logo } from '~/components/Logo'
import { Container } from '~/components/Container'
import { Menu } from '~/components/Menu'
import { ArrowLeftStartOnRectangleIcon } from '@heroicons/react/24/solid' import { ArrowLeftStartOnRectangleIcon } from '@heroicons/react/24/solid'
const { title } = Astro.props
--- ---
<!doctype html> <!doctype html>
@@ -13,7 +19,9 @@ import { ArrowLeftStartOnRectangleIcon } from '@heroicons/react/24/solid'
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<title>EDUSEG&reg; &mdash; Educação que garante sua segurança</title> <title>
{title} &dash; EDUSEG&reg; &mdash; Educação que garante sua segurança
</title>
</head> </head>
<body> <body>

View File

@@ -1,24 +1,25 @@
--- ---
import Layout from '@layouts/Layout.astro' import { Picture } from 'astro:assets'
import { Picture, Image } from 'astro:assets' import Layout from '~/layouts/Layout.astro'
import { Container } from '@components/Container' import { Container } from '~/components/Container'
import { FAQ } from '@components/FAQ' import { Faq } from '~/components/Faq'
import { StarIcon, ClockIcon } from '@heroicons/react/24/outline' import { StarIcon, ClockIcon } from '@heroicons/react/24/outline'
import { CheckBadgeIcon } from '@heroicons/react/24/solid' import { CheckBadgeIcon } from '@heroicons/react/24/solid'
import { LinkedInIcon } from '@components/LinkedInIcon' import { LinkedInIcon } from '~/components/LinkedInIcon'
import nr18plataforma from '../assets/nr18-plataforma.png' import nr18plataforma from '~/assets/nr18-plataforma.png'
import mulherdenegocios from '../assets/mulher-de-negocios.png' import mulherdenegocios from '~/assets/mulher-de-negocios.png'
import homemdenegocios from '../assets/homem-de-negocios.png' import homemdenegocios from '~/assets/homem-de-negocios.png'
import francis from '../assets/francis.jpeg' import francis from '~/assets/francis.jpeg'
import Natura from '../assets/natura.svg' import Natura from '~/assets/natura.svg'
import Nissan from '../assets/nissan.svg' import Nissan from '~/assets/nissan.svg'
import Kordsa from '../assets/kordsa.svg' import Kordsa from '~/assets/kordsa.svg'
import Manserv from '../assets/manserv.svg' import Manserv from '~/assets/manserv.svg'
import Semeq from '../assets/semeq.svg' import Semeq from '~/assets/semeq.svg'
import { getCollection, render } from 'astro:content'
import { getCollection, getEntry } from 'astro:content'
export async function getStaticPaths() { export async function getStaticPaths() {
const posts = await getCollection('courses') const posts = await getCollection('courses', ({ data }) => data.draft != true)
return posts.map((course) => { return posts.map((course) => {
return { return {
@@ -27,12 +28,17 @@ export async function getStaticPaths() {
} }
}) })
} }
// 2. For your template, you can get the entry directly from the prop
const { course } = Astro.props const {
const { Content } = await render(course) course: { data },
} = Astro.props
const trainer = data.course?.trainer
? await getEntry(data.course?.trainer)
: null
--- ---
<Layout> <Layout title={data.title}>
<Container className="py-3 lg:py-12 lg:flex items-center gap-5"> <Container className="py-3 lg:py-12 lg:flex items-center gap-5">
<Picture <Picture
src={nr18plataforma} src={nr18plataforma}
@@ -44,7 +50,7 @@ const { Content } = await render(course)
<div class="space-y-5"> <div class="space-y-5">
<span class="font-medium">Curso de formação</span> <span class="font-medium">Curso de formação</span>
<h1 class="text-pretty font-semibold text-4xl lg:text-7xl"> <h1 class="text-pretty font-semibold text-4xl lg:text-7xl">
{course.data.title} {data.title}
</h1> </h1>
<p class="text-base/6"> <p class="text-base/6">
NR 18 PEMT capacita operadores de plataformas elevatórias para NR 18 PEMT capacita operadores de plataformas elevatórias para
@@ -55,7 +61,7 @@ const { Content } = await render(course)
<ul class="lg:flex gap-3"> <ul class="lg:flex gap-3">
<li class="flex gap-1"> <li class="flex gap-1">
<ClockIcon className="w-5" /> <ClockIcon className="w-5" />
<span>Carga horária de 40 horas</span> <span>Carga horária de {data.course.hours} horas</span>
</li> </li>
<li class="flex gap-1"> <li class="flex gap-1">
@@ -217,49 +223,45 @@ const { Content } = await render(course)
</p> </p>
</div> </div>
<div class="lg:col-span-2 flex flex-col gap-1.5"> <div class="lg:col-span-2 flex flex-col gap-1.5">
<FAQ client:load /> <Faq topics={data.course.modules} client:load />
</div> </div>
</Container> </Container>
<Container> {
<div class="bg-white/10 rounded-2xl p-2.5 lg:py-6 xl:py-24"> trainer && (
<div class="lg:w-8/12 flex max-lg:flex-col gap-5 mx-auto"> <Container>
<div class="shrink-0"> <div class="bg-white/10 rounded-2xl p-2.5 lg:py-6 xl:py-24">
<Picture <div class="lg:w-8/12 flex max-lg:flex-col gap-5 mx-auto">
src={francis} <div class="shrink-0">
alt="Francis Ricardo Baretta" <Picture
formats={['webp']} src={francis}
class="rounded-xl size-32 outline-2 outline-offset-2 outline-lime-400" alt="Francis Ricardo Baretta"
/> formats={['webp']}
</div> class="rounded-xl size-32 outline-2 outline-offset-2 outline-lime-400"
<div class="space-y-2.5"> />
<h5 class="text-xl text-pretty">Quem é o instrutor?</h5> </div>
<h5 class="text-4xl lg:text-5xl text-pretty"> <div class="space-y-2.5">
Francis Ricardo Baretta <h5 class="text-xl text-pretty">Quem é o instrutor?</h5>
</h5> <h5 class="text-4xl lg:text-5xl text-pretty">
<p class="text-sm/6 text-white/70"> {trainer.data.name}
Francis Ricardo Baretta é Engenheiro em Segurança do Trabalho e </h5>
Engenheiro Eletricista com registro no CREA SC 126693-0. Além disso,
possui formação acadêmica pela Universidade Regional de Blumenau {trainer.data.bio.split(/\r?\n/).map((x) => (
(FURB) em Engenharia de Telecomunicações e Engenharia Elétrica, além <p class="text-sm/6 text-white/70">{x}</p>
de estar cursando Pós-Graduação em Engenharia de Segurança do ))}
Trabalho pela UNIASSELVI.
</p> <div class="flex">
<p class="text-sm/6 text-white/70"> <a
Participou de cursos e atividades complementares, incluindo NR-10, href="https://www.linkedin.com/in/francis-ricardo-baretta-5262ab11a/"
NR-35, eficiência energética, gerenciamento de projetos, energia target="_blank"
fotovoltaica e treinamento de ferramentas de gestão avançadas. >
</p> <LinkedInIcon className="fill-white/70 w-6" />
<div class="flex"> </a>
<a </div>
href="https://www.linkedin.com/in/francis-ricardo-baretta-5262ab11a/" </div>
target="_blank"
>
<LinkedInIcon className="fill-white/70 w-6" />
</a>
</div> </div>
</div> </div>
</div> </Container>
</div> )
</Container> }
</Layout> </Layout>

View File

View File

@@ -1,23 +1,23 @@
--- ---
import Layout from '@layouts/Layout.astro' import { Picture } from 'astro:assets'
import { Picture, Image } from 'astro:assets' import Layout from '~/layouts/Layout.astro'
import { Container } from '@components/Container' import { Container } from '~/components/Container'
import { FAQ } from '@components/FAQ' import { Faq } from '~/components/Faq'
import { StarIcon, ClockIcon } from '@heroicons/react/24/outline' import { StarIcon, ClockIcon } from '@heroicons/react/24/outline'
import { CheckBadgeIcon } from '@heroicons/react/24/solid' import { CheckBadgeIcon } from '@heroicons/react/24/solid'
import { LinkedInIcon } from '@components/LinkedInIcon' import { LinkedInIcon } from '~/components/LinkedInIcon'
import nr18plataforma from '../assets/nr18-plataforma.png' import nr18plataforma from '~/assets/nr18-plataforma.png'
import mulherdenegocios from '../assets/mulher-de-negocios.png' import mulherdenegocios from '~/assets/mulher-de-negocios.png'
import homemdenegocios from '../assets/homem-de-negocios.png' import homemdenegocios from '~/assets/homem-de-negocios.png'
import francis from '../assets/francis.jpeg' import francis from '~/assets/francis.jpeg'
import Natura from '../assets/natura.svg' import Natura from '~/assets/natura.svg'
import Nissan from '../assets/nissan.svg' import Nissan from '~/assets/nissan.svg'
import Kordsa from '../assets/kordsa.svg' import Kordsa from '~/assets/kordsa.svg'
import Manserv from '../assets/manserv.svg' import Manserv from '~/assets/manserv.svg'
import Semeq from '../assets/semeq.svg' import Semeq from '~/assets/semeq.svg'
--- ---
<Layout> <Layout title="">
<Container className="py-3 lg:py-12 lg:flex items-center gap-5"> <Container className="py-3 lg:py-12 lg:flex items-center gap-5">
<Picture <Picture
src={nr18plataforma} src={nr18plataforma}
@@ -202,7 +202,7 @@ import Semeq from '../assets/semeq.svg'
</p> </p>
</div> </div>
<div class="lg:col-span-2 flex flex-col gap-1.5"> <div class="lg:col-span-2 flex flex-col gap-1.5">
<FAQ client:load /> <Faq topics={[]} client:load />
</div> </div>
</Container> </Container>

View File

@@ -7,8 +7,7 @@
"jsxImportSource": "react", "jsxImportSource": "react",
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@components/*": ["src/components/*"], "~/*": ["src/*"]
"@layouts/*": ["src/layouts/*"]
}, },
"strictNullChecks": true "strictNullChecks": true
} }