new updates
This commit is contained in:
parent
60233483b2
commit
a57b4213d2
7 changed files with 218 additions and 28 deletions
|
|
@ -22,4 +22,4 @@ Em qualquer das modalidades, o processo de filiação é realizado mediante o pr
|
|||
|
||||
### Treinadores
|
||||
|
||||
Todos os interessados em acompanhar o(s) seu(s) atleta(s) na sala de aquecimento em dias de competição, deverão proceder à submissão da Ficha de Afiliação de Treinador [neste formulário](https://docs.google.com/forms/d/e/1FAIpQLSewmaQoyk6qfVimEgoEv9Jay_S7ItOOFOYKIat56CZgSrTVVQ/viewform) e na [página oficial da APP na rede social Instagram.](https://www.instagram.com/aportugalpowerlifting), de forma a lhes ser atribuída uma credencial, sem a qual não será permitida a circulação na área de aquecimento.
|
||||
Todos os interessados em acompanhar o(s) seu(s) atleta(s) na sala de aquecimento em dias de competição, deverão proceder à submissão da Ficha de Afiliação de Treinador [neste formulário](https://docs.google.com/forms/d/e/1FAIpQLSewmaQoyk6qfVimEgoEv9Jay_S7ItOOFOYKIat56CZgSrTVVQ/viewform) e na [página oficial da APP na rede social Instagram](https://www.instagram.com/aportugalpowerlifting), de forma a lhes ser atribuída uma credencial, sem a qual não será permitida a circulação na área de aquecimento.
|
||||
144
package-lock.json
generated
144
package-lock.json
generated
|
|
@ -16,6 +16,7 @@
|
|||
"react-dom": "19.2.3",
|
||||
"react-markdown": "^10.1.0",
|
||||
"rehype-autolink-headings": "^7.1.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"rehype-slug": "^6.0.0",
|
||||
"remark-gfm": "^4.0.1"
|
||||
},
|
||||
|
|
@ -4293,6 +4294,26 @@
|
|||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-from-parse5": {
|
||||
"version": "8.0.3",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
|
||||
"integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"@types/unist": "^3.0.0",
|
||||
"devlop": "^1.0.0",
|
||||
"hastscript": "^9.0.0",
|
||||
"property-information": "^7.0.0",
|
||||
"vfile": "^6.0.0",
|
||||
"vfile-location": "^5.0.0",
|
||||
"web-namespaces": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-heading-rank": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz",
|
||||
|
|
@ -4319,6 +4340,44 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-parse-selector": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
|
||||
"integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-raw": {
|
||||
"version": "9.1.0",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
|
||||
"integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"@types/unist": "^3.0.0",
|
||||
"@ungap/structured-clone": "^1.0.0",
|
||||
"hast-util-from-parse5": "^8.0.0",
|
||||
"hast-util-to-parse5": "^8.0.0",
|
||||
"html-void-elements": "^3.0.0",
|
||||
"mdast-util-to-hast": "^13.0.0",
|
||||
"parse5": "^7.0.0",
|
||||
"unist-util-position": "^5.0.0",
|
||||
"unist-util-visit": "^5.0.0",
|
||||
"vfile": "^6.0.0",
|
||||
"web-namespaces": "^2.0.0",
|
||||
"zwitch": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-to-jsx-runtime": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
|
||||
|
|
@ -4346,6 +4405,25 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-to-parse5": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
|
||||
"integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"comma-separated-tokens": "^2.0.0",
|
||||
"devlop": "^1.0.0",
|
||||
"property-information": "^7.0.0",
|
||||
"space-separated-tokens": "^2.0.0",
|
||||
"web-namespaces": "^2.0.0",
|
||||
"zwitch": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-to-string": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
|
||||
|
|
@ -4372,6 +4450,23 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hastscript": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
|
||||
"integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"comma-separated-tokens": "^2.0.0",
|
||||
"hast-util-parse-selector": "^4.0.0",
|
||||
"property-information": "^7.0.0",
|
||||
"space-separated-tokens": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/hermes-estree": {
|
||||
"version": "0.25.1",
|
||||
"resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
|
||||
|
|
@ -4399,6 +4494,16 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/html-void-elements": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
|
||||
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/htmlparser2": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
|
||||
|
|
@ -7095,6 +7200,21 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/rehype-raw": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
|
||||
"integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hast": "^3.0.0",
|
||||
"hast-util-raw": "^9.0.0",
|
||||
"vfile": "^6.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/rehype-slug": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz",
|
||||
|
|
@ -8312,6 +8432,20 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/vfile-location": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
|
||||
"integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/unist": "^3.0.0",
|
||||
"vfile": "^6.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/vfile-message": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
|
||||
|
|
@ -8326,6 +8460,16 @@
|
|||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/web-namespaces": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
|
||||
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/whatwg-encoding": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
"react-dom": "19.2.3",
|
||||
"react-markdown": "^10.1.0",
|
||||
"rehype-autolink-headings": "^7.1.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"rehype-slug": "^6.0.0",
|
||||
"remark-gfm": "^4.0.1"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -118,8 +118,14 @@ p { font-size: 1rem; line-height: 1.6; color: var(--foreground); }
|
|||
max-width: 100%;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-word;
|
||||
hyphens: auto;
|
||||
hyphens: none;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.markdown-content * {
|
||||
word-break: normal;
|
||||
hyphens: none;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.markdown-content h1,
|
||||
.markdown-content h2,
|
||||
|
|
@ -160,12 +166,21 @@ p { font-size: 1rem; line-height: 1.6; color: var(--foreground); }
|
|||
margin-bottom: 0.75rem;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: normal;
|
||||
hyphens: none;
|
||||
-webkit-hyphenate-character: "";
|
||||
}
|
||||
.markdown-content ul { padding-left: 1.25rem; list-style: disc; }
|
||||
.markdown-content ol { padding-left: 1.25rem; list-style: decimal; }
|
||||
.markdown-content li {
|
||||
word-break: normal;
|
||||
hyphens: none;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
.markdown-content a {
|
||||
text-decoration: underline;
|
||||
word-break: break-all;
|
||||
word-break: normal;
|
||||
overflow-wrap: break-word;
|
||||
color: #0066cc;
|
||||
}
|
||||
|
||||
|
|
@ -258,6 +273,16 @@ p { font-size: 1rem; line-height: 1.6; color: var(--foreground); }
|
|||
display: block;
|
||||
}
|
||||
|
||||
/* Markdown iframes */
|
||||
.markdown-iframe {
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
height: 600px;
|
||||
margin: 1.5rem 0;
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
/* Layout utilities */
|
||||
.container {
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -68,10 +68,9 @@ export default function PtHome() {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<a className="btn btn-primary px-4" href="/pt/competicoes/calendario" aria-label="Ver calendário oficial">Ver calendário</a>
|
||||
<a className="btn btn-outline px-4" href="/pt/competicoes/resultados" aria-label="Ver resultados oficiais">Resultados</a>
|
||||
<a className="btn btn-outline px-4" href="/pt/perguntas" aria-label="Ver perguntas frequentes">FAQ</a>
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
<a className="btn bg-[var(--color-red)] text-white hover:opacity-90 px-4 text-center" href="/pt/competicoes/resultados" aria-label="Ver resultados oficiais">Resultados</a>
|
||||
<a className="btn bg-[var(--color-green)] text-white hover:opacity-90 px-4 text-center" href="/pt/competicoes/calendario" aria-label="Ver fotos das competições">Fotos</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,11 @@
|
|||
import React, { useEffect, useState } from "react";
|
||||
|
||||
type Meet = { id: string; name: string; date?: string; location?: string; signupUrl?: string };
|
||||
type Event = { title: string; date?: string; location?: string; signupUrl?: string };
|
||||
|
||||
export function ListView() {
|
||||
const [meets, setMeets] = useState<Meet[]>([]);
|
||||
const [future, setFuture] = useState<Meet[]>([]);
|
||||
const [meets, setMeets] = useState<Meet[]>([]);
|
||||
const [future, setFuture] = useState<Event[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
|
|
@ -23,23 +24,39 @@ export function ListView() {
|
|||
return (
|
||||
<section aria-labelledby="list-title">
|
||||
<h2 id="list-title" className="text-xl font-semibold">Lista de Competições</h2>
|
||||
<ul className="mt-2 space-y-2">
|
||||
{future.map((m) => (
|
||||
<li key={`future-${m.name}`} className="border p-3">
|
||||
<strong>{m.name}</strong>
|
||||
{m.date && <span className="ml-2">{m.date}</span>}
|
||||
{m.location && <span className="ml-2">— {m.location}</span>}
|
||||
{m.signupUrl && (
|
||||
<a className="ml-3 underline" href={m.signupUrl} target="_blank" rel="noopener noreferrer">Inscrição</a>
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
{meets.map((m) => (
|
||||
<li key={m.id} className="border p-3">
|
||||
<strong>{m.name}</strong>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
{future.length > 0 && (
|
||||
<div className="mt-6">
|
||||
<h3 className="text-lg font-semibold text-green-700 mb-3">Próximas Competições</h3>
|
||||
<ul className="space-y-2">
|
||||
{future.map((m) => (
|
||||
<li key={`future-${m.title}`} className="border-l-4 border-l-green-500 bg-green-50 p-3">
|
||||
<strong>{m.title}</strong>
|
||||
{m.date && <span className="ml-2 text-gray-700">{m.date}</span>}
|
||||
{m.location && <span className="ml-2 text-gray-700">— {m.location}</span>}
|
||||
{m.signupUrl && (
|
||||
<a className="ml-3 underline text-green-600 hover:text-green-800" href={m.signupUrl} target="_blank" rel="noopener noreferrer">Inscrição</a>
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{meets.length > 0 && (
|
||||
<div className="mt-6">
|
||||
<h3 className="text-lg font-semibold text-gray-600 mb-3">Competições Passadas</h3>
|
||||
<ul className="space-y-2">
|
||||
{meets.map((m) => (
|
||||
<li key={m.id} className="border-l-4 border-l-gray-300 bg-gray-50 p-3">
|
||||
<strong className="text-gray-700">{m.name}</strong>
|
||||
{m.date && <span className="ml-2 text-gray-600">{m.date}</span>}
|
||||
{m.location && <span className="ml-2 text-gray-600">— {m.location}</span>}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import type { Components } from "react-markdown";
|
|||
import remarkGfm from "remark-gfm";
|
||||
import rehypeSlug from "rehype-slug";
|
||||
import rehypeAutolinkHeadings from "rehype-autolink-headings";
|
||||
import rehypeRaw from "rehype-raw";
|
||||
|
||||
type MarkdownRendererProps = {
|
||||
contentPath: string;
|
||||
|
|
@ -86,13 +87,16 @@ export function MarkdownRenderer({ contentPath, onHeadings }: MarkdownRendererPr
|
|||
img: ({ src, alt, ...props }) => (
|
||||
<img src={src} alt={alt || ""} className="markdown-img" loading="lazy" {...props} />
|
||||
),
|
||||
iframe: ({ src, ...props }: any) => (
|
||||
<iframe src={src} className="markdown-iframe" {...props} />
|
||||
),
|
||||
};
|
||||
|
||||
return (
|
||||
<article ref={articleRef} className="markdown-content" aria-label="Conteúdo">
|
||||
<ReactMarkdown
|
||||
remarkPlugins={[remarkGfm]}
|
||||
rehypePlugins={[rehypeSlug, [rehypeAutolinkHeadings, { behavior: "wrap" }]]}
|
||||
rehypePlugins={[rehypeRaw, rehypeSlug, [rehypeAutolinkHeadings, { behavior: "wrap" }]]}
|
||||
components={components}
|
||||
>
|
||||
{source}
|
||||
|
|
|
|||
Loading…
Reference in a new issue