diff --git a/.prettierignore b/.prettierignore index b035b468a2c0468add11ae02ec434ef6e026ff90..710d003053e9b31e9746dba7ab738d6f8da56e42 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,6 +5,7 @@ nginx *.yml *.svg *.ttf +*.drawio # Any dotfiles/dirs \.* diff --git a/README.md b/README.md index c570acd9118249b33d09e5a6c149bc95ef8f564c..f2e11f98724a01e45302d0dedb1dbea1a86fa352 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,25 @@ This is the code implementation of the design system as according to the [Figma](https://www.figma.com/file/WRWUWArhAkmxpA5QJVFw1i/Rainbow-Design-System) designs. -Installation of the package in client application is done by creating a `.npmrc` file in the repo with the following content: +The project is based on React, Typescript and Vite. Components are extended from [NextUI](https://nextui.org/) as much as possible. +[Tailwind](https://tailwindcss.com/docs) is used for styling, and [Storybook](https://storybook.js.org/docs/react/get-started/why-storybook) for documentation. + +It is also published as a component library for other Astron apps to use: + +<img src="src/assets/design-system.svg" /> + +## Deployment + +Deployment is automated via Gitlab CI/CD. + +Test environment: https://sdc-dev.astron.nl/design-system/ +Production environment: https://sdc.astron.nl/design-system/ + +Release notes: https://git.astron.nl/astron-sdc/design-system/-/releases + +## Installation + +Installation of the package in client application is done by creating a `.npmrc` file in the repo with the following: ``` @astron-sdc:registry=https://git.astron.nl/api/v4/packages/npm/ @@ -15,22 +33,6 @@ and running: npm i @astron-sdc/design-system ``` -The project is based on React, Typescript and Vite. It uses [Tailwind](https://tailwindcss.com/docs) -for styling, and [Storybook](https://storybook.js.org/docs/react/get-started/why-storybook) -as documentation. - -Aside from hosting the documentation at Astron, there is also an idea to publish this -repository as a component library for other Astron apps to use: - -<img src="src/assets/workflow.png" height=500 /> - -## Deployment - -Deployment is automated via Gitlab CI/CD. - -Test environment: https://sdc-dev.astron.nl/design-system/ -Production environment: https://sdc.astron.nl/design-system/ - ## Contact This repository is maintained by Team Rainbow. Feel free to contact us on @@ -47,16 +49,22 @@ npm run storybook to see the Storybook at http://localhost:6006/. +### Docs + General documentation that is not related to any component in particular are written as `.mdx` files in the `src/docs/` directory, and can be viewed at http://localhost:6006/?path=/docs/. +### Components + +For consistency, please extend from the NextUI component library as much as possible. + Each component is paired with a story file, which is responsible for showcasing said component on the Storybook. The story file for `src/components/ComponentName` shall be found at `src/stories/ComponentName.stories.ts`. -### How to +### Icons -#### Icons +This is the current workflow: Download or copy the SVG code from Figma. Save it into `src/assets/icons/your-file-name.svg`. In the file, change the stroke color to `currentColor`. This is to enable dynamic stroke colors. @@ -67,11 +75,13 @@ Add `"your-file-name"` to `iconNameOptions` array and the `iconMap` dict of `Ico <Icon name="your-file-name" color="secondary" /> ``` -#### Colors +### Classnames + +We use `clsx` to concatenate classnames. Since Tailwind [does not support](https://tailwindcss.com/docs/content-configuration#dynamic-class-names) -dynamic class names, there are some functions in `src/components/colors.ts` to help reduce boilerplate -code. They also convert the semantic color names in NextUI to the color names that we use in Figma. +dynamic class names, there are some functions in `src/components/utils/classes.ts` to help reduce boilerplate +code. They also convert the color names that we use in Figma into the semantic color names in NextUI. Please use them (or add new ones there) as much as possible instead of supplying colors via another manner. So we can keep the styling code consistent and organized. diff --git a/package-lock.json b/package-lock.json index ea77b209af3117ed0e0fe0ce2abf2936ee5ece07..bc5e613abcbdddc5a485a75d234b41620e2a34c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react": "^4.0.3", "autoprefixer": "^10.4.16", + "clsx": "^2.1.0", "concurrently": "^8.2.2", "date-fns": "^2.30.0", "eslint": "^8.45.0", @@ -52,7 +53,7 @@ "react-slider": "^2.0.6", "react-svg": "^16.1.29", "semantic-release": "^22.0.8", - "storybook": "^7.5.3", + "storybook": "^7.6.10", "tailwindcss": "^3.3.3", "typescript": "^5.0.2", "vite": "^4.4.5", @@ -4932,6 +4933,15 @@ "tailwind-variants": ">=0.1.13" } }, + "node_modules/@nextui-org/system-rsc/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@nextui-org/table": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/@nextui-org/table/-/table-2.0.27.tgz", @@ -6320,6 +6330,15 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, + "node_modules/@react-aria/focus/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@react-aria/form": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.0.tgz", @@ -6731,6 +6750,15 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, + "node_modules/@react-aria/utils/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@react-aria/visually-hidden": { "version": "3.8.7", "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.7.tgz", @@ -13105,9 +13133,9 @@ } }, "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", "dev": true, "engines": { "node": ">=6" diff --git a/package.json b/package.json index 7b54f7dc349fe36739be1b0233f272f46114cf31..40ead48abffd544923cd29ec894e42b4c14d1b90 100644 --- a/package.json +++ b/package.json @@ -95,6 +95,7 @@ "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react": "^4.0.3", "autoprefixer": "^10.4.16", + "clsx": "^2.1.0", "concurrently": "^8.2.2", "date-fns": "^2.30.0", "eslint": "^8.45.0", diff --git a/src/assets/design-system.drawio b/src/assets/design-system.drawio new file mode 100644 index 0000000000000000000000000000000000000000..888834b37dd696b443687344d440b7df587d132d --- /dev/null +++ b/src/assets/design-system.drawio @@ -0,0 +1,104 @@ +<mxfile host="app.diagrams.net" modified="2024-01-25T14:37:52.745Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="oWlL_CtQoktVZJd4I5d9" version="23.0.1" type="device"> + <diagram name="Page-1" id="wt0zWwvxc1aIomN0vQJN"> + <mxGraphModel dx="1434" dy="870" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="wMKxM34ov-EKaF612LfR-51" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;" vertex="1" parent="1"> + <mxGeometry x="20" y="30" width="940" height="445" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-1" value="<a href="https://www.figma.com/file/WRWUWArhAkmxpA5QJVFw1i/Astron-Design-System"><font style="font-size: 15px;">Figma</font></a>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="60" y="170" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-4" value="<div style="font-size: 15px;"><a href="https://git.astron.nl/astron-sdc/design-system/"><font style="font-size: 15px;">Design System</font></a></div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1"> + <mxGeometry x="210" y="270" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-47" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-5" target="wMKxM34ov-EKaF612LfR-43"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-5" value="<a href="https://sdc.astron.nl/design-system/"><font style="font-size: 15px;">Storybook</font></a>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="495" y="230" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-23" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-6" target="wMKxM34ov-EKaF612LfR-17"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-24" value="<font style="font-size: 15px;">Import</font>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-23"> + <mxGeometry x="-0.0286" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-6" value="<a href="https://git.astron.nl/astron-sdc/design-system/-/packages"><font style="font-size: 15px;">NPM registry</font></a>" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="495" y="310" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-12" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-4" target="wMKxM34ov-EKaF612LfR-5"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="420" y="300" as="sourcePoint" /> + <mxPoint x="470" y="260" as="targetPoint" /> + <Array as="points"> + <mxPoint x="430" y="280" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-14" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-4" target="wMKxM34ov-EKaF612LfR-6"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="420" y="300" as="sourcePoint" /> + <mxPoint x="470" y="340" as="targetPoint" /> + <Array as="points"> + <mxPoint x="430" y="320" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-19" value="<font style="font-size: 15px;">CI/CD</font>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-14"> + <mxGeometry x="-0.5415" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-45" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-17" target="wMKxM34ov-EKaF612LfR-27"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-17" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="715" y="270" width="190" height="140" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-49" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-27" target="wMKxM34ov-EKaF612LfR-43"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="800" y="125" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-27" value="<div><br></div><div><br></div><div>User</div>" style="shape=actor;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="790" y="180" width="40" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-28" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-1" target="wMKxM34ov-EKaF612LfR-4"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="50" y="510" as="sourcePoint" /> + <mxPoint x="215" y="470" as="targetPoint" /> + <Array as="points"> + <mxPoint x="120" y="310" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-30" value="<font style="font-size: 15px;">Code</font>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-28"> + <mxGeometry x="0.175" y="-2" relative="1" as="geometry"> + <mxPoint x="16" y="-2" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-31" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="738" y="298" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-32" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="748" y="308" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-33" value="Astron apps" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="758" y="318" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-44" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-43" target="wMKxM34ov-EKaF612LfR-1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="wMKxM34ov-EKaF612LfR-43" value="<div><br></div><div><br></div><div>De-signer</div>" style="shape=actor;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="100" y="80" width="40" height="60" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/src/assets/design-system.svg b/src/assets/design-system.svg new file mode 100644 index 0000000000000000000000000000000000000000..96631b70ac773a93996a24b22a04f97bb2984034 --- /dev/null +++ b/src/assets/design-system.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Do not edit this file with editors other than draw.io --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="940px" height="445px" viewBox="-0.5 -0.5 940 445" content="<mxfile host="app.diagrams.net" modified="2024-01-25T14:37:31.998Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="8iPCeNckhT3gJChXQIGw" version="23.0.1" scale="1" border="0">
 <diagram name="Page-1" id="wt0zWwvxc1aIomN0vQJN">
 <mxGraphModel dx="1434" dy="870" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
 <root>
 <mxCell id="0" />
 <mxCell id="1" parent="0" />
 <mxCell id="wMKxM34ov-EKaF612LfR-51" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;" vertex="1" parent="1">
 <mxGeometry x="20" y="30" width="940" height="445" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-1" value="&lt;a href=&quot;https://www.figma.com/file/WRWUWArhAkmxpA5QJVFw1i/Astron-Design-System&quot;&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;Figma&lt;/font&gt;&lt;/a&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="60" y="170" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-4" value="&lt;div style=&quot;font-size: 15px;&quot;&gt;&lt;a href=&quot;https://git.astron.nl/astron-sdc/design-system/&quot;&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;Design System&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
 <mxGeometry x="210" y="270" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-47" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-5" target="wMKxM34ov-EKaF612LfR-43">
 <mxGeometry relative="1" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-5" value="&lt;a href=&quot;https://sdc.astron.nl/design-system/&quot;&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;Storybook&lt;/font&gt;&lt;/a&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="495" y="230" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-23" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-6" target="wMKxM34ov-EKaF612LfR-17">
 <mxGeometry relative="1" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-24" value="&lt;font style=&quot;font-size: 15px;&quot;&gt;Import&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-23">
 <mxGeometry x="-0.0286" relative="1" as="geometry">
 <mxPoint as="offset" />
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-6" value="&lt;a href=&quot;https://git.astron.nl/astron-sdc/design-system/-/packages&quot;&gt;&lt;font style=&quot;font-size: 15px;&quot;&gt;NPM registry&lt;/font&gt;&lt;/a&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="495" y="310" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-12" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-4" target="wMKxM34ov-EKaF612LfR-5">
 <mxGeometry relative="1" as="geometry">
 <mxPoint x="420" y="300" as="sourcePoint" />
 <mxPoint x="470" y="260" as="targetPoint" />
 <Array as="points">
 <mxPoint x="430" y="280" />
 </Array>
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-14" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-4" target="wMKxM34ov-EKaF612LfR-6">
 <mxGeometry relative="1" as="geometry">
 <mxPoint x="420" y="300" as="sourcePoint" />
 <mxPoint x="470" y="340" as="targetPoint" />
 <Array as="points">
 <mxPoint x="430" y="320" />
 </Array>
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-19" value="&lt;font style=&quot;font-size: 15px;&quot;&gt;CI/CD&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-14">
 <mxGeometry x="-0.5415" relative="1" as="geometry">
 <mxPoint as="offset" />
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-45" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-17" target="wMKxM34ov-EKaF612LfR-27">
 <mxGeometry relative="1" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-17" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="715" y="270" width="190" height="140" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-49" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-27" target="wMKxM34ov-EKaF612LfR-43">
 <mxGeometry relative="1" as="geometry">
 <Array as="points">
 <mxPoint x="800" y="125" />
 </Array>
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-27" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;User&lt;/div&gt;" style="shape=actor;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="790" y="180" width="40" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-28" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;html=1;rounded=1;curved=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;startSize=6;endSize=6;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-1" target="wMKxM34ov-EKaF612LfR-4">
 <mxGeometry relative="1" as="geometry">
 <mxPoint x="50" y="510" as="sourcePoint" />
 <mxPoint x="215" y="470" as="targetPoint" />
 <Array as="points">
 <mxPoint x="120" y="310" />
 </Array>
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-30" value="&lt;font style=&quot;font-size: 15px;&quot;&gt;Code&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wMKxM34ov-EKaF612LfR-28">
 <mxGeometry x="0.175" y="-2" relative="1" as="geometry">
 <mxPoint x="16" y="-2" as="offset" />
 </mxGeometry>
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-31" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="738" y="298" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-32" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="748" y="308" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-33" value="Astron apps" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="758" y="318" width="120" height="60" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-44" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wMKxM34ov-EKaF612LfR-43" target="wMKxM34ov-EKaF612LfR-1">
 <mxGeometry relative="1" as="geometry" />
 </mxCell>
 <mxCell id="wMKxM34ov-EKaF612LfR-43" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;De-signer&lt;/div&gt;" style="shape=actor;whiteSpace=wrap;html=1;" vertex="1" parent="1">
 <mxGeometry x="100" y="80" width="40" height="60" as="geometry" />
 </mxCell>
 </root>
 </mxGraphModel>
 </diagram>
</mxfile>
"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><rect x="0" y="0" width="940" height="445" fill="rgb(255, 255, 255)" stroke="none" pointer-events="all"/><rect x="40" y="140" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 170px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><a href="https://www.figma.com/file/WRWUWArhAkmxpA5QJVFw1i/Astron-Design-System" target="_blank"><font style="font-size: 15px;">Figma</font></a></div></div></div></foreignObject><image x="41" y="161.5" width="118" height="21" xlink:href="data:image/png;base64,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EIFBJSCBHdSeUb1GiED7JEZWp0QafCKjLNtdKxMBEagpAQlsTTtO1Z5LAoGdYd07MuJk2nH8vHy1Cq4l3y6RvC9DYJkGlYmACNSVgAS2rj2nes8hgXZMiDWP+KXNnbJXqmVrtCvI1xH9xa2mLNYdw7VbmQiIQE0JSGBr2nGq9lwSCHbj7tdEasCO1oXbZI9h2mKt1SeIe5ddiMAeMpct1L1FQASKE5DAFmeoEkaOQBgT1o6FmGemDnNXIYwvQTA3pEPSsp2yF3WPXi2no4xx814kEwERqDEBCWyNO09Vn0sC7WMQwjNjanABTvqPxzPiXcm1cwsQaAsyfhrX/Eg6O0JigQRkIiACNScgga15Bw5+9QOmTutszYR/Iw4vQbY5ySc8XdTcfbyP0HrmSALH//PuRoyX4ITCzmKa/9x9uFh7jcs3hl/jxopkYnXnOWjPQlL/Dlo9VZ86EpDA1rHXalXnugtCry/gcIPS1XRHZKo4Twe5NeTCj26/qeG688zDpso8Etgq6Y562RLYUX8CKm9/3QWh3xdwi41N/sVg3LUAytumPBeNX9e/jLrz7N/C2U3Rr39ntza623ARkMAOV38OYGvqLghpvoDND3H7KOAfy7Vd+k5wrNOOEfVl2efSH8mpO8/0dGYnZZr+nZ2a6C7DR0ACO3x9qhbNGQET2pUvYq11D6pgjiO2ZWRKQPEwhilxTX1bi8V37hhHfMau9LwlxCRNu+N4zhqlG4uACOQkIIHNCU7ZREAEREAERKAXAQmsng8REAEREAERqICABLYCqCpSBERABERABCSwegZEQAREQAREoAICEtgKoKpIERABERABEZDA6hkQAREQAREQgQoISGArgKoiRUAEREAEREACq2dABERABERABCogIIGtAKqKFAEREAEREAEJrJ4BERABERABEaiAgAS2AqgqUgREQAREQAQksHoGREAEREAERKACAhLYCqCqSBEQAREQARGQwOoZEAEREAEREIEKCEhgK4CqIkVABERABERAAqtnQAREQAREQAQqICCBrQCqihQBERABERABCayeAREQAREQARGogIAEtgKoKlIEREAEREAEJLB6BkRABERABESgAgIS2AqgqkgREAEREAERkMDqGRABERABERCBCghIYCuAqiJFQAREQARE4H9YgVygP4F2+wAAAABJRU5ErkJggg=="/></switch></g><rect x="190" y="240" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 202 240 L 202 300 M 298 240 L 298 300" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 94px; height: 1px; padding-top: 270px; margin-left: 203px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div style="font-size: 15px;"><a href="https://git.astron.nl/astron-sdc/design-system/" target="_blank"><font style="font-size: 15px;">Design System</font></a></div></div></div></div></foreignObject><image x="203" y="252.5" width="94" height="39" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 535 200 Q 535 95 126.37 95" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 121.12 95 L 128.12 91.5 L 126.37 95 L 128.12 98.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="475" y="200" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 230px; margin-left: 476px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><a href="https://sdc.astron.nl/design-system/" target="_blank"><font style="font-size: 15px;">Storybook</font></a></div></div></div></foreignObject><image x="476" y="221.5" width="118" height="21" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdgAAABUCAYAAAAh3CaOAAAecUlEQVR4Xu2dB7wkSV3Hu+ftssCFfdOjmBUDoIKKogQTJybMCROiHKKICVBEEVRODCAqCkYUEQXFrICYwyImzAiI2UPM2j1v9+6Qu9t9xffX+2avp6Y6d8/r2fv/P5+5MK+6qvpXNf3r+sc4MjEEDAFDwBAwBAyBwRGIB+/ROjQEDAFDwBAwBAyByAjWNoEhYAgYAoaAITACAkawI4C6/S7dXhSdu08UHd4vitz9Gf8efOZHnyv57v+iKP5P/p+P+68omv0r//1imrxq+3O1EQ0BQ8AQuH0gYAS70+t809tE0S1fALE+CgJ9+/a34l4H2b7o4uf0P7a/3q6YHgLpN7EXvs6b1xOjKPm26c319jCj9KNZj1/z7vSXWY9PuD3c/e39Ho1gd3IH6MS6fDyn0W/kx3vHAW7hkD6exon2KfR3YYD+rItjQ8AI9tigDw5sBDut9djubIxgt4v3AKPd+FZRdPNLIML7DtCZ38XvQ9oPjaLFG0bo27rcCgJGsFuBufEgRrCNoboMGxrB7tSinltE0fkzTPle1dN2N0HAfw9ZLvn3/9P2aj7YZN27VZ94dZCdZfzjgaiwXrNT0NhkjxAwgp3WVjCCndZ6bHc2RrDbxbvHaI61WnLCjD4w3InDgSn+UT4/E0X7kGNI1etORNHBPbke+497BP9+l5IJ/RV8jMNUfEuzCS+vwQ788PW28W9D0i9sdr21Gg4BI9jhsByiJyPYIVDc1T6MYHdm5dJHQnjPDUzX8f0zIVXZTzm5NhU3g2y/HGL8Fq67InAVNtnkSc16y76Idj/otf1erqd/k+0iYAS7XbzrRjOCrUPocv67EexOrK7DkWmp0Jq39KYLubovxGb6I91v4+D9o+gCp81YauSi4Oy090F4F7+yvm8j2HqMttXCCHZbSDcbxwi2GU6XZysj2J1Y10wu/Tg2bcgPcEr8kv63kH0sfbws0M9L6f8T6/s3gq3HaFstjGC3hXSzcYxgm+F0ebYygt2JdU2fxwkTm2nuhLSa8a1RdII42KvTYW4hg0yjj/f6YsATd6kfwwh2mDUYohcj2CFQHK4PI9jhsNy9noxgd2LN0tdCsO+5PlX366iGHzzc9JefjLr5Fzf7i/l+TtanKjGCHW4d+vZkBNsXwWGvN4IdFs/d6s0IdifWK1PojFIfFmVgJyJ3Z+y8ZxkAT+OixI9h6O8xgt2JjcIkjWCntVJGsNNaj+3Oxgh2u3h3GM2dgvjeFLjw+7GPfmmHDisuSf8NFfTbcZIttvlaxnm6EeywSI/XmxHseNh26dkItgtql8s1RrCTX0l3EoINxaO+HOK7ZtjpL7+B/t5hvU+Hejghd2qVjKUiPpvg4fwxjPxxkP67oiYni5XjE/PC4f6bf/OJ/pr/Vm7XM/z/zcPi4feWe3Nzonfkl41Q2cfSKpDQI3nvccdt03tTgr3xrckI9tncw0fROy9V+rg78f8Ug4j+g8+rednCZHD6d/kOe/+QMoV11Ytr9mHcm5z43uvivorAJCINqfZVvr+Un/tX+YpcwqelReogRrAdQLtsLjGC3YmlTG/gx05VnKI4vjt19yi6Ug/ELUv6s8znIe0Hdb+F3fgj669bvhMPOCWn1xg88JpInr0KVbYjfndxrskVt7XJx7t+/Zr4OlTj5HpeSQbJR3ht+y8g+ntS+B2lFF+If9gbn4fzXC8G59vNq9g6JYFI/OneHgjgWUewObmh/WiMrbKBPZU4a0wSfeavmW97XUNoO35H2dfwl8dt/qZKV4eQNfkn7HHd/j+3W8OhCHb59cyBdfDF/Q3PgQfxHNDLpsnEEDCCndiChKeT/QHfBzI4ydEp4YQXr+l0x7+lMQl2SSWYwydzTx2LGLj/4f6/DJLlJaCp1BHs8lN5uP0UvaFNCEmRYHMC00uP19bhkLZgvbpIqhhlnah8TD53M1tWFcEuPxRsf4J+Wldewnf9tbiUf1b3FJrHsa4+1ktOq4ckRInxvu8kaJLcM8AATU/T39wQBJtex3gkktkQtAwnPyKKrtKeN5kgAkawE1yUzSll38x3kE5Qfpof36M5IR1s71aaEKy2ls/7VSfYPLPUc7iGE2Bv0cBkkUq+r1lPVQSbKXTpFzYJs9hzkWD1ffYr/EOq7YI4koEsOt7b8vPBxUsmIg1GgkozfuP6OGUEO+O0e+EVtEcN3FkICZuhUt7/i+Y9NF3X0H7ZGKXluhavzzH8Ib5pqBGpvENeUubXNjvR9yXY4HpqcqQzPYE26GpqPZtMFQEj2KmuzNq8Dt6ZN2/Zgy4FwXrTRo3nns13pFJc4Kg0tjQh2NAcqgg2fT4PLC+f8Vof8nAmXMn9O+2wn+V2Q9k+S06V+bU4gSVSh9ZIGcHGLwB3kcnp6g58gl1+HvP8Me+aHmri7HfoC3thURyx0QvSZ/oSeiDne+PTwE2YeZLj+Xrme+PFv+e27irtAeuw9wFA8g91qF78+3Gu62qGS2LIhVepyMaMLT8CC4cdHxxm0T0JO69ad1T2yWfWY9CHYDPMHRG1fDfkz1kDXnS62oXrZ20thkHACHYYHLfQS6bTWF3WJtVyRZ3sSBoRS32MCmkMWe7DayK5I7lFxOgV9HYUHjiFB3JRzqNi2+dlwJf0M5gvJ/Gg8OCLUcnt42jiOzHl6liujWSb8tNI8pWjktDJe/OWjyNSlYQI1qlwObatiHSRRXFyAPpD/ibihTR1gpxDxEWRSjeW2q6Akf4+wzlq/zeq57KBDepcEaD/chVT8Wj+ewEsQwXX1zKUXLxG67OHXdU/jcpGmcdEk4c6fo+SuVJ0Yo66uU5NetzrqtkfUNDigvZQKN+2Tn+oXvdQ//tk5e7Ataj1VXM5Yg+FJOZFyl/7jfXrWHA9QxUdPWFzVPcnF/fRNjVW7Xastb4NASPYndkNeZyqqum8b/MpO2yBMapBfU7xuTNv6GNIHy/iG8gUdSuOGhGl+HyJvxMCgKTrvFjPvQV98JCMPzxwd3/EwwiSrCKDEMFGyv38jrf15/6W/4boE9TFTYrSZ79E+09an08XNXH21fThvbxEONrMVXowYHtfQrAOO3aZOBzA9nCWqiN6edkefCt9fWWwp5PYuW+tUsFPYV0180wvIR8SICq0Aic5gdapWN2JE9HyaXinfVUAB8wyp/Amv4JKVmXS5QS7ZN8HcWcv57b8lk58Y/zmrc8mCBjBNkFpMm0OCAs5VMhMScm6uonK4zD6TR7MfOaE+cSoBYeQPgSbcvqM8ZD0RWrNxWObzy5/AeElInpAtGHOm2Gr2tffSiRIsMW2aATmn8M8sXs2lQyHoOhFXmtsmHPZTVt4E2dSXRJGUhTfw7n4t1KbnRpJ/anTD2vfVDKRu0jeF15A5pguYp2OAzLCum6MUreuB2ggDilksSF66WJPtKk+lX437UP7kWpUScULTVuCTZ/FOISCbYi0BuQMb7MHm66xtRsLASPYsZAdrV+Hk8aSB57DNrNRAafNqLI7/TF9oLI8xF64eEObi9fbdiVYxfhmPKhjxR8WBVvrnJN63cnVn/EB9sNDrvVVs+7nub+KsKJKgtVcsDnmhetbiEMlmaEmjiH+orRRE2eyMb/KG5RT64z73P+X8GSqCFYvMnM5zLWQvA6xToEfHLiIIhShGOmprGvKusd4gBfFEUO9R03ktuE2+T2xFr7aXFqiBE1H2V5tQ7AZKnv5DWwIL0RzwsTavBC0WGJrOhoCRrCjQTt2x7KDukcximyQ9+k5mmy3nNJmOASdlkq5ZdhPV4I9wPHm8Oc2596GhPyrgycuTownceApC2eoIliHtmDBiaeLhGJXVdN3TonBJhK0w9UkGCklWJ0478HahrKC1UwmuxcNRPSek51iQxcegamrKazrjcQd3yKHPy/1Z9SizvHG3pJnuDzEPRGJzwN5vNWsCcHmLzHysfjizb4dJ3BVtPK9xZvsH2tz3AgYwR73CgwyfqrsS3gVxsTERbJDBhx+mg4kNfKJayHaP216BW/2HQuuBx23OJnN5cnakuRXsz2LbfJCwMM1hsznCrcJSCnB4q2ZUC+3q+Txs5yi1qShmljhLfnp3vP8jQk3meOgVCZlBFulVm5yfylOc3nWp6LgJJQE9toU1jXFzhzj6bsmNaf/OhxyIpTDmZftLCLBSRJS69K0jmDzPglPiwIvXQ7tUoLDWVvtSd192N+3hYAR7LaQ3to4+sEeoFo8hGxFuE7enp6asnYyshGSrCHRD7+BXCRYz/TZoBhBBoFF73dxgEuOrj1OGKuppnhaxqh11wRbYhIKeaBRKcHSPvEdjBrgsWqi1Iq5mviq9YuanNBD9kOHx3Ie+1phCy4j2L278dKkUK+OErQp09eMF5r9f1rvtLiul/6y5XUNOgqhiUg6+i+s7iOkVXCv5CR//zCwVQSbv0SR9UsvTRsiOzGhWWOn/+y4HeyyRggYwTaCaZcb5eEGPFScyFakqxNZ02B7Elg0IdkuJ9iy6j0R6rBEtWl7SNBR5Az9erGkqyHKCHaGNmBfMag9JHshF+MgVZQmauJVDeC1CwkHSggNqZJgHCxZoBa+nbvlPeUq11Bazocyp4Iz11TWNZT9LH4mpPX4ljfuNV9+Cr8jXxOC89hcoVmBnOFlBDvHwzwjeUh8bcl80HScJEzqqv/tN1+7+jgRMII9TvSPZezcExlvRIf6MsZJpTJRAw+M+H48PMgaUyVdCPYsJ6oLgfjUOxL32TecaMlDS3Gea4K6NSHncEjKCPYkIUR9H3CZMH6JN2qNmjg/+So1olIkFmTGC9J+yCu20CZ4gsVumCiXck+RynqjGARhPIvvWnV8Kjp7t5snsa6pEmi8rXfDDwMHsjD1keVd2VsBB7MZ8bYhx7MgwRLTHSkGl/lUCi9nCekwTXYVASPYXV25QeadxyryRu9IK1iaQq+BWq0Twd4XgkW1tiY4W83x1uxqf131tbyGe6IKTFGUWnDhEdal9oFk//rbHAeZJjGvVYshDcJSidhxSitKnnKQcKmQBBM04OU95+FeFhaz6idIsAOVNkzlAOfFGishx0JVmI7k7ETWNUWdvrGnMZckpIvsI1LrLmVC8Z6dMxwNQykkgwQbSPxRNqcm5oQ+92PXjomAEeyY6O5M3/lpUsnx36dkyoRoJCo4UCJdCDb44CHLU0J2pr5ygF33UPZdT8oIM5jJqYKQ284vpO6tUhNnOvHq5FuUmnjLVdMgwQ5g/1T/wRSZeL8m2OsvjR/KXLTldS2tocz+ThRX3FNSEj1s2NVLzAnBfe6Nr9Ch6NvpMxAPHsnpDy9u8yLuuWjHcrkR7LHAPsVBpTq+QDB7TGYaX5RRaR7KZHPUsAvBhkI5HGEVC99DswNYZZ7Ee2SLCuVvDaqISzxkO0wn7ElaoiY+xxzPKzOQl2P5BCE2dSkfcxIMpUokEUICQfeVVDZD3yGHBPqJnNyOZArrmmMYSIIfcsjqgknKPt3w7i7xUq8jWKXz3MMeK21G0O6uCUK+SSjZR5fJ2zVbRMAIdotgtx9K9p5DbKBFmcmhQmn4RpD0ATw4yLPriyNkZ4Hqr0y6EOyYJ9hMmY8CJ5U53tShkIexCdahal6KNEnpuLaWATVxpnzTfhWgBmr6Vb9jnmCzn2QUirSvydN5+BdyTk9hXcc+wWa8HEW+pgW/hoTi7L5UEaxqGM+o1jQ/c/GqPLe2UnL6oU+opOUVX+cLMcIjwbrshYARbC/4xr44FEdZZUscYj4pROBnVnI1XqhdCLbMVpf4iQE63FSm3LN+InxeTJKSKjFjE6xuIaMOaVQ46eW3RYhGomQhBcn0gsOLzppwXaJSaw1kVBusCi6gAl4TTlYJJ6yVTGVdR7PBKm5VWdA8T/w9wnRO+z4FNCsjWP2OYxJX+KaXDK/sKOCI5f6MtozR1yegwRayJoMhYAQ7GJRjdLQkrMT5YSIEy89JxN42jWDT+WXKdex7nOJNnDBmmXQi2BIv4lMkVrhCFWt6SEoS91gF0guiKjiLQLk2NdkGwQbX0lMT56kevVhV2edmFAhvWj0lSLAvY/1U17anpK8D13f3cKXG7aJQq7bMO3zb6xr0IiZcKtEpvIeUhSvt3T1cwi9IsCr5x4tKiJA1tTT0IsP38VewD8iJbLIrCBjBTnqlUnKmxq/ZnGLZ2/IQN5ORlzjyYi3rbKNdCDaPl1RVED8mtyS/bZt7CyUDmKHm3i9Rc2+DYPOkAgod8eJRi97ES7xx8/JoRaGMX6LCAY3kBDbY81HsJZ9XvtwFJN1H8tSclOfzvWf9vRha19xpdqR1LTNfhDQBdb4ETfDJUAVHvLCsCTc4B59QApAVwa45DvMSm/hObIUOVf/5Ar97P0GMVMrykUgULmWyAwgYwU56kWS7y6RK8lSbeggvrhtn6pT3mlHea71GCh7ESSjZ+9EUuhCsLs1UU9Uvv0eJtOTJ/e4tUyiGN9+q6jzbINj8flX4nJCoNSmoiVPigmNO9kVxqBEXiptsKGWZnPo6+CxJAOJe7E2iJMHCFNY1JamETnxrgvo98er7NoT1UrMgvtj7kxIP/LpUiWXjpzgVxgXV+6V2A8U0t71va98FASPYLqht9ZoUB5fYS8PmSL+npAldErdXTT53spB61lMHu+fxkH9k6ZUnIdhbI9kYi9IkVSLxmRsJzql1mqAq7So5WSoRgLe3HafARUlR960RrB7uqulbFLxd55wuzxFa5McFO+zhCV7VbexupbmIOR3P8TDuKpnIFZJdkxLCyiawrsFYYswrMafDufIJd5A8b7DyXPv7k72fBBL1a4iuBJtXzVI+8ED9Z4cJZOHnWe5wP3bJ2AgYwY6NcO/+S99kR3DdT0k6EX/H5pTrTlFdT7DBhOwM3yRjURmwmcJRnuT9lfP4KYiqzLa7LYItSxavuqaHIi//dNthjUur6VwPsWA/7ZLb9hz2xfOqJeyr8/EeTvAi9mUK63ojqvi8mo43Z0e5vkUo3rTBL/VA60QCfl+qXt66EqzGOCCt6SElJTfuAafDPdIo7hNfbDJlBIxgp7w6+dxKy26pMggVQ/b9ai0d70gkcyi7z5VeB+RCnZNyrqpIeFeCVZajvGIMeW7X5NWMyYmuTWHy/IFEurrcdnUnrz9OX6pKUibbIliNv+QFxnn5cJXWMZYTkhee4UgwsFB92+Yyg2APfRvspct58UhIOtFWMmXFusa7Cse3k7y0hEoATmVdM5WQ89Zdcacz7Jjz69uhoHqwy7/kGvwi1kS/D2kZUJeHpA/Bqr+gqpvvm+SzbneH1np4BIxgh8d0hB5Tcr3Gjwt0TGrBmDJXVeXLmkznJgj0ZsqRRar76UncQLUYJFgvw0/ZPDIVAA/YXNsmZs+da5R6MFAtRSfEfdL8lck2CfYs8YwXqPazJoHUeQrLWPgVgRosZlXBdXkkx2CR+Grqin6DGgG1x0s78WNiC/1MYV0PyN18GEpHyf3PVd4Rsm0qKd678WMDrWsybPUlWHcF+1raA4q6r4nU3UQZzF/e9A6s3fYRMILdPuYdRkyVQ5cfmZ89ZtVVXnP0Ka1PO/nluTqPTE0bNS75yuF0k1D6rk6tGCTYH+fah9ffbK7K0wOETFIbQqm4OeRbZ4NU5p5bsUnFDwr00cCxZZsEqxlmKu/GabtSVC7QTzhRD2c4k1PxugNwUoFwL1ez33VehYnTriOZ/8bfIKYTOPWcDtTdXbWdwrrmKnm9TAReulRr9QQvCKHMXsX7laPhAWpwX+uQt0FFewdOw1eGqgwdddKXYPP9orA5hc954v7uonNV3e+zwbaxJqMgYAQ7CqxjdJqH7JyhZy8b0KWxOAUpwX2sBydvtSchxyt5ABTjZeU4cVaqYOw3EYnPIx60EfU8g6LsMZx2Vllmqu4pRLD5j5+HT11y+vwBUhJcn48pT2NsZnNOIn7sbx46ohCWp/IJFP52N2KruvdmvVL/XrZOsHhKR4XsRxvYon49gVbhamUMailVJ9hLXamYvRJXSMuAOr4ouSaA1H0OzGPtk5B4ySXKpnjc66p5KW3m+VdxL4GayEqgor2lwuwJsalrOEgl/GC+kWNYiYdwle111dcQBKu+MsV149zki2PvL3i5NpkiAkawU1yV0jkt8SjME094lVmqbiKPnePEoQdn48LrqJ4dpNfUUzGUcSqfE0TvlLieh9eM8Z2yKZVkJMpewGZ8mJ78JaIYTB6UEZ61Ol1FlLWLVaxd/x0SqdAeATErrrdGtk2wSx7YrqIEoOqNLsht20U2CFaVX1RO7gklvV3P9/qwTyJI3ZHzuGqfOF50EkKH6rQKq9EyathWlmUbcV1Xc0hJhhETDlUqsp/yIucUp6wsTYoZFqmGtCpHnchuvggVSvcGGYpgc18MpVH0f/u8jDmeCwtpgUwmhoAR7MQWpH46uQ1P2WjKTp71XVS2yAmZB1LiZUKquiiUgSjU3mEHXXAqDv6N03X2XMa+tucN6HKdvmWbfn6zvrZNsJpVysMyhsyC0qPofIhg5yqZp8Lv0hT0EKlVE063bcLDpDU5rnUt3mrKfogVSkbCj97CS+KcsJwm2pmhCDbfM2UvCsSpz0kP2rfMY29crAMPASPYndwSeY1RnJ4cGXv8sll9bii35dLvQuENLSS3dZ3hAqmdK6SKYHWZ+jlQNiOpT09pc1acaC+Os9EoP4WQ3zchIL+pHAvBXsc8Q6q9Bl7bVfcVItgEdWfuBasQJnkwtyWZI5XynL3RhlxX81xf16arst6uy7r6Iy3xKD6EZDe81o8a1pVplQdyjEo2FJpUdldDEmzl7+zRzOs53bC1q8ZCwAh2LGS30m/uSCLPRjlBqIJMF+GB7l6ErRJVaqhgdNMuc09kOZQQyF8mdQS7uk5VhJziKx/Cx4+9LOnckXZxhrPWPmEwbWtnHgfB3oB989aAWs/hrbrwMxA1XQTalRHsqou8EAJJQCKc15qIvJmjxzAnEp70lW2va2i+jjC05RPZX/xuNkLSgjfI28h5qJffiCPMqe3L55AEq+mdI5b5vMwLfm5wzDCn8Hnom8e77xrb9UUEjGAvm/2QKhZPeVLlMXmXow+OP27l/CMnDn1k8yK2Miamz2F3SsgW0zbetAy0/JSE3dPJM/mutGJODntupALVyq700nZxmHlmKex9EfflUInr5OEUM4vdKcJBJZaTCg+bGXbe09h7Y32/I5Lb1JQ1yztNxjhlzWVrHllyO/DDGIRkBo6Xo4hCCDPW6lBzQgswoxrRHs4/V8vuN7Bcxbq+/pjXVSXtMsJcYuUElr11tbfYw9pXcoCK5SVN3uGYMnRNiy0MDJV1t9MIGMHu9PLZ5HcXgUwFtAlDWpOKnLa7e6c2c0Pg9oqAEeztdeXtvo8ZgWBif2JOF/L4NTEEDIHLAAEj2MtgEe0Wdg2B5QNRQZ7xZo3n80nUtKHUg7t2fzZfQ8AQEAJGsLYPDIGtIxCMDZV92q9Ws/WZ2YCGgCEwHAJGsMNhaT0ZAg0QyL2tKcnne4HO8JgeqnBDg2lYE0PAEBgdASPY0SG2AQyBIgKpKudc62FCSsS8YtEOeUHbqhoChkAdAkawdQjZ3w2BTgikpHI88cbbksm/Efvqm0gMEpEQYENIqp/4NWw7jWoXGQKGwHQQMIKdzloczSSrTV40uSnbhAoIJEe/qVXCB3cDf+S7sqQGKkhwRwqaX0GO5ZDYfrDtFUKgLOvUav8ZalNAwAh2CquwNgd7oE5uSVpNyCfYuotV53f+rPJWth/qELS/FxEwgp3SfjCCndJq5HOxB+qYS9Ikv3GTNuVzbEOwjmLzC8qlVYnthzH3w+XXtxHslNbUCHZKq2EE22s1+hFjr6ELFzchWKmNY8g1eUb9qEaw9RhZi9sQMIKd0m4wgp3SathcLiME0ntyM2RmipVUQrl+l3yU1/cVOD89+zbnp8volu1WDAFDYA0BI1jbEIaAIWAIGAKGwAgIGMGOAKp1aQgYAoaAIWAIGMHaHjAEDAFDwBAwBEZAwAh2BFCtS0PAEDAEDAFDwAjW9oAhYAgYAoaAITACAkawI4BqXRoChoAhYAgYAkawtgcMAUPAEDAEDIEREDCCHQFU69IQMAQMAUPAEDCCtT1gCBgChoAhYAiMgIAR7AigWpeGgCFgCBgChoARrO0BQ8AQMAQMAUNgBASMYEcA1bo0BAwBQ8AQMASMYG0PGAKGgCFgCBgCIyBgBDsCqNalIWAIGAKGgCFgBGt7wBAwBAwBQ8AQGAEBI9gRQLUuDQFDwBAwBAwBI1jbA4aAIWAIGAKGwAgIGMGOAKp1aQgYAoaAIWAIGMHaHjAEDAFDwBAwBEZAwAh2BFCtS0PAEDAEDAFDwAjW9oAhYAgYAoaAITACAkawI4BqXRoChoAhYAgYAkawtgcMAUPAEDAEDIEREHgztcZE3NQpK9kAAAAASUVORK5CYII="/></switch></g><path d="M 595 310 L 688.63 310" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 693.88 310 L 686.88 313.5 L 688.63 310 L 686.88 306.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 311px; margin-left: 645px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><font style="font-size: 15px;">Import</font></div></div></div></foreignObject><image x="623.5" y="302.5" width="43" height="20.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAABTCAYAAAAC9ewUAAAQuklEQVR4Xu2dB7AVxRKGG1TMYhYwY84i5pxDmRGzIMYyImJEyhzBnMBQokgZMIs5YRawTGCOgOmJGTCU4eLbb+89l93Zmd3ZcM7Zs3e7ylf17pmZne75p6e7p3to959DUi1i5HYZD55wzITdrCdf7fGtJ1Lwhu2qCtiCC69kr/YSKAFbe5mXX0whgZoDtjw6U6xWZl0bdxVqDtjMZF4O1CYloAVsU1OTzDrrrAGB9OnTR2699dZ8CmqGM632tlOrtoaJMZkYTW25K3K74gA21SolAXCJtFQiT9i5BGxCwZXd6iOBErD1kXv51RYJ7LPPPvLLL7/45HH//ffLfPPNp5VRgQCb5FgvcVNvCXTu3Fm+++473zR+/PFHWWihhYoOWBvRFxPUeq4ag9cSsDa4LduklEB2DmcJWIulyI3uyW7dLbiuUpOYPKjNS8CmXZfcoDktI9Xsn52QWgFLklRLGlZubdjs2K7m4hRsbFXodV6EUsMWDF+5YyemCRA1/4YB7L///iuPPvqo3HvvvfL555/LpEmTZOrUqdKlSxf3v80331wOOeQQWX755UN5/uGHH4S43aiHH5bJX34pU6ZMkWnTpskCCywgCGPjjTeWXXfdVXbccUdp1y7r5FyRzz77zL2uHj9+vMvH5MmT3Rji4osvLksvvbTssssusueee7rzyZreeecdedjh+5VXXnFDQ/wH74suuqgstthissQSS8j222/vzmGppZbK+vOB8ZD9oEGDZOzYsfLBBx/IjBkz5IADDpAbbrjB+O1QwGq0f+ZxWEA3//zz+ybYr18/ufLKK1v/BgPnnnuuI+ApMw0XA0swfPPNN8tcc83la/HXX3/JWWedJVdccYUA/ihaY4015Pbbb5e11147qqnocikOP/xwdx4VevPNN2XgwIHy9NNPS3MOPIkMM1r+1/+J2WabTQ488EC57LLLjPHFyEl5GrDJBwwY4G4QW9pkk03k8ssvlw022CC0i06BDh8+XMgj8dILL7wgW2yxReufWIezzz5bfvvtN1+7LbfcUp5//nn3b++//76svvrqtlP2tWNTwkN8wA5zkl9CFFUYYGHmyCOPlLvuuivWpAHZk08+6WoN6NNPP5UePXrIe++9F2ucOeaYQx555BHZdtttQ/tFAfamm26Svn37CpsmDi2yyCIyZMgQ6dmjZ4xEnZlfQHsDHMCShDhhevXqLUOHDgkoAP94fthGAfbMM8+UCy64wBnC4zm1DFh/wEZka5kAy1EBUF5++eUkspYddthBnnjiCfnSOfY322wz+eqrrxKNs+CCC8q7777rmh0mCgNs//79fadF3Em0b9/eNSF69+4dqyubdJtttknMt/djaKrHH3/ceP2pTiwMsOeff7570pkIwI52NCxQro+GTQDYE044wT0qbrnllla+WDiOlPXWW88V3McffywTJkxwbUETsZPRztiNXuK433rrrR0N3MmxhSe647zxxhtGU0E1UdTvmQDLRjn44IMD00NzderUybUZf//9dxdU06dPN/IB7yNHjpSePR1Na0HY9xtttFHgCtPbldNnmWWWcW1lbNkvvvjCtWdNtO6667q27+yzzx45AxNg4RX7OKwsMJ2GbTazoOQmQQLAos2+/fbbVsHstNNOct1110nXrl0DwnrggQfkqKOOEpypKFpllVVcgx4HTSUA26tXL/noo48Cv3Xs2FF++uknmWWWWbSf0AF2/fXXdzXzn3/+2dpn3nnnlZNOOsk9pnGwKsQCvvjii+7cAKaOABZzw0EKI8babrvt5LnnntM2g8djjjlGNtxwQ9/v//zzj3siXXrppe5i6wg7+KKLLooSs+gAi6N79NFHy/fff+/rP/fccwubYc011xTks/LKK7vrAP3999+BE4J5E3f10uuvvy6chF7CicWkc2zYJsdj8Gc+p0ng1pkE3g9j+1111VWhHjvH32qrrSYI3UTs3FGjRrlCMREaYNVVV3XNCB2gu3fvbg1YtSF977nnHu2m87YlEsLxr2Yk0YaFxBEMoxtvvNHdwCpxKt19993C5g8jPHVAe/rppweakaQ/btw4WWeddULH0AF2xRVXlE8++aS1H/+fDYBziZNpS9ZhrZaIQXynK4GGrUweLUXIwya8dOKJJ7rA1hFRCISFExNFmBBEGlTi7/vtt18iwK600kry6quvWnv8Y8aMce33P/74w/2e1zXBfMGk0REblnCUms3EMY4Tyqa1JXwIHWh33313eeihh2ID1tuBsN2IESME7RqXrAHbMnCmgMXamK4Ja7mL5Nh5gBXQ2hA2LceJjq699lo57rjjbIZx25Cq9vPPP/vaY5Ice+yxwTEcJpr+c0qE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"/></switch></g><rect x="475" y="280" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 310px; margin-left: 476px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><a href="https://git.astron.nl/astron-sdc/design-system/-/packages" target="_blank"><font style="font-size: 15px;">NPM registry</font></a></div></div></div></foreignObject><image x="476" y="301.5" width="118" height="21" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 310 270 L 400 270 Q 410 270 410 260 L 410 240 Q 410 230 420 230 L 468.63 230" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 473.88 230 L 466.88 233.5 L 468.63 230 L 466.88 226.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 310 270 L 400 270 Q 410 270 410 280 L 410 300 Q 410 310 420 310 L 468.63 310" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 473.88 310 L 466.88 313.5 L 468.63 310 L 466.88 306.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 358px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><font style="font-size: 15px;">CI/CD</font></div></div></div></foreignObject><image x="337.5" y="262.5" width="41" height="20.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 790 240 Q 790 220 790 225 Q 790 230 790 216.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 790 211.12 L 793.5 218.12 L 790 216.37 L 786.5 218.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="695" y="240" width="190" height="140" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 780 150 Q 780 95 126.37 95" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 121.12 95 L 128.12 91.5 L 126.37 95 L 128.12 98.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 770 210 C 770 186 770 174 790 174 C 776.67 174 776.67 150 790 150 C 803.33 150 803.33 174 790 174 C 810 174 810 186 810 210 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 180px; margin-left: 771px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div><br /></div><div><br /></div><div>User</div></div></div></div></foreignObject><image x="771" y="159" width="38" height="46" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 100 200 L 100 260 Q 100 270 110 270 L 183.63 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 188.88 270 L 181.88 273.5 L 183.63 270 L 181.88 266.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 271px; margin-left: 141px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><font style="font-size: 15px;">Code</font></div></div></div></foreignObject><image x="123" y="262.5" width="36" height="20.75" xlink:href="data:image/png;base64,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"/></switch></g><rect x="718" y="268" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="728" y="278" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><rect x="738" y="288" width="120" height="60" rx="9" ry="9" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 318px; margin-left: 739px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Astron apps</div></div></div></foreignObject><image x="739" y="311.5" width="118" height="17" xlink:href="data:image/png;base64,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gVm87n3MDV3V4TEg0DRwx9BH9WE+ECAPMY4iECFmLUxfTJKEXGAexGSIWRtHEeIcMZOVCqZIJlDqX7CSXmCOJzOT/9GlFXU8jwnf3iSzEa9WI4xTSBwB+WDOxOMaMzV94AUGa1Egh32skIkLkzhkyztvMdviRcu7fzHLxly85Ozdzwr79WxfQBjEOu9pJZk9cxqsjxvG+W13K+y5suBhnFEP17O9wKKPv03exjyXKoLlGHMhWikLSMYw/WX8co+YtfFqxgkKj+C2gomZrRReKIHHMfdB3Ywh/jfI0gSO6X5yLw1o26bOHwECItgRPAR1QQisYwSaCLZPaOoIts92VJcQWEFABKuBIASEwCwREMHOEn21PSgCIthB4VXlQkAINCAggtUQWbMIiGDX7KPVjQmBuUBABDsXj0md7IKACLYLarpGCAiBvhAQwfaFpOoZHQIi2NE9EnVICKwrBESw6+pxr6+bFcGur+etuxUCY0NABDu2J6L+9IaACLY3KFWREBACHRAQwXYATZfMBwIi2Pl4TuqlEFirCIhg1+qT1X0pDlZjQAgIgZkiQFYuy5J1mvCSCPJgDyHkNt7BVXy8fT52iIZUpxAAAWmwGgdCQAgIASEgBAZAQAQ7AKiqUggIASEgBISACFZjQAgIASEgBITAAAiIYAcAVVUKASEgBISAEBDBagwIASEgBISAEBgAARHsAKCqSiEgBISAEBACIliNASEgBISAEBACAyAggh0AVFUpBISAEBACQkAEqzEgBISAEBACQmAABESwA4CqKoWAEBACQkAIiGA1BoSAEBACQkAIDICACHYAUFWlEBACQkAICAERrMaAEBACQkAICIEBEBDBDgCqqhQCQkAICAEhIILVGBACQkAICAEhMAACItgBQFWVQkAICAEhIAREsBoDQkAICAEhIAQGQEAEOwCoqlIICAEhIASEwKnNlrWBem+2BQAAAABJRU5ErkJggg=="/></switch></g><path d="M 100 110 Q 100 130 100 125 Q 100 120 100 133.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 100 138.88 L 96.5 131.88 L 100 133.63 L 103.5 131.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 80 110 C 80 86 80 74 100 74 C 86.67 74 86.67 50 100 50 C 113.33 50 113.33 74 100 74 C 120 74 120 86 120 110 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 80px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div><br /></div><div><br /></div><div>De-signer</div></div></div></div></foreignObject><image x="81" y="51.5" width="38" height="61" xlink:href="data:image/png;base64,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"/></switch></g></g></svg> \ No newline at end of file diff --git a/src/assets/workflow.png b/src/assets/workflow.png deleted file mode 100644 index 5d343de7b53b137c46eefeb7c3deca1c25c2d88a..0000000000000000000000000000000000000000 Binary files a/src/assets/workflow.png and /dev/null differ diff --git a/src/components/Alert.tsx b/src/components/Alert.tsx index c4c995fc7fd037ac61f6274643173fc525833316..b5a3bc1fe2026a2c39cec6b8aeccb99096852045 100644 --- a/src/components/Alert.tsx +++ b/src/components/Alert.tsx @@ -1,11 +1,13 @@ +import { clsx } from "clsx"; import Icon, { IconName } from "./Icon.tsx"; import Typography from "./Typography.tsx"; -import { baseColor, borderColor, textColor } from "./utils/colors.ts"; +import { baseColorType } from "./utils/colors.ts"; +import { borderColor, textColor } from "./utils/classes.ts"; type AlertProps = { title: string; message: string; - alertType?: baseColor; + alertType?: baseColorType; }; /** @@ -23,12 +25,10 @@ const Alert = ({ title, message, alertType = "primary" }: AlertProps) => { positive: "checkmark-circle", negative: "cross-circle", }; + const baseClass = + "flex flex-row items-start py-[13px] px-[15px] rounded-[8px] w-min border-l-8 border-y-0 border-r-0 bg-baseWhite dark:bg-mediumGrey shadow-2xl"; return ( - <div - className={`${borderColor( - alertType - )} flex flex-row items-start py-[13px] px-[15px] rounded-[8px] w-min border-l-8 border-y-0 border-r-0 bg-baseWhite dark:bg-mediumGrey shadow-2xl`} - > + <div className={clsx(baseClass, borderColor(alertType))}> <Icon name={icon[alertType] as IconName} color={alertType} /> <div className="flex flex-col w-[400px] ml-[13px]"> <Typography diff --git a/src/components/Badge.tsx b/src/components/Badge.tsx index 8523d646d3d6426d92195d963c7e516794f34060..0d9240b8822ae471c660fcd41b137a856197e35b 100644 --- a/src/components/Badge.tsx +++ b/src/components/Badge.tsx @@ -1,10 +1,12 @@ import { Chip } from "@nextui-org/react"; +import { clsx } from "clsx"; import Typography from "./Typography.tsx"; -import { bgColor, borderColor, Color, textColor } from "./utils/colors.ts"; +import { ColorType } from "./utils/colors.ts"; +import { bgColor, borderColor, textColor } from "./utils/classes.ts"; type BadgeProps = { text: string; - color?: Color; + color?: ColorType; inverted?: boolean; }; @@ -16,16 +18,20 @@ type BadgeProps = { * @param inverted: boolean */ const Badge = ({ text, color = "primary", inverted = false }: BadgeProps) => { - const bgClass = inverted ? "bg-transparent" : bgColor(color); - const textClass = inverted ? textColor(color) : "text-baseWhite"; + const bgClass = (inverted: boolean) => + inverted ? "bg-transparent" : bgColor(color); + const textClass = (inverted: boolean) => + inverted ? textColor(color) : "text-baseWhite"; return ( <Chip variant={inverted ? "bordered" : "solid"} classNames={{ - base: `${borderColor( - color - )} ${bgClass} rounded-[4px] h-[20px] px-[10px]`, - content: `${textClass} px-0`, + base: clsx( + borderColor(color), + bgClass(inverted), + "rounded-[4px] h-[20px] px-[10px]" + ), + content: clsx(textClass(inverted), "px-0"), }} > <Typography diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 4c400237e332c2a4e7c88eb8506e549775e03e8a..df51ccb5c16c8a0450d5f07db83e2d16bf25d07e 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,12 +1,13 @@ import { Button as NextButton } from "@nextui-org/react"; +import { clsx } from "clsx"; import Icon, { IconName } from "./Icon.tsx"; import Typography from "./Typography.tsx"; -import { bgColor, Color } from "./utils/colors.ts"; -import { disabledCursor } from "./utils/classes.ts"; +import { ColorType } from "./utils/colors.ts"; +import { bgColor, cursorPointer } from "./utils/classes.ts"; export type ButtonProps = { label?: string | null; - color?: Color; + color?: ColorType; icon?: IconName | null; iconClass?: string; isDisabled?: boolean; @@ -33,25 +34,23 @@ const Button = ({ }: ButtonProps) => { if (!label && !icon) throw Error("Button cannot be empty"); - const px = () => { - if (icon && label) return "px-[8px] "; - else if (icon) return "px-[9px] "; - else if (label) return "px-[10px] "; - }; - const bgClass = (isDisabled: boolean) => { - if (!isDisabled) return bgColor(color) + " "; - return "bg-lightGrey "; + const pxClass = (icon: boolean, label: boolean) => { + if (icon && label) return "px-[8px]"; + else if (icon) return "px-[9px]"; + else if (label) return "px-[10px]"; }; + const bgClass = (isDisabled: boolean) => + isDisabled ? "bg-lightGrey !opacity-100" : bgColor(color); return ( <NextButton startContent={icon && <Icon name={icon} customClass={iconClass} />} - className={ - px() + - bgClass(isDisabled) + - disabledCursor(isDisabled) + - " h-[32px] min-w-fit max-w-fit py-[5px] text-baseWhite rounded-[4px] flex focus:!outline-0" - } + className={clsx( + pxClass(!!icon, !!label), + bgClass(isDisabled), + cursorPointer(isDisabled), + "h-[32px] min-w-fit max-w-fit py-[5px] text-baseWhite rounded-[4px] flex focus:!outline-0" + )} isDisabled={isDisabled} type={type} onClick={onClick} diff --git a/src/components/Checkbox.tsx b/src/components/Checkbox.tsx index 4128933494bb8968736f6738c0eb397e5ba515b8..a743ecfbf5debb3a310ed8b56424811afd4d3d37 100644 --- a/src/components/Checkbox.tsx +++ b/src/components/Checkbox.tsx @@ -1,7 +1,8 @@ import { Checkbox as NextCheckbox } from "@nextui-org/react"; import { Dispatch, SetStateAction } from "react"; +import { clsx } from "clsx"; import Icon from "./Icon.tsx"; -import { disabledBg, disabledCursor } from "./utils/classes.ts"; +import { formFieldBg, cursorPointer } from "./utils/classes.ts"; type CheckboxProps = { isDisabled?: boolean; @@ -30,11 +31,12 @@ const Checkbox = ({ color="default" disableAnimation classNames={{ - base: disabledCursor(isDisabled), - wrapper: - "w-[24px] h-[24px] rounded-[4px] " + - "border-[1px] border-grey dark:border-none " + - disabledBg(isDisabled), + base: cursorPointer(isDisabled), + wrapper: clsx( + "w-[24px] h-[24px] rounded-[4px]", + "border-[1px] border-grey dark:border-none", + formFieldBg(isDisabled) + ), }} > {label} diff --git a/src/components/DateInput.tsx b/src/components/DateInput.tsx index 67764dc660f9c092e212d0319b0b6a77c7a93e0b..0e7ee1efbbd10ac8ac398719cbd2d7a20aa52abb 100644 --- a/src/components/DateInput.tsx +++ b/src/components/DateInput.tsx @@ -5,7 +5,8 @@ import { format } from "date-fns"; import { BaseInput } from "./utils/baseComponents.tsx"; import Icon from "./Icon.tsx"; import Typography from "./Typography.tsx"; -import { textColor } from "./utils/colors.ts"; + +import { textColor } from "./utils/classes.ts"; type DateInputProps = { isRequired?: boolean; diff --git a/src/components/Dropdown.tsx b/src/components/Dropdown.tsx index b2ed37b6b3a1ba16385112d4083e4a3e15913011..0179b428da025dda7de5e484a237fd7ac8d025ea 100644 --- a/src/components/Dropdown.tsx +++ b/src/components/Dropdown.tsx @@ -1,5 +1,6 @@ import { Autocomplete, AutocompleteItem } from "@nextui-org/react"; import { Dispatch, SetStateAction } from "react"; +import { clsx } from "clsx"; import { baseInputClassNames } from "./utils/baseComponents.tsx"; import Icon from "./Icon.tsx"; @@ -18,6 +19,10 @@ const Dropdown = ({ value, onValueChange, }: DropdownProps) => { + const focusClass = + "data-[focus=true]:bg-lightGrey/50 dark:data-[focus=true]:bg-grey/50"; + const hoverCLass = + "data-[selected=true]:!bg-primary hover:!bg-lightGrey dark:hover:!bg-grey"; return ( <Autocomplete isRequired={isRequired} @@ -42,16 +47,11 @@ const Dropdown = ({ }} > {valueOptions.map((option) => { - const focusClass = - "data-[focus=true]:bg-lightGrey/50 dark:data-[focus=true]:bg-grey/50"; - const hoverCLass = - "data-[selected=true]:!bg-primary hover:!bg-lightGrey dark:hover:!bg-grey"; return ( <AutocompleteItem key={option.value} value={option.value} - // todo a concat classname util because I always forget the space in between - className={focusClass + " " + hoverCLass} + className={clsx(focusClass, hoverCLass)} > {option.label} </AutocompleteItem> diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx index 05d316f7b61b7993eaf2dcfc76c25ec8648809cb..4b7953f1227f8398b1187813a7266da11dc656d9 100644 --- a/src/components/Icon.tsx +++ b/src/components/Icon.tsx @@ -1,6 +1,8 @@ import { ReactSVG } from "react-svg"; +import { clsx } from "clsx"; import Icons from "src/assets/icons"; -import { TextColor, textColor } from "./utils/colors.ts"; +import { TextColorType } from "./utils/colors.ts"; +import { textColor } from "./utils/classes.ts"; export const iconNameOptions = [ "attention-circle", @@ -46,7 +48,7 @@ const iconMap = { type IconProps = { name: IconName; - color?: TextColor | null; + color?: TextColorType | null; customClass?: string; }; @@ -63,9 +65,14 @@ const Icon = ({ name, color = null, customClass = "" }: IconProps) => { if (!color && !customClass) { return <ReactSVG src={src} style={{ color: "currentColor" }} />; } - const colorClass = color ? textColor(color) : ""; return ( - <ReactSVG src={src} className={`${colorClass} ${customClass}`.trim()} /> + <ReactSVG + src={src} + className={clsx( + { [textColor(color as TextColorType)]: !!color }, + customClass + )} + /> ); }; diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx index 960cefbfc672fc762f14daf2d279fc4830f48e94..f2b47079d36558d2483651086c6cb09e37e129f7 100644 --- a/src/components/Modal.tsx +++ b/src/components/Modal.tsx @@ -50,7 +50,7 @@ const Modal = ({ body: "p-0 pb-[10px] pr-[20px]", closeButton: "text-foreground-heading mt-[17px] mr-[17px] p-0", footer: "flex flex-row justify-start gap-x-5 p-0 pt-[10px]", - header: "flex flex-col gap-1 px-0 py-[10px] ", + header: "flex flex-col gap-1 px-0 py-[10px]", }} > <ModalContent> diff --git a/src/components/Radio.tsx b/src/components/Radio.tsx index ad9faedf63d9e2845bd4f86455188ded274b3413..25ad779d6a6bb37988cb352b5f3a43d64d7ecb1a 100644 --- a/src/components/Radio.tsx +++ b/src/components/Radio.tsx @@ -1,6 +1,7 @@ import { RadioGroup, Radio as NextRadio } from "@nextui-org/react"; import { Dispatch, SetStateAction } from "react"; -import { disabledBg, disabledCursor } from "./utils/classes.ts"; +import { clsx } from "clsx"; +import { formFieldBg, cursorPointer } from "./utils/classes.ts"; type RadioProps = { isRequired?: boolean; @@ -31,10 +32,11 @@ const Radio = ({ value={option.value} disableAnimation classNames={{ - base: disabledCursor(option.isDisabled || false), - wrapper: - "w-[16px] h-[16px] border-[1px] !border-grey dark:border-none " + - disabledBg(option.isDisabled || false), + base: cursorPointer(option.isDisabled || false), + wrapper: clsx( + "w-[16px] h-[16px] border-[1px] !border-grey dark:border-none", + formFieldBg(option.isDisabled || false) + ), control: "w-[10px] h-[10px]", }} > diff --git a/src/components/Toggle.tsx b/src/components/Toggle.tsx index ab7d3c0d49f14e68eb47cff2eacd74c62a239638..577361e5c0c244b0a5d70d1b4ad4313e87ba2bd5 100644 --- a/src/components/Toggle.tsx +++ b/src/components/Toggle.tsx @@ -1,6 +1,7 @@ import { Dispatch, SetStateAction } from "react"; import { Switch } from "@nextui-org/react"; -import { disabledCursor } from "./utils/classes.ts"; +import { clsx } from "clsx"; +import { cursorPointer } from "./utils/classes.ts"; type ToggleProps = { isDisabled?: boolean; @@ -15,9 +16,8 @@ const Toggle = ({ setIsSelected, label, }: ToggleProps) => { - const selectedClass = isSelected - ? "group-data-[selected=true]:ml-[11px] bg-primary" - : "bg-grey"; + const selectedClass = (isSelected: boolean) => + isSelected ? "group-data-[selected=true]:ml-[11px] bg-primary" : "bg-grey"; return ( <Switch isDisabled={isDisabled} @@ -26,8 +26,8 @@ const Toggle = ({ onValueChange={setIsSelected} color="secondary" classNames={{ - base: disabledCursor(isDisabled), - thumb: `h-[14px] w-[14px] ${selectedClass}`, + base: cursorPointer(isDisabled), + thumb: clsx("h-[14px] w-[14px]", selectedClass(isSelected)), wrapper: "h-[8px] w-[25px] p-0 overflow-visible bg-lightGrey dark:bg-mediumGrey", }} diff --git a/src/components/Typography.tsx b/src/components/Typography.tsx index 86dd2cb0ec88c0c38d4cbd6fdac1822274804fd5..40a911617698c47d193f98afd26b42f31ceda119 100644 --- a/src/components/Typography.tsx +++ b/src/components/Typography.tsx @@ -1,4 +1,5 @@ -import { textColor } from "./utils/colors.ts"; +import { clsx } from "clsx"; +import { textColor } from "./utils/classes.ts"; type TypographyProps = { text: string; @@ -55,10 +56,16 @@ const Typography = ({ paragraph: textColor("body"), note: textColor("heading"), }; - const style = `${font[variant]} ${customClass} ${ - !customColor && color[variant] - }`; - return <span className={style}>{text}</span>; + + return ( + <span + className={clsx(font[variant], customClass, { + [color[variant]]: !customColor, + })} + > + {text} + </span> + ); }; export default Typography; diff --git a/src/components/utils/baseComponents.tsx b/src/components/utils/baseComponents.tsx index 0baa9f1235109b57ad573fc07b57afae61b5a21b..7530a1455185768f782c325ac2d4ee78d94bfb83 100644 --- a/src/components/utils/baseComponents.tsx +++ b/src/components/utils/baseComponents.tsx @@ -1,7 +1,8 @@ import { Input } from "@nextui-org/react"; import { Dispatch, ReactNode, SetStateAction } from "react"; import { InputSlots } from "@nextui-org/theme"; -import { disabledBg, disabledCursor } from "./classes.ts"; +import { clsx } from "clsx"; +import { formFieldBg, cursorPointer } from "./classes.ts"; type BaseInputProps = { // basic info @@ -21,34 +22,33 @@ type BaseInputProps = { type baseInputClassNamesObj = { [key in InputSlots]: string }; -export const baseInputClassNames = (isDisabled: boolean) => { - // No we cannot do "[&>svg]:" + className because Tailwind does not support dynamic class names - const clearButtonSvgClass = - "[&>svg]:w-[42px] [&>svg]:h-[42px] [&>svg]:mt-[-6px] [&>svg]:ml-[-5px]"; +export const baseInputClassNames = ( + isDisabled: boolean +): baseInputClassNamesObj => { + // this is the border color (use text-*) + const mainWrapperClass = (isDisabled: boolean) => + isDisabled + ? "text-mediumGrey dark:text-darkModeBlue" + : "text-grey dark:text-mediumGrey hover:text-baseBlack focus-within:!text-primary"; - const baseClass = { - base: disabledCursor(isDisabled), - label: "!text-foreground-body", - input: "!text-foreground-body bg-default", - inputWrapper: "px-2 rounded-[4px] " + disabledBg(isDisabled), - }; + const clearButtonClass = (isDisabled: boolean) => { + // we cannot do "[&>svg]:" + className because Tailwind does not support dynamic class names + const clearButtonSvgClass: string = + "[&>svg]:w-[42px] [&>svg]:h-[42px] [&>svg]:mt-[-6px] [&>svg]:ml-[-5px]"; + const clearButtonBaseClass: string = + "bg-mediumGrey text-baseWhite dark:bg-baseWhite dark:text-mediumGrey w-[30px] h-[30px] p-0 !opacity-100"; - const defaultClass = { - ...baseClass, - mainWrapper: - "text-grey dark:text-mediumGrey hover:text-baseBlack focus-within:!text-primary", // this is the border color (use text-*) - clearButton: - clearButtonSvgClass + - " " + - "bg-mediumGrey text-baseWhite dark:bg-baseWhite dark:text-mediumGrey w-[30px] h-[30px] p-0 !opacity-100", - } as baseInputClassNamesObj; + return isDisabled ? "" : clsx(clearButtonSvgClass, clearButtonBaseClass); + }; - const disabledClass = { - ...baseClass, - mainWrapper: "text-mediumGrey dark:text-darkModeBlue", + return { + base: cursorPointer(isDisabled), + label: "!text-foreground-body", + input: "!text-foreground-body bg-default", + inputWrapper: clsx("px-2 rounded-[4px]", formFieldBg(isDisabled)), + mainWrapper: mainWrapperClass(isDisabled), + clearButton: clearButtonClass(isDisabled), } as baseInputClassNamesObj; - - return isDisabled ? disabledClass : defaultClass; }; export const BaseInput = ({ diff --git a/src/components/utils/classes.ts b/src/components/utils/classes.ts index 7ab8b54562f54ee7adce8ab53fcde921c3aa0db7..91f97f3d9a189734d05fd032d91b6411110e56eb 100644 --- a/src/components/utils/classes.ts +++ b/src/components/utils/classes.ts @@ -1,9 +1,66 @@ -export const disabledCursor = (isDisabled: boolean) => { - if (!isDisabled) return ""; - return "pointer-events-auto cursor-not-allowed opacity-50"; -}; +import { ColorType, TextColorType } from "./colors.ts"; + +export const cursorPointer = (isDisabled: boolean) => + isDisabled ? "pointer-events-auto cursor-not-allowed" : ""; + +export const formFieldBg = (isDisabled: boolean) => + isDisabled + ? "bg-lightGrey dark:bg-darkModeBlue" + : "bg-baseWhite dark:bg-mediumGrey"; -export const disabledBg = (isDisabled: boolean) => { - if (!isDisabled) return "bg-baseWhite dark:bg-mediumGrey"; - return "bg-lightGrey dark:bg-darkModeBlue"; +export const bgColor = (color: ColorType) => { + switch (color) { + case "primary": + return "bg-primary"; + case "secondary": + return "bg-secondary"; + case "positive": + return "bg-success"; + case "negative": + return "bg-danger"; + case "warning": + return "bg-warning"; + case "neutral": + return "bg-neutral"; + } +}; +export const borderColor = (color: ColorType) => { + switch (color) { + case "primary": + return "border-primary"; + case "secondary": + return "border-secondary"; + case "positive": + return "border-success"; + case "negative": + return "border-danger"; + case "warning": + return "border-warning"; + case "neutral": + return "border-neutral"; + } +}; +export const textColor = (color: TextColorType) => { + switch (color) { + case "heading": + return "text-foreground-heading"; + case "heading2": + return "text-foreground-heading2"; + case "body": + return "text-foreground-body"; + case "transparent": + return "text-default"; + case "primary": + return "text-primary"; + case "secondary": + return "text-secondary"; + case "positive": + return "text-success"; + case "negative": + return "text-danger"; + case "warning": + return "text-warning"; + case "neutral": + return "text-neutral"; + } }; diff --git a/src/components/utils/colors.ts b/src/components/utils/colors.ts index 7bb0e1408efd87f8288250c91f2e7aa1c9834371..6c485182dd77869ec85ee88053e46f5621017679 100644 --- a/src/components/utils/colors.ts +++ b/src/components/utils/colors.ts @@ -5,7 +5,7 @@ export const baseColorOptions = [ "warning", ] as const; -export type baseColor = (typeof baseColorOptions)[number]; +export type baseColorType = (typeof baseColorOptions)[number]; export const colorOptions = [ ...baseColorOptions, @@ -13,7 +13,7 @@ export const colorOptions = [ "neutral", ] as const; -export type Color = (typeof colorOptions)[number]; +export type ColorType = (typeof colorOptions)[number]; export const textColorOptions = [ ...colorOptions, @@ -23,63 +23,4 @@ export const textColorOptions = [ "transparent", ] as const; -export type TextColor = (typeof textColorOptions)[number]; - -export const bgColor = (color: Color) => { - switch (color) { - case "primary": - return "bg-primary"; - case "secondary": - return "bg-secondary"; - case "positive": - return "bg-success"; - case "negative": - return "bg-danger"; - case "warning": - return "bg-warning"; - case "neutral": - return "bg-neutral"; - } -}; - -export const borderColor = (color: Color) => { - switch (color) { - case "primary": - return "border-primary"; - case "secondary": - return "border-secondary"; - case "positive": - return "border-success"; - case "negative": - return "border-danger"; - case "warning": - return "border-warning"; - case "neutral": - return "border-neutral"; - } -}; - -export const textColor = (color: TextColor) => { - switch (color) { - case "heading": - return "text-foreground-heading"; - case "heading2": - return "text-foreground-heading2"; - case "body": - return "text-foreground-body"; - case "transparent": - return "text-default"; - case "primary": - return "text-primary"; - case "secondary": - return "text-secondary"; - case "positive": - return "text-success"; - case "negative": - return "text-danger"; - case "warning": - return "text-warning"; - case "neutral": - return "text-neutral"; - } -}; +export type TextColorType = (typeof textColorOptions)[number];