diff --git a/Caddyfile b/Caddyfile index 9664fdda..bd9a005c 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,18 +1,35 @@ - { - auto_https off + auto_https off } :3000 { - root * /var/docusaurus - encode gzip - try_files {path} {path}/index.html - handle_errors 404 { - rewrite * /404.html - file_server - } - file_server - header -Server - header /blog/feed.json Cache-Control "no-cache" - header /agenda/events.json Cache-Control "no-cache" + root * /var/docusaurus + encode gzip + try_files {path} {path}/index.html + handle_errors 404 { + rewrite * /404.html + file_server + } + file_server + header -Server + + # Caching policy + header /blog/feed.json Cache-Control "no-cache" + header /agenda/events.json Cache-Control "no-cache" + + # Security policy + header { + Content-Security-Policy " + default-src 'self'; + script-src 'self' 'sha256-B3XU3apKRxGUkcZIC2hb7S3n+DLs/vKwgVEnWv1EzR0=' 'sha256-pBkmluod9Ko4GzDfbWgKM/wxzujFXUdGVOePkwOQT+c=' https://gc.zgo.at/count.js; + connect-src 'self' https://search.developer.overheid.nl https://donv1.goatcounter.com; + img-src 'self' data: https://www.geonovum.nl https://social.overheid.nl https://github.com https://avatars.githubusercontent.com https://hostux.social https://i.vimeocdn.com https://www.toegankelijkheidsverklaring.nl; + style-src 'self' 'sha256-biLFinpqYMtWHmXfkA1BPeCY0/fNt46SAZ+BBk5YUog=' 'sha256-DPptftRbDC0ow/ZdJW8fpmEcrpsn75dOuGlyzJJwTgc=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='; + frame-src https://player.vimeo.com youtube.com www.youtube.com;" + Cross-Origin-Opener-Policy: "same-origin" + Cross-Origin-Resource-Policy: "same-site" + Referrer-Policy: "strict-origin-when-cross-origin" + X-Content-Type-Options: "nosniff" + X-Frame-Options: "DENY" + } } diff --git a/Dockerfile b/Dockerfile index 6ee3c94b..c074064a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,13 @@ FROM node:lts AS base ## Disable colour output from yarn to make logs easier to read. ENV FORCE_COLOR=0 +## Install Chromium for Puppeteer +RUN apt-get update && apt-get install -y --no-install-recommends \ + chromium \ + && rm -rf /var/lib/apt/lists/* +# Puppeteer settings +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium ## Update Corepack RUN npm install -g corepack@latest ## Enable corepack. @@ -40,7 +47,9 @@ EXPOSE 3000 CMD ["pnpm", "serve", "--host", "0.0.0.0", "--no-open"] # Stage 3b: Serve with Caddy. -FROM caddy:2.9.1-alpine AS caddy +FROM caddy:2.10.0-alpine AS caddy +## Expose the port that Caddy will run on. +EXPOSE 3000 ## Copy the Caddyfile. COPY --from=prod /opt/docusaurus/Caddyfile /etc/caddy/Caddyfile ## Copy the Docusaurus build output. diff --git a/README.md b/README.md index 0f061b81..028402c9 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Wil je bijdragen aan onze kennisbank, blog en of website. Op de pagina [Bijdrage ### Contact -Neem contact op met ons via een bericht op ons [Slack kanaal](https://codefornl.slack.com/archives/CFV4B3XE2) of stuur een e-mail naar developer.overheid@geonovum.nl. Dan kijken we samen hoe we je bijdrage kunnen vormgeven. +Neem contact op met ons via een bericht op ons [Slack kanaal](https://codefornl.slack.com/archives/CFV4B3XE2) of stuur een e-mail naar . Dan kijken we samen hoe we je bijdrage kunnen vormgeven. ## Lokaal draaien van de website @@ -19,14 +19,19 @@ Daarna kan je de website lokaal draaien. 1. Draai `pnpm install` om te zorgen dat alle afhankelijkheden die Docusaurus nodig heeft beschikbaar zijn 1. Draai `pnpm run start` om te builden en Docusaurus te starten. -Daarna kan je de lokale versie van de site bekijken op `http://localhost:3000/`. +Daarna kan je de lokale versie van de site bekijken op `http://localhost:3000/`. Maak je aanpassingen aan de design tokens, draai `pnpm run build` om de CSS te builden. +Werk je op Windows (WSL) en wil je Mermaid-diagrammen lokaal laten renderen, dan dien je de volgende instructies te volgen: + + ## WCAG pnpm script Het `pnpm run lint:wcag` script vereist extra dependencies die niet in de `package.json` staan om het aantal dependencies beperkt te houden. ### Installatie dependencies + Voer eerst de stappen uit zoals beschreven in `.github/workflows/check-wcag.yml`. Draai daarna: + ``` bash -pnpm run lint:wcag \ No newline at end of file +pnpm run lint:wcag diff --git a/blog/authors.yml b/blog/authors.yml index 741c92fe..3091c1ec 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -1,7 +1,7 @@ joost-farla: name: Joost Farla title: Implementatie ondersteuner - developer.overheid.nl - image_url: https://developer.overheid.nl/img/team/joost-farla.jpg + image_url: /img/team/joost-farla.jpg page: true socials: linkedin: joostfarla @@ -30,7 +30,7 @@ matthijs-hovestad: tom-ootes: name: Tom Ootes title: Developer Advocate - developer.overheid.nl - image_url: https://developer.overheid.nl/img/team/tom-ootes.png + image_url: /img/team/tom-ootes.png page: true socials: linkedin: tootes @@ -49,7 +49,7 @@ martin-van-der-plas: frank-terpstra: name: Frank Terpstra title: Implementatie ondersteuner - developer.overheid.nl - image_url: https://developer.overheid.nl/img/team/frank-terpstra.jpg + image_url: /img/team/frank-terpstra.jpg page: true socials: linkedin: frank-terpstra-1bb5096 @@ -58,7 +58,7 @@ frank-terpstra: jaap-hein-wester: name: Jaap-Hein Wester title: Senior Frontend Developer - developer.overheid.nl - image_url: https://developer.overheid.nl/img/team/jaap-hein-wester.jpg + image_url: /img/team/jaap-hein-wester.jpg page: true socials: linkedin: jaapheinwester @@ -78,7 +78,7 @@ digilab: kennisplatform-apis: name: Kennisplatform API's title: Strategische en tactische vraagstukken rond het ontwikkelen van API's - image_url: https://developer.overheid.nl/static/images/logo_icon_kpa.1787d5b5302a.png + image_url: /img/logo_icon_kpa.1787d5b5302a.png page: true socials: apigov: https://apigov.nl diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 44f8e729..72c70ea7 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,8 +1,9 @@ // import { themes as prismThemes } from "prism-react-renderer"; -import docusaurusTheme from "./src/utils/prismLight" -import type { Config } from "@docusaurus/types"; import type * as Preset from "@docusaurus/preset-classic"; +import type { Config } from "@docusaurus/types"; import remarkDirectiveSugar from "remark-directive-sugar"; +import mermaidPlugin from "./src/plugins/mermaid"; +import docusaurusTheme from "./src/utils/prismLight"; // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) @@ -66,6 +67,12 @@ const config: Config = { onBrokenLinks: "throw", onBrokenMarkdownLinks: "throw", + staticDirectories: ['static', '.docusaurus/mermaid'], + + // Disable because of inline scripts (due to CSP) + // @see https://docusaurus.io/docs/api/docusaurus-config#baseUrlIssueBanner + baseUrlIssueBanner: false, + // Even if you don't use internationalization, you can use this field to set // useful metadata like html lang. For example, if your site is Chinese, you // may want to replace "en" with "zh-Hans". @@ -73,10 +80,7 @@ const config: Config = { defaultLocale: "nl", locales: ["nl"], }, - markdown: { - mermaid: true, - }, - themes: ["@docusaurus/theme-mermaid", "docusaurus-theme-search-typesense"], + themes: ["docusaurus-theme-search-typesense"], plugins: [ [ "@docusaurus/plugin-content-docs", @@ -109,6 +113,7 @@ const config: Config = { // Remove this to remove the "edit this page" links. editUrl: "https://github.com/developer-overheid-nl/don-site/tree/main/", + rehypePlugins: [mermaidPlugin], }, blog: { blogSidebarCount: 0, @@ -128,6 +133,7 @@ const config: Config = { onInlineTags: "throw", onInlineAuthors: "throw", onUntruncatedBlogPosts: "throw", + rehypePlugins: [mermaidPlugin], }, pages: {}, sitemap: {}, @@ -264,20 +270,8 @@ const config: Config = { html: `
- - + -
+
{children}
); diff --git a/src/components/Grid/styles.module.css b/src/components/Grid/styles.module.css index 0c9e5a81..89449364 100644 --- a/src/components/Grid/styles.module.css +++ b/src/components/Grid/styles.module.css @@ -1,6 +1,8 @@ .grid { display: flex; flex-direction: column; + grid-template-columns: 3; + gap: 1rem; } @media (min-width: 45.063rem) { diff --git a/src/css/custom.css b/src/css/custom.css index d62b7685..fafbc078 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -261,12 +261,6 @@ html { } } -.ro-header__site-logo { - float: inline-start; - height: 1.5rem; - margin-inline-end: 0.5rem; -} - .ro-header__site-name { font-size: 1.5rem; margin-block-end: -0.25rem; @@ -299,6 +293,43 @@ html { max-height: 4rem; } +.sponsors__logo__bzk { + forced-color-adjust: none; + background-color: var(--ifm-footer-background-color); +} + +.sponsors__logo__vng .abbr { + color: #f5f5f5; +} + +.sponsors__logo__vng .brdr { + color: #009FE4; +} + +.sponsors__logo__forum .cls-1 { + fill: #e1710d; +} + +.sponsors__logo__forum .cls-2 { + fill: #fefdfd; +} + +@media (forced-colors: active) { + .sponsors__logo__vng .abbr { + color: #004388; + } + + .sponsors__logo__forum .cls-2 { + fill: CanvasText; + } +} + +@media (forced-colors: active) and (prefers-color-scheme: dark) { + .sponsors__logo__vng { + .abbr { color: #f5f5f5; } + } +} + /* fix for aligning rhc card footers */ .rhc-card { justify-content: space-between; diff --git a/src/plugins/mermaid.ts b/src/plugins/mermaid.ts new file mode 100644 index 00000000..5f03b4bd --- /dev/null +++ b/src/plugins/mermaid.ts @@ -0,0 +1,111 @@ +import { createHash } from "crypto"; +import { access, mkdir, readFile } from "fs/promises"; +import { Root } from "hast"; +import path from "path"; +import puppeteer, { Browser } from "puppeteer"; +import { Plugin } from "unified"; +import { visit } from "unist-util-visit"; + +const DIAGRAMS_FOLDER = path.resolve(__dirname, "../../.docusaurus/mermaid/diagrams"); +const DOCUSAURUS_SCRIPT = path.resolve(__dirname, "../../node_modules/mermaid/dist/mermaid.min.js"); + +const mermaidPlugin: Plugin<[], Root> = () => async (tree) => { + try { + await access(DIAGRAMS_FOLDER); + } catch (err) { + await mkdir(DIAGRAMS_FOLDER, { recursive: true }); + } + + const promises: PromiseLike[] = []; + const mermaidScript = await readFile(DOCUSAURUS_SCRIPT, 'utf-8'); + + visit(tree, "element", (node, index, parent) => { + if ( + node.tagName === "code" && + Array.isArray(node.properties.className) && + node.properties.className.includes("language-mermaid") + ) { + const code = + node.children[0].type === "text" ? node.children[0].value : undefined; + + if (!code) { + return; + } + + const hash = createHash("sha256").update(code).digest("hex"); + const imgFileName = `${hash}.png`; + + promises.push( + new Promise(async (resolve) => { + let browser: Browser; + + try { + browser = await puppeteer.launch({ + headless: true, + args: ["--no-sandbox"], + }); + } catch (e) { + console.warn('Mermaid rendering is disabled due to missing dependencies.') + return resolve(); + } + + const page = await browser.newPage(); + await page.setViewport({ width: 1920, height: 1080 }); + + await page.setContent(` + + + + + +
${code}
+ + + + `); + + await page.waitForFunction("window.mermaidDone === true", { + timeout: 5000, + }); + + const svg = await page.$("svg"); + + await svg.screenshot({ + type: "png", + omitBackground: true, + path: `${DIAGRAMS_FOLDER}/${imgFileName}`, + }); + + await page.close(); + await browser.close(); + + parent.children[index] = { + type: "element", + tagName: "img", + properties: { + src: `/diagrams/${imgFileName}`, + }, + children: [], + }; + + resolve(); + }) + ); + } + }); + + await Promise.all(promises); +}; + +export default mermaidPlugin; diff --git a/src/theme/CodeBlock/index.tsx b/src/theme/CodeBlock/index.tsx new file mode 100644 index 00000000..ee2c96ef --- /dev/null +++ b/src/theme/CodeBlock/index.tsx @@ -0,0 +1,17 @@ +import React, {type ReactNode} from 'react'; +import CodeBlock from '@theme-original/CodeBlock'; +import type CodeBlockType from '@theme/CodeBlock'; +import type {WrapperProps} from '@docusaurus/types'; +import BrowserOnly from '@docusaurus/BrowserOnly'; + +type Props = WrapperProps; + +export default function CodeBlockWrapper(props: Props): ReactNode { + return ( + + {() => ( + + )} + + ); +} diff --git a/src/theme/Root.tsx b/src/theme/Root.tsx index 943ff377..3c219d0e 100644 --- a/src/theme/Root.tsx +++ b/src/theme/Root.tsx @@ -1,6 +1,7 @@ import type { PropsWithChildren } from 'react'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import { useLocation } from '@docusaurus/router'; +import SiteLogo from './SiteLogo'; function HomepageLink({ pathname, siteName, tagline, children }: PropsWithChildren) { return ( @@ -21,30 +22,7 @@ function Root({ children }: PropsWithChildren) {
- - - - - - - +

{`${siteConfig.customFields.siteName}`}

{siteConfig.tagline}

diff --git a/src/theme/SiteLogo/index.tsx b/src/theme/SiteLogo/index.tsx new file mode 100644 index 00000000..211727eb --- /dev/null +++ b/src/theme/SiteLogo/index.tsx @@ -0,0 +1,12 @@ +import { type ReactNode } from 'react'; + +import styles from './styles.module.css'; + +export default function SiteLogo(): ReactNode { + return ( + + + + + ) +} diff --git a/src/theme/SiteLogo/styles.module.css b/src/theme/SiteLogo/styles.module.css new file mode 100644 index 00000000..684c79f5 --- /dev/null +++ b/src/theme/SiteLogo/styles.module.css @@ -0,0 +1,23 @@ +.logo { + float: inline-start; + height: 1.5rem; + margin-inline-end: 0.5rem; +} + +.rsaquo { + color: #01689B; +} + +.lowbar { + color: #8FCAE7; +} + +@media (forced-colors: active) { + .rsaquo { color: #0F172A } + .lowbar { color: #475569 } +} + +@media (forced-colors: active) and (prefers-color-scheme: dark) { + .rsaquo { color: #E2E8F0 } + .lowbar { color: #F8FAFC } +} diff --git a/src/theme/icons/IconDeltaNaarLinksInline.tsx b/src/theme/icons/IconDeltaNaarLinksInline.tsx index 690f46c9..5c64e03b 100644 --- a/src/theme/icons/IconDeltaNaarLinksInline.tsx +++ b/src/theme/icons/IconDeltaNaarLinksInline.tsx @@ -12,9 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDeltaNaarLinksInline = (props: SVGProps) => ; +const IconDeltaNaarLinksInline = (props: SVGProps) => ; export default IconDeltaNaarLinksInline; \ No newline at end of file diff --git a/src/theme/icons/IconDeltaNaarRechtsInline.tsx b/src/theme/icons/IconDeltaNaarRechtsInline.tsx index 00b4f453..63d628a1 100644 --- a/src/theme/icons/IconDeltaNaarRechtsInline.tsx +++ b/src/theme/icons/IconDeltaNaarRechtsInline.tsx @@ -12,9 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDeltaNaarRechtsInline = (props: SVGProps) => ; +const IconDeltaNaarRechtsInline = (props: SVGProps) => ; export default IconDeltaNaarRechtsInline; \ No newline at end of file diff --git a/src/theme/icons/IconDeltaOmhoogInline.tsx b/src/theme/icons/IconDeltaOmhoogInline.tsx index 2495a556..1e80a5d9 100644 --- a/src/theme/icons/IconDeltaOmhoogInline.tsx +++ b/src/theme/icons/IconDeltaOmhoogInline.tsx @@ -12,9 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDeltaOmhoogInline = (props: SVGProps) => ; +const IconDeltaOmhoogInline = (props: SVGProps) => ; export default IconDeltaOmhoogInline; \ No newline at end of file diff --git a/src/theme/icons/IconDeltaOmlaagInline.tsx b/src/theme/icons/IconDeltaOmlaagInline.tsx index fba32d48..4d8b88ff 100644 --- a/src/theme/icons/IconDeltaOmlaagInline.tsx +++ b/src/theme/icons/IconDeltaOmlaagInline.tsx @@ -12,9 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDeltaOmlaagInline = (props: SVGProps) => ; -export default IconDeltaOmlaagInline; \ No newline at end of file +const IconDeltaOmlaagInline = (props: SVGProps) => ; +export default IconDeltaOmlaagInline; diff --git a/src/theme/icons/IconDocumentBlanco.tsx b/src/theme/icons/IconDocumentBlanco.tsx index 670da25f..28b8b3d8 100644 --- a/src/theme/icons/IconDocumentBlanco.tsx +++ b/src/theme/icons/IconDocumentBlanco.tsx @@ -12,9 +12,5 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDocumentBlanco = (props: SVGProps) => ; +const IconDocumentBlanco = (props: SVGProps) => ; export default IconDocumentBlanco; \ No newline at end of file diff --git a/src/theme/icons/IconDocumentMetVlakkenEnLijnenErop.tsx b/src/theme/icons/IconDocumentMetVlakkenEnLijnenErop.tsx index ca4b0262..be456282 100644 --- a/src/theme/icons/IconDocumentMetVlakkenEnLijnenErop.tsx +++ b/src/theme/icons/IconDocumentMetVlakkenEnLijnenErop.tsx @@ -12,9 +12,5 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconDocumentMetVlakkenEnLijnenErop = (props: SVGProps) => ; +const IconDocumentMetVlakkenEnLijnenErop = (props: SVGProps) => ; export default IconDocumentMetVlakkenEnLijnenErop; \ No newline at end of file diff --git a/src/theme/icons/IconKalenderInline.tsx b/src/theme/icons/IconKalenderInline.tsx index 97241121..92e0fe36 100644 --- a/src/theme/icons/IconKalenderInline.tsx +++ b/src/theme/icons/IconKalenderInline.tsx @@ -12,9 +12,7 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconKalenderInline = (props: SVGProps) => ; -export default IconKalenderInline; \ No newline at end of file +const IconKalenderInline = (props: SVGProps) => ; +export default IconKalenderInline; diff --git a/src/theme/icons/IconKetting2Schakels.tsx b/src/theme/icons/IconKetting2Schakels.tsx index ea558d32..c3f69f89 100644 --- a/src/theme/icons/IconKetting2Schakels.tsx +++ b/src/theme/icons/IconKetting2Schakels.tsx @@ -12,9 +12,5 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconKetting2Schakels = (props: SVGProps) => ; +const IconKetting2Schakels = (props: SVGProps) => ; export default IconKetting2Schakels; \ No newline at end of file diff --git a/src/theme/icons/IconKlokInline.tsx b/src/theme/icons/IconKlokInline.tsx index adaf94b0..111ea8c0 100644 --- a/src/theme/icons/IconKlokInline.tsx +++ b/src/theme/icons/IconKlokInline.tsx @@ -12,9 +12,7 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconKlokInline = (props: SVGProps) => ; +const IconKlokInline = (props: SVGProps) => ; export default IconKlokInline; \ No newline at end of file diff --git a/src/theme/icons/IconLadeArchiefkast.tsx b/src/theme/icons/IconLadeArchiefkast.tsx index 6ed7d28f..1b162d79 100644 --- a/src/theme/icons/IconLadeArchiefkast.tsx +++ b/src/theme/icons/IconLadeArchiefkast.tsx @@ -12,5 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconLadeArchiefkast = (props: SVGProps) => ; +const IconLadeArchiefkast = (props: SVGProps) => ; export default IconLadeArchiefkast; diff --git a/src/theme/icons/IconLocatiemarkerInline.tsx b/src/theme/icons/IconLocatiemarkerInline.tsx index ecbf46ed..7ce6bec8 100644 --- a/src/theme/icons/IconLocatiemarkerInline.tsx +++ b/src/theme/icons/IconLocatiemarkerInline.tsx @@ -12,9 +12,7 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconLocatiemarkerInline = (props: SVGProps) => ; +const IconLocatiemarkerInline = (props: SVGProps) => ; export default IconLocatiemarkerInline; \ No newline at end of file diff --git a/src/theme/icons/IconRollerdexkalenderMetVlakken.tsx b/src/theme/icons/IconRollerdexkalenderMetVlakken.tsx index f2e4205b..975a2a6a 100644 --- a/src/theme/icons/IconRollerdexkalenderMetVlakken.tsx +++ b/src/theme/icons/IconRollerdexkalenderMetVlakken.tsx @@ -12,9 +12,7 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconRollerdexkalenderMetVlakken = (props: SVGProps) => ; +const IconRollerdexkalenderMetVlakken = (props: SVGProps) => ; export default IconRollerdexkalenderMetVlakken; \ No newline at end of file diff --git a/src/theme/icons/IconZoek.tsx b/src/theme/icons/IconZoek.tsx index bc678e88..527af5e0 100644 --- a/src/theme/icons/IconZoek.tsx +++ b/src/theme/icons/IconZoek.tsx @@ -12,7 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconZoek = (props: SVGProps) => ; +const IconZoek = (props: SVGProps) => ; export default IconZoek; \ No newline at end of file diff --git a/src/theme/icons/IconZoekInline.tsx b/src/theme/icons/IconZoekInline.tsx index 8926b41e..bdb8e585 100644 --- a/src/theme/icons/IconZoekInline.tsx +++ b/src/theme/icons/IconZoekInline.tsx @@ -12,9 +12,6 @@ import type { SVGProps } from "react"; * daarvoor gebruik mogen maken van de huisstijl en het logo hebben * toestemming. Maar in alle andere gevallen is ieder gebruik verboden. */ -const IconZoekInline = (props: SVGProps) => ; +const IconZoekInline = (props: SVGProps) => ; export default IconZoekInline; \ No newline at end of file diff --git a/static/img/logo_icon_kpa.1787d5b5302a.png b/static/img/logo_icon_kpa.1787d5b5302a.png new file mode 100644 index 00000000..cae0996c Binary files /dev/null and b/static/img/logo_icon_kpa.1787d5b5302a.png differ