feat(docs): writing getting started and answering a challenge

This commit is contained in:
thomas
2023-09-19 13:11:36 +02:00
parent 412e105c5e
commit b445f81aaf
43 changed files with 478 additions and 367 deletions

View File

@@ -16,6 +16,11 @@ export default defineConfig({
linkedin: 'https://www.linkedin.com/in/thomas-laforge-2b05a945/', linkedin: 'https://www.linkedin.com/in/thomas-laforge-2b05a945/',
twitter: 'https://twitter.com/laforge_toma', twitter: 'https://twitter.com/laforge_toma',
}, },
customCss: [
'@fontsource/ibm-plex-serif/400.css',
'@fontsource/ibm-plex-serif/600.css',
'./src/styles/custom-css.css',
],
sidebar: [ sidebar: [
{ {
label: 'Guides', label: 'Guides',
@@ -23,315 +28,316 @@ export default defineConfig({
}, },
{ {
label: 'Challenges', label: 'Challenges',
items: [ autogenerate: { directory: 'challenges' },
{ // items: [
label: 'Angular', // {
items: [ // label: 'Angular',
{ // items: [
label: 'Projection', // {
link: '/challenges/angular/projection', // label: 'Projection',
badge: { // link: '/challenges/angular/projection',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Directive enhancement', // {
link: '/challenges/angular/directive-enhancement', // label: 'Directive enhancement',
badge: { // link: '/challenges/angular/directive-enhancement',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'ContextOutlet Typing', // {
link: '/challenges/angular/context-outlet-typing', // label: 'ContextOutlet Typing',
badge: { // link: '/challenges/angular/context-outlet-typing',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
{ // },
label: 'CRUD', // {
link: '/challenges/angular/crud', // label: 'CRUD',
badge: { // link: '/challenges/angular/crud',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Permissions', // {
link: '/challenges/angular/permissions', // label: 'Permissions',
badge: { // link: '/challenges/angular/permissions',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Simple Pure Pipe', // {
link: '/challenges/angular/pipe-pure', // label: 'Simple Pure Pipe',
badge: { // link: '/challenges/angular/pipe-pure',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'WrapFn Pipe', // {
link: '/challenges/angular/pipe-wrapFn', // label: 'WrapFn Pipe',
badge: { // link: '/challenges/angular/pipe-wrapFn',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Utility Pipe', // {
link: '/challenges/angular/pipe-utility', // label: 'Utility Pipe',
badge: { // link: '/challenges/angular/pipe-utility',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
{ // },
label: 'Change Dectection - scroll', // {
link: '/challenges/angular/scroll-cd', // label: 'Change Dectection - scroll',
badge: { // link: '/challenges/angular/scroll-cd',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Styling', // {
link: '/challenges/angular/styling', // label: 'Styling',
badge: { // link: '/challenges/angular/styling',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Dependancy Injection', // {
link: '/challenges/angular/di', // label: 'Dependancy Injection',
badge: { // link: '/challenges/angular/di',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
{ // },
label: 'Anchor Scrolling', // {
link: '/challenges/angular/anchor-scrolling', // label: 'Anchor Scrolling',
badge: { // link: '/challenges/angular/anchor-scrolling',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Router Input', // {
link: '/challenges/angular/router-input', // label: 'Router Input',
badge: { // link: '/challenges/angular/router-input',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Interop Rxjs Signal', // {
link: '/challenges/angular/interop-rxjs-signal', // label: 'Interop Rxjs Signal',
badge: { // link: '/challenges/angular/interop-rxjs-signal',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
{ // },
label: 'Module to Standalone', // {
link: '/challenges/angular/modaule-to-standalone', // label: 'Module to Standalone',
badge: { // link: '/challenges/angular/modaule-to-standalone',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Bug - Change Detection', // {
link: '/challenges/angular/bug-cd', // label: 'Bug - Change Detection',
badge: { // link: '/challenges/angular/bug-cd',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: "Component's Decoupling", // {
link: '/challenges/angular/decoupling', // label: "Component's Decoupling",
badge: { // link: '/challenges/angular/decoupling',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
], // },
}, // ],
{ // },
label: 'Angular - Performance', // {
items: [ // label: 'Angular - Performance',
{ // items: [
label: 'Default vs OnPush', // {
link: '/challenges/angular-performance/default-onpush', // label: 'Default vs OnPush',
badge: { // link: '/challenges/angular-performance/default-onpush',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
], // },
}, // ],
{ // },
label: 'Testing', // {
items: [ // label: 'Testing',
{ // items: [
label: 'Router', // {
link: '/challenges/testing/router', // label: 'Router',
badge: { // link: '/challenges/testing/router',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Nested Component', // {
link: '/challenges/testing/nested-comp', // label: 'Nested Component',
badge: { // link: '/challenges/testing/nested-comp',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Input Output', // {
link: '/challenges/testing/input-output', // label: 'Input Output',
badge: { // link: '/challenges/testing/input-output',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Modal', // {
link: '/challenges/testing/modal', // label: 'Modal',
badge: { // link: '/challenges/testing/modal',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'harness', // {
link: '/challenges/testing/harness', // label: 'harness',
badge: { // link: '/challenges/testing/harness',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Harness Creation', // {
link: '/challenges/testing/harness-creation', // label: 'Harness Creation',
badge: { // link: '/challenges/testing/harness-creation',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Checkbox', // {
link: '/challenges/testing/checkbox', // label: 'Checkbox',
badge: { // link: '/challenges/testing/checkbox',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
{ // },
label: 'Reallife Application', // {
link: '/challenges/testing/real-application', // label: 'Reallife Application',
badge: { // link: '/challenges/testing/real-application',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
], // },
}, // ],
{ // },
label: 'RxJs', // {
items: [ // label: 'RxJs',
{ // items: [
label: 'Bug - Chaining Operators', // {
link: '/challenges/rxjs/bug-chaining-operator', // label: 'Bug - Chaining Operators',
badge: { // link: '/challenges/rxjs/bug-chaining-operator',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Race Condition', // {
link: '/challenges/rxjs/race-condition', // label: 'Race Condition',
badge: { // link: '/challenges/rxjs/race-condition',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
], // },
}, // ],
{ // },
label: 'Nx', // {
items: [ // label: 'Nx',
{ // items: [
label: 'Extending Library Generator', // {
link: '/challenges/nx/generator-lib-ext', // label: 'Extending Library Generator',
badge: { // link: '/challenges/nx/generator-lib-ext',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
{ // },
label: 'Component Generator', // {
link: '/challenges/nx/generator-comp', // label: 'Component Generator',
badge: { // link: '/challenges/nx/generator-comp',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Custom Eslint Rule', // {
link: '/challenges/nx/forbid-enum-rule', // label: 'Custom Eslint Rule',
badge: { // link: '/challenges/nx/forbid-enum-rule',
text: 'E', // badge: {
variant: 'success', // text: 'E',
}, // variant: 'success',
}, // },
], // },
}, // ],
{ // },
label: 'NgRx', // {
items: [ // label: 'NgRx',
{ // items: [
label: 'Effect vs Selector', // {
link: '/challenges/ngrx/effect-selector', // label: 'Effect vs Selector',
badge: { // link: '/challenges/ngrx/effect-selector',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
{ // },
label: 'Power of Effects', // {
link: '/challenges/ngrx/power-effect', // label: 'Power of Effects',
badge: { // link: '/challenges/ngrx/power-effect',
text: 'H', // badge: {
variant: 'danger', // text: 'H',
}, // variant: 'danger',
}, // },
], // },
}, // ],
{ // },
label: 'Typescript', // {
items: [ // label: 'Typescript',
{ // items: [
label: 'Function Overload', // {
link: '/challenges/typescript/overload-fn', // label: 'Function Overload',
badge: { // link: '/challenges/typescript/overload-fn',
text: 'M', // badge: {
variant: 'caution', // text: 'M',
}, // variant: 'caution',
}, // },
], // },
}, // ],
], // },
// ],
}, },
], ],
}), }),

View File

@@ -9,6 +9,7 @@
"version": "0.0.1", "version": "0.0.1",
"dependencies": { "dependencies": {
"@astrojs/starlight": "^0.10.0", "@astrojs/starlight": "^0.10.0",
"@fontsource/ibm-plex-serif": "^5.0.8",
"astro": "^3.0.6", "astro": "^3.0.6",
"sharp": "^0.32.5" "sharp": "^0.32.5"
} }
@@ -814,6 +815,11 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/@fontsource/ibm-plex-serif": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-serif/-/ibm-plex-serif-5.0.8.tgz",
"integrity": "sha512-KUp1E9Wzf2Umhr2SbpcF9HwgFJmuxvKAARmpl7GDDkIG30R1PMFJWxfSfQ7oX/oVBtomGq5RUTaMMUeE0ngEgw=="
},
"node_modules/@jridgewell/gen-mapping": { "node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3", "version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",

View File

@@ -11,6 +11,7 @@
}, },
"dependencies": { "dependencies": {
"@astrojs/starlight": "^0.10.0", "@astrojs/starlight": "^0.10.0",
"@fontsource/ibm-plex-serif": "^5.0.8",
"astro": "^3.0.6", "astro": "^3.0.6",
"sharp": "^0.32.5" "sharp": "^0.32.5"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: 🟠 Directive Enhancement
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,9 +1,9 @@
--- ---
title: Projection title: 🟢 Projection
description: angular-challenge-1/projection description: angular-challenge-1/projection
--- ---
#1 - <span class="sl-badge success astro-vohx2lp7">Easy</span> > Challenge #1
## Statement ## Statement

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -1,4 +1,4 @@
--- ---
title: Submit your answer title: TODO in progress
description: Guide to submit an answer description: Guide to submit an answer
--- ---

View File

@@ -3,9 +3,50 @@ title: Getting Started
description: A guide on how to get started with Angular Challenges. description: A guide on how to get started with Angular Challenges.
--- ---
Guides lead a user through a specific task they want to accomplish, often with a sequence of steps. To get started with **Angular Challenges**, follow the step:
Writing a good guide requires thinking about what your users are trying to do.
## Further reading ## Create a Github account
- Read [about how-to guides](https://diataxis.fr/how-to-guides/) in the Diátaxis framework If you want to submit an answer, you will need your own Github account. Moreover it's always good to have one and it's free.
## Folk the github project
Go to [Angular Challenges Repository](https://github.com/tomalaforge/angular-challenges) and click on the **Fork** button in the header. This will create a copy of this repository inside your own Github page.
## Clone the repository on your own machine
Find a directory on your local computer, and clone this repository. Open a terminal, go to the choosen directory and tape this:
```bash
git clone https://github.com/[YOUR_GITHUB_NAME]/angular-challenges.git
```
:::note
Your can find the url to clone on the button labeled <span class="code-btn"><> Code</span> on your **OWN INSTANCE** of the Angular Challenge repository.
![Header of github workpspace](../../../assets/header-github.png)
:::
## Open the project inside your favourite IDE
Open your project inside any IDE of your choice.
## Install all dependancies
```bash
npm install
```
## Choose a challenge
Your project is now up and running. The only thing left to do is to choose a challenge 🚀
Each challenge is composed by:
- **NAME**: indicating what the challenge is about
- **NUMBER**: order of creation. The number doesn't have any particular meaning but helps to reference it inside Github Pull Request Section.
- **BADGE**: helps to visualize the degree of difficulty. It's totally subjectif 😅
- 🟢 easy
- 🟠 medium
- 🔴 difficult

View File

@@ -0,0 +1,37 @@
---
title: Resolve a Challenge
description: Guide to resolve a challenge
---
In this guide, you will learn how to resolve a challenge and submit an answer to the main Github repository.
## Presentation
This repository is powered by [Nx](https://nx.dev/getting-started/intro). **Nx** is a monorepository allowing to store multiple application inside the same workspace. That's said, each challenges is a separate application. If you open the `apps` directory, you will found multiple directory all related to one challenge. Each directory is a complete standalone `Nx` application. To run and start with one, open your terminal and run
```bash
npx nx serve <APPLICATION_NAME>
```
:::note
If you are not sure of your APPLICATION_NAME, open the README.md file. The `serve` command is written inside with a link to the documentation challenge.
:::
:::note
If `nx` is installed globally on your device, you can avoid using `npx`.
If you want to install `nx` globally, run
```bash
npm i -g nx
```
:::
## Create a git branch
Before starting implementing your own solution to resolve a challenge, create a git branch to save your work.
```bash
git checkout -b <BRANCH_NAME>
```

View File

@@ -1,4 +0,0 @@
---
title: Submit your answer
description: Guide to submit an answer
---

View File

@@ -3,7 +3,7 @@ title: Welcome to Angular Challenges
description: Get started by resolving those challenges and becoming a better Angular FrontEnd engineer. description: Get started by resolving those challenges and becoming a better Angular FrontEnd engineer.
template: splash template: splash
hero: hero:
tagline: Congrats on setting up a new Starlight project! tagline: Start now and become an Angular Expert!
image: image:
file: ../../assets/angular-challenge.webp file: ../../assets/angular-challenge.webp
actions: actions:
@@ -11,26 +11,31 @@ hero:
link: /guides/getting-started/ link: /guides/getting-started/
icon: right-arrow icon: right-arrow
variant: primary variant: primary
- text: Read the Starlight docs - text: Start your first challenge immediatly
link: https://starlight.astro.build link: /challenges/angular/projection/
icon: external icon: rocket
--- ---
import { Card, CardGrid } from '@astrojs/starlight/components'; import { Card, CardGrid } from '@astrojs/starlight/components';
## Next steps <CardGrid>
<Card title="More than 30 challenges">
<CardGrid stagger> This repository gather more than 30 challenges about Angular, Nx, Ngrx,
<Card title="Update content" icon="pencil"> Rxjs, Ngrx about real life issues or specific feature to level up your game.
Edit `src/content/docs/index.mdx` to see this page change.
</Card> </Card>
<Card title="Add new content" icon="add-document"> <Card title="Become an OSS maintainer">
Add Markdown or MDX files to `src/content/docs` to create new pages. One goal of this repository is to break the barrier to OSS. By answering
challenges, you will learn how to start contributing to any other Open
Source Project.
</Card> </Card>
<Card title="Configure your site" icon="setting"> <Card title="Learn alongside other">
Edit your `sidebar` and other config in `astro.config.mjs`. It's always hard to learn and practise a new framework. This set of
challenges will give your real use cases to practise what you have been
learning and anybody can comment or help you out. Learning alone is great,
but learning alongside other is way better.
</Card> </Card>
<Card title="Read the docs" icon="open-book"> <Card title="Contribute">
Learn more in [the Starlight Docs](https://starlight.astro.build/). You have an issue, an interesing bug, an idea. Don't waste any time and
create your own challenges.
</Card> </Card>
</CardGrid> </CardGrid>

View File

@@ -0,0 +1,19 @@
:root {
--sl-color-black: #1b1b1d;
--sl-color-gray-6: #242526;
--sl-color-accent-high: #f10023;
--sl-icon-color: #fff;
--sl-color-text-invert: #fff;
--primary-color: var(--sl-color-bg-nav) !important;
/* --sl-color-text-invert: #212121; */
--cardBgColor: #242526;
/* --sl-font: 'IBM Plex Serif', serif; */
}
.code-btn {
border: 2px solid rgba(240, 246, 252, 0.1);
border-radius: 6px;
padding: 2px 8px;
background-color: rgb(35, 134, 54);
color: white;
}