@platformatic/ui-components 0.1.32 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/.github/workflows/ci.yml +26 -26
  2. package/.nvmrc +1 -1
  3. package/LICENSE +201 -201
  4. package/README.md +30 -26
  5. package/dist/main.css +35 -23
  6. package/fonts/Montserrat/README.txt +81 -81
  7. package/index.html +12 -12
  8. package/index.js +62 -58
  9. package/package.json +76 -76
  10. package/postcss.config.cjs +8 -8
  11. package/public/api-icon-closed.svg +6 -6
  12. package/public/api-icon.svg +9 -9
  13. package/src/App.jsx +12 -12
  14. package/src/components/BorderedBox.jsx +16 -16
  15. package/src/components/BorderedBox.module.css +2 -2
  16. package/src/components/BorderedText.jsx +8 -8
  17. package/src/components/BorderedText.module.css +2 -2
  18. package/src/components/Box.jsx +14 -14
  19. package/src/components/Box.module.css +7 -7
  20. package/src/components/Button.jsx +23 -23
  21. package/src/components/Button.module.css +68 -21
  22. package/src/components/ButtonFullRounded.jsx +17 -0
  23. package/src/components/ButtonFullRounded.module.css +28 -0
  24. package/src/components/Checkbox.jsx +11 -0
  25. package/src/components/Checkbox.module.css +18 -0
  26. package/src/components/Common.module.css +7 -7
  27. package/src/components/DetailedMetric.jsx +32 -32
  28. package/src/components/DetailedMetric.module.css +2 -2
  29. package/src/components/DropDown.jsx +35 -35
  30. package/src/components/DropDown.module.css +22 -22
  31. package/src/components/FollowUs.jsx +35 -35
  32. package/src/components/FollowUs.module.css +11 -11
  33. package/src/components/GHLoginButton.jsx +14 -14
  34. package/src/components/HorizontalSeparator.jsx +10 -5
  35. package/src/components/HorizontalSeparator.module.css +23 -0
  36. package/src/components/Input.jsx +11 -11
  37. package/src/components/Input.module.css +7 -7
  38. package/src/components/List.jsx +20 -20
  39. package/src/components/List.module.css +11 -11
  40. package/src/components/ListElement.jsx +23 -23
  41. package/src/components/ListElement.module.css +23 -23
  42. package/src/components/Loadable.jsx +34 -34
  43. package/src/components/Loadable.module.css +13 -13
  44. package/src/components/LoginButton.jsx +17 -17
  45. package/src/components/LoginButton.module.css +7 -7
  46. package/src/components/LoginButton.test.jsx +25 -25
  47. package/src/components/Logo.jsx +58 -58
  48. package/src/components/Main.jsx +33 -33
  49. package/src/components/MetricValue.jsx +15 -15
  50. package/src/components/MetricValue.module.css +7 -7
  51. package/src/components/Modal.jsx +61 -29
  52. package/src/components/Modal.module.css +37 -25
  53. package/src/components/Playground.jsx +9 -9
  54. package/src/components/SearchBar.jsx +63 -63
  55. package/src/components/SearchBar.module.css +20 -20
  56. package/src/components/SimpleMetric.jsx +32 -32
  57. package/src/components/SimpleMetric.module.css +6 -6
  58. package/src/components/Status.jsx +26 -26
  59. package/src/components/TabbedWindow.jsx +34 -34
  60. package/src/components/TabbedWindow.module.css +16 -16
  61. package/src/components/TextWithLabel.jsx +11 -11
  62. package/src/components/TextWithLabel.module.css +8 -8
  63. package/src/components/Versions.jsx +9 -9
  64. package/src/components/VerticalSeparator.jsx +5 -5
  65. package/src/components/icons/ApiEmptyIcon.jsx +107 -107
  66. package/src/components/icons/ApiIcon.jsx +29 -29
  67. package/src/components/icons/ApiIconClosed.jsx +19 -19
  68. package/src/components/icons/CloseModalGreenHoverIcon.jsx +37 -0
  69. package/src/components/icons/CloseModalGreenIcon.jsx +27 -0
  70. package/src/components/icons/CloseModalIcon.jsx +26 -26
  71. package/src/components/icons/PullRequestIcon.jsx +31 -31
  72. package/src/components/icons/index.js +11 -9
  73. package/src/components/layouts/Layout.jsx +11 -11
  74. package/src/components/layouts/TwoColumnsLayout.jsx +12 -12
  75. package/src/components/layouts/TwoColumnsLayout.module.css +9 -9
  76. package/src/hooks/useEscapeKey.js +20 -20
  77. package/src/lib/utils.js +23 -23
  78. package/src/main.jsx +9 -9
  79. package/src/stories/BorderedBox.stories.jsx +33 -33
  80. package/src/stories/BorderedText.stories.jsx +24 -24
  81. package/src/stories/Button.stories.jsx +124 -107
  82. package/src/stories/ButtonFullRounded.stories.jsx +61 -0
  83. package/src/stories/Checkbox.stories.jsx +27 -0
  84. package/src/stories/DetailedMetric.stories.jsx +33 -33
  85. package/src/stories/DropDown.stories.jsx +62 -62
  86. package/src/stories/FollowUs.stories.jsx +14 -14
  87. package/src/stories/GHLoginButton.stories.jsx +14 -14
  88. package/src/stories/HorizontalSeparator.stories.jsx +12 -12
  89. package/src/stories/Input.stories.jsx +15 -15
  90. package/src/stories/Introduction.stories.mdx +211 -211
  91. package/src/stories/List.stories.jsx +29 -29
  92. package/src/stories/ListElement.stories.jsx +15 -15
  93. package/src/stories/Loadable.stories.jsx +75 -75
  94. package/src/stories/LoginButton.stories.jsx +15 -15
  95. package/src/stories/Logo.stories.jsx +17 -17
  96. package/src/stories/Modal.stories.jsx +94 -65
  97. package/src/stories/SearchBar.stories.jsx +28 -28
  98. package/src/stories/SimpleMetric.stories.jsx +41 -41
  99. package/src/stories/Status.stories.jsx +31 -31
  100. package/src/stories/TextWithLabel.stories.jsx +25 -25
  101. package/src/stories/TwoColumnsLayout.stories.jsx +42 -42
  102. package/src/styles/main.css +15 -15
  103. package/tailwind.config.cjs +42 -37
  104. package/vite.config.js +6 -6
  105. package/vitest.config.js +14 -14
  106. package/dist/api-icon-closed.svg +0 -6
  107. package/dist/api-icon.svg +0 -9
  108. package/dist/assets/index.5ac5acb7.js +0 -797
  109. package/dist/assets/index.d3f5882c.css +0 -1
  110. package/dist/index.html +0 -14
  111. package/dist/vite.svg +0 -1
@@ -1,7 +1,7 @@
1
- .box {
2
- @apply p-5 m-0 md:p-0 md:m-24 flex flex-col;
3
- }
4
-
5
- .justifyCentered {
6
- @apply justify-center;
7
- }
1
+ .box {
2
+ @apply p-5 m-0 md:p-0 md:m-24 flex flex-col;
3
+ }
4
+
5
+ .justifyCentered {
6
+ @apply justify-center;
7
+ }
@@ -1,23 +1,23 @@
1
- 'use strict'
2
-
3
- import React from 'react'
4
- import styles from './Button.module.css'
5
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
6
- export default function Button (props) {
7
- const { icon, label, primary, color, disabled } = props
8
- let buttonClass = 'primary'
9
- if (!primary) {
10
- buttonClass = 'secondary'
11
- }
12
-
13
- let colorClass = 'green'
14
- if (color === 'red') {
15
- colorClass = 'red'
16
- }
17
- return (
18
- <button className={`${styles.button} ${styles[buttonClass + '-' + colorClass]} ${disabled ? styles.disabled : null}`} disabled={disabled} {...props}>
19
- {icon ? <FontAwesomeIcon icon={icon} className='mr-2' data-testid='button-icon' /> : null}
20
- <span>{label}</span>
21
- </button>
22
- )
23
- }
1
+ 'use strict'
2
+
3
+ import React from 'react'
4
+ import styles from './Button.module.css'
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
6
+ export default function Button (props) {
7
+ const { icon, label, buttonClass = 'secondary', color = 'green', disabled, size = 'large', bold = false, ...rest } = props
8
+ let className = `${styles.button} ${styles[buttonClass + '-' + color]} ${styles['button-' + size]}`
9
+ if (disabled) {
10
+ className += ` ${styles.disabled}`
11
+ if (buttonClass === 'transparent') {
12
+ className += ` ${styles['disabled-transparent']}`
13
+ }
14
+ }
15
+ if (bold) className += ` ${styles.fontBold}`
16
+
17
+ return (
18
+ <button className={className} disabled={disabled} alt={label} {...rest}>
19
+ {icon ? <FontAwesomeIcon icon={icon} className={`${styles['margin-right-' + size]}`} data-testid='button-icon' /> : null}
20
+ <span>{label}</span>
21
+ </button>
22
+ )
23
+ }
@@ -1,21 +1,68 @@
1
- .button {
2
- @apply py-2 px-2 rounded text-center cursor-pointer
3
- }
4
-
5
- .primary-green {
6
- @apply text-main-dark-blue bg-light-green;
7
- }
8
- .secondary-green {
9
- @apply border-main-green text-main-green bg-none border border-solid box-border rounded-md font-normal;
10
- }
11
-
12
- .primary-red {
13
- @apply text-main-dark-blue bg-error-red;
14
- }
15
- .secondary-red {
16
- @apply border-error-red text-error-red bg-none border border-solid box-border rounded-md font-normal;
17
- }
18
-
19
- .disabled {
20
- @apply bg-opacity-30 cursor-default;
21
- }
1
+ .button {
2
+ @apply rounded text-center cursor-pointer font-normal;
3
+ }
4
+ .fontBold {
5
+ @apply font-semibold;
6
+ }
7
+ .button-small {
8
+ @apply p-1 text-sm;
9
+ }
10
+ .button-medium {
11
+ @apply p-1;
12
+ }
13
+ .button-large {
14
+ @apply p-2;
15
+ }
16
+ .button-extra-large {
17
+ @apply p-2 md:p-2.5;
18
+ }
19
+
20
+ .margin-right-medium,
21
+ .margin-right-small {
22
+ @apply mr-1;
23
+ }
24
+ .margin-right-large {
25
+ @apply mr-2;
26
+ }
27
+ .margin-right-extra-large {
28
+ @apply mr-3;
29
+ }
30
+
31
+ .primary-green {
32
+ @apply text-main-dark-blue bg-light-green;
33
+ }
34
+ .secondary-green {
35
+ @apply border-main-green text-main-green bg-none border border-solid box-border rounded-md;
36
+ }
37
+ .transparent-green {
38
+ @apply text-main-green border-0 bg-transparent hover:underline;
39
+ }
40
+
41
+
42
+ .primary-red {
43
+ @apply text-main-dark-blue bg-error-red;
44
+ }
45
+ .secondary-red {
46
+ @apply border-error-red text-error-red bg-none border border-solid box-border rounded-md;
47
+ }
48
+ .transparent-red {
49
+ @apply text-error-red border-0 bg-transparent hover:underline;
50
+ }
51
+
52
+ .primary-white {
53
+ @apply text-main-dark-blue bg-white;
54
+ }
55
+ .secondary-white {
56
+ @apply border-white text-white bg-none border border-solid box-border rounded-md;
57
+ }
58
+ .transparent-white {
59
+ @apply text-white border-0 bg-transparent hover:underline;
60
+ }
61
+
62
+ .disabled {
63
+ @apply opacity-30 cursor-default;
64
+ }
65
+
66
+ .disabled-transparent {
67
+ @apply hover:no-underline;
68
+ }
@@ -0,0 +1,17 @@
1
+ 'use strict'
2
+ import React from 'react'
3
+ import styles from './ButtonFullRounded.module.css'
4
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
5
+ export default function ButtonFullRounded (props) {
6
+ // colorClass: white
7
+ // size: small|medium|large
8
+ const { icon, color = 'white', disabled, size = 'small' } = props
9
+ let className = `${styles.buttonRoundedFull} ${styles[color]} ${styles['button-' + size]}`
10
+ if (disabled) className += ` ${styles.disabled}`
11
+
12
+ return (
13
+ <button className={className} disabled={disabled} {...props}>
14
+ <FontAwesomeIcon icon={icon} data-testid='button-icon' />
15
+ </button>
16
+ )
17
+ }
@@ -0,0 +1,28 @@
1
+ .buttonRoundedFull {
2
+ @apply rounded-full flex justify-center cursor-pointer font-normal bg-main-dark-blue border items-center;
3
+ }
4
+
5
+
6
+ .button-small {
7
+ @apply p-0 text-sm h-5 w-5;
8
+ }
9
+ .button-medium {
10
+ @apply p-1 h-6 w-6;
11
+ }
12
+ .button-large {
13
+ @apply p-2 h-7 w-7;
14
+ }
15
+
16
+ .green {
17
+ @apply border-light-green text-light-green ;
18
+ }
19
+ .red {
20
+ @apply border-error-red text-error-red;
21
+ }
22
+ .white {
23
+ @apply border-white text-white;
24
+ }
25
+
26
+ .disabled {
27
+ @apply bg-opacity-30 cursor-default;
28
+ }
@@ -0,0 +1,11 @@
1
+ 'use strict'
2
+ import React from 'react'
3
+ import styles from './Checkbox.module.css'
4
+ export default function Checkbox (props) {
5
+ const { disabled, ...rest } = props
6
+ let className = `${styles.checkbox}`
7
+ if (disabled) className += ` ${styles.disabled}`
8
+ return (
9
+ <input type='checkbox' className={className} disabled={disabled} {...rest} />
10
+ )
11
+ }
@@ -0,0 +1,18 @@
1
+ .checkbox {
2
+ @apply border border-light-green p-2 rounded-sm bg-main-dark-blue relative inline-block h-2 w-2;
3
+ -webkit-appearance: none;
4
+ }
5
+
6
+ .checkbox:checked {
7
+ @apply bg-light-green text-main-dark-blue;
8
+ }
9
+
10
+ .checkbox:checked:after {
11
+ @apply absolute top-[-2px] left-[1px] h-full w-full;
12
+ content: '\2714';
13
+ }
14
+
15
+ .disabled {
16
+ @apply border-white;
17
+ }
18
+
@@ -1,7 +1,7 @@
1
- .padded {
2
- @apply px-2 py-2.5;
3
- }
4
-
5
- .bordered {
6
- @apply border border-solid box-border rounded-md;
7
- }
1
+ .padded {
2
+ @apply px-2 py-2.5;
3
+ }
4
+
5
+ .bordered {
6
+ @apply border border-solid box-border rounded-md;
7
+ }
@@ -1,32 +1,32 @@
1
- 'use strict'
2
-
3
- import React from 'react'
4
- import SimpleMetric from './SimpleMetric'
5
- import HorizontalSeparator from './HorizontalSeparator'
6
- import VerticalSeparator from './VerticalSeparator'
7
- import styles from './DetailedMetric.module.css'
8
- import MetricValue from './MetricValue'
9
- export default function DetailedMetric (props) {
10
- const { leftDetail, rightDetail } = props
11
- return (
12
- <SimpleMetric {...props}>
13
- <HorizontalSeparator />
14
- <div className={styles.detailContainer}>
15
- <MetricValue
16
- pre={leftDetail.pre}
17
- unit={leftDetail.unit}
18
- color={leftDetail.color}
19
- value={leftDetail.value}
20
- />
21
- <VerticalSeparator />
22
- <MetricValue
23
- pre={rightDetail.pre}
24
- unit={rightDetail.unit}
25
- color={rightDetail.color}
26
- value={rightDetail.value}
27
- />
28
- </div>
29
- </SimpleMetric>
30
-
31
- )
32
- }
1
+ 'use strict'
2
+
3
+ import React from 'react'
4
+ import SimpleMetric from './SimpleMetric'
5
+ import HorizontalSeparator from './HorizontalSeparator'
6
+ import VerticalSeparator from './VerticalSeparator'
7
+ import styles from './DetailedMetric.module.css'
8
+ import MetricValue from './MetricValue'
9
+ export default function DetailedMetric (props) {
10
+ const { leftDetail, rightDetail } = props
11
+ return (
12
+ <SimpleMetric {...props}>
13
+ <HorizontalSeparator />
14
+ <div className={styles.detailContainer}>
15
+ <MetricValue
16
+ pre={leftDetail.pre}
17
+ unit={leftDetail.unit}
18
+ color={leftDetail.color}
19
+ value={leftDetail.value}
20
+ />
21
+ <VerticalSeparator />
22
+ <MetricValue
23
+ pre={rightDetail.pre}
24
+ unit={rightDetail.unit}
25
+ color={rightDetail.color}
26
+ value={rightDetail.value}
27
+ />
28
+ </div>
29
+ </SimpleMetric>
30
+
31
+ )
32
+ }
@@ -1,3 +1,3 @@
1
- .detailContainer {
2
- @apply flex items-center justify-around;
1
+ .detailContainer {
2
+ @apply flex items-center justify-around;
3
3
  }
@@ -1,35 +1,35 @@
1
- 'use strict'
2
-
3
- import React, { useState } from 'react'
4
- import styles from './DropDown.module.css'
5
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
6
- import { faChevronLeft, faChevronDown } from '@fortawesome/free-solid-svg-icons'
7
- export default function DropDown (props) {
8
- const { header, items, align = 'left' } = props
9
- const [open, setOpen] = useState(false)
10
- function handleOpen () {
11
- setOpen(!open)
12
- }
13
- return (
14
- <div className={`${styles.dropDown} ${styles[align]}`}>
15
- <span className={styles.header} onClick={handleOpen}>
16
- {header}
17
- {!open && <FontAwesomeIcon className={styles.arrow} icon={faChevronLeft} />}
18
- {open && <FontAwesomeIcon className={styles.arrow} icon={faChevronDown} />}
19
- </span>
20
- {open && (
21
- <div className={styles.menu}>
22
- {items.map((item, index) => {
23
- return (
24
- <div className={styles.item} key={index}>
25
- {item}
26
- </div>
27
- )
28
- })}
29
- </div>
30
- )}
31
-
32
- </div>
33
-
34
- )
35
- }
1
+ 'use strict'
2
+
3
+ import React, { useState } from 'react'
4
+ import styles from './DropDown.module.css'
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
6
+ import { faChevronLeft, faChevronDown } from '@fortawesome/free-solid-svg-icons'
7
+ export default function DropDown (props) {
8
+ const { header, items, align = 'left' } = props
9
+ const [open, setOpen] = useState(false)
10
+ function handleOpen () {
11
+ setOpen(!open)
12
+ }
13
+ return (
14
+ <div className={`${styles.dropDown} ${styles[align]}`}>
15
+ <span className={styles.header} onClick={handleOpen}>
16
+ {header}
17
+ {!open && <FontAwesomeIcon className={styles.arrow} icon={faChevronLeft} />}
18
+ {open && <FontAwesomeIcon className={styles.arrow} icon={faChevronDown} />}
19
+ </span>
20
+ {open && (
21
+ <div className={styles.menu}>
22
+ {items.map((item, index) => {
23
+ return (
24
+ <div className={styles.item} key={index}>
25
+ {item}
26
+ </div>
27
+ )
28
+ })}
29
+ </div>
30
+ )}
31
+
32
+ </div>
33
+
34
+ )
35
+ }
@@ -1,23 +1,23 @@
1
- .dropDown {
2
- @apply mx-4 relative flex flex-col;
3
- }
4
-
5
- .right {
6
- @apply items-end;
7
- }
8
-
9
- .left {
10
- @apply items-start;
11
- }
12
- .arrow {
13
- @apply ml-2;
14
- }
15
- .header {
16
- @apply hover:cursor-pointer
17
- }
18
- .menu {
19
- @apply absolute border-solid border border-main-green p-4 bg-dark-blue mt-8 rounded-md z-[999];
20
- }
21
- .item {
22
- @apply mb-2
1
+ .dropDown {
2
+ @apply mx-4 relative flex flex-col;
3
+ }
4
+
5
+ .right {
6
+ @apply items-end;
7
+ }
8
+
9
+ .left {
10
+ @apply items-start;
11
+ }
12
+ .arrow {
13
+ @apply absolute top-[50%] right-0 translate-y-[-50%];
14
+ }
15
+ .header {
16
+ @apply hover:cursor-pointer relative pr-6;
17
+ }
18
+ .menu {
19
+ @apply absolute border-solid border border-white p-3 bg-light-blue mt-8 rounded-md z-[999] text-sm;
20
+ }
21
+ .item {
22
+ @apply py-3 text-main-dark-blue border-t border-main-dark-blue first:border-t-0 text-sm uppercase hover:font-semibold hover:cursor-pointer;
23
23
  }
@@ -1,35 +1,35 @@
1
- import React from 'react'
2
- import styles from './FollowUs.module.css'
3
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
4
- import { faGithub, faTwitter, faLinkedin, faDiscord } from '@fortawesome/free-brands-svg-icons'
5
-
6
- export default function FollowUs ({ label = 'FOLLOW US ON' }) {
7
- return (
8
- <div className={styles.container}>
9
- <div className={styles.label}>
10
- {label}
11
- </div>
12
- <div className={styles.icon}>
13
- <a href='https://twitter.com/platformatic' target='_blank' rel='noopener noreferrer'>
14
- <FontAwesomeIcon icon={faTwitter} className='mr-2 text-white' />
15
- </a>
16
- </div>
17
- <div className={styles.icon}>
18
- <a href='https://www.linkedin.com/company/platformatic/' target='_blank' rel='noopener noreferrer'>
19
- <FontAwesomeIcon icon={faLinkedin} className='mr-2 text-white' />
20
- </a>
21
- </div>
22
- <div className={styles.icon}>
23
- <a href='https://github.com/platformatic' target='_blank' rel='noopener noreferrer'>
24
- <FontAwesomeIcon icon={faGithub} className='mr-2 text-white' />
25
- </a>
26
- </div>
27
- <div className={styles.icon}>
28
- <a href='https://discord.gg/platformatic' target='_blank' rel='noopener noreferrer'>
29
- <FontAwesomeIcon icon={faDiscord} className='mr-2 text-white' />
30
- </a>
31
- </div>
32
-
33
- </div>
34
- )
35
- }
1
+ import React from 'react'
2
+ import styles from './FollowUs.module.css'
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
4
+ import { faGithub, faTwitter, faLinkedin, faDiscord } from '@fortawesome/free-brands-svg-icons'
5
+
6
+ export default function FollowUs ({ label = 'FOLLOW US ON' }) {
7
+ return (
8
+ <div className={styles.container}>
9
+ <div className={styles.label}>
10
+ {label}
11
+ </div>
12
+ <div className={styles.icon}>
13
+ <a href='https://twitter.com/platformatic' target='_blank' rel='noopener noreferrer'>
14
+ <FontAwesomeIcon icon={faTwitter} className='mr-3 text-white' />
15
+ </a>
16
+ </div>
17
+ <div className={styles.icon}>
18
+ <a href='https://www.linkedin.com/company/platformatic/' target='_blank' rel='noopener noreferrer'>
19
+ <FontAwesomeIcon icon={faLinkedin} className='mr-3 text-white' />
20
+ </a>
21
+ </div>
22
+ <div className={styles.icon}>
23
+ <a href='https://github.com/platformatic' target='_blank' rel='noopener noreferrer'>
24
+ <FontAwesomeIcon icon={faGithub} className='mr-2 text-white' />
25
+ </a>
26
+ </div>
27
+ <div className={styles.icon}>
28
+ <a href='https://discord.gg/platformatic' target='_blank' rel='noopener noreferrer'>
29
+ <FontAwesomeIcon icon={faDiscord} className='mr-2 text-white' />
30
+ </a>
31
+ </div>
32
+
33
+ </div>
34
+ )
35
+ }
@@ -1,11 +1,11 @@
1
- .container {
2
- @apply flex w-96
3
- }
4
-
5
- .label {
6
- @apply uppercase text-light-green
7
- }
8
-
9
- .icon {
10
- @apply text-white ml-4
11
- }
1
+ .container {
2
+ @apply flex w-full items-center;
3
+ }
4
+
5
+ .label {
6
+ @apply uppercase text-light-green tracking-[.15em] text-sm mr-8;
7
+ }
8
+
9
+ .icon {
10
+ @apply text-white mx-4 text-xl;
11
+ }
@@ -1,14 +1,14 @@
1
- import React from 'react'
2
- import LoginButton from './LoginButton'
3
- import { faGithub } from '@fortawesome/free-brands-svg-icons'
4
-
5
- export default function GHLoginButton ({ onClick, ...props }) {
6
- return (
7
- <LoginButton
8
- label='Continue with Github'
9
- onClick={onClick}
10
- icon={faGithub}
11
- {...props}
12
- />
13
- )
14
- }
1
+ import React from 'react'
2
+ import LoginButton from './LoginButton'
3
+ import { faGithub } from '@fortawesome/free-brands-svg-icons'
4
+
5
+ export default function GHLoginButton ({ onClick, ...props }) {
6
+ return (
7
+ <LoginButton
8
+ label='Continue with Github'
9
+ onClick={onClick}
10
+ icon={faGithub}
11
+ {...props}
12
+ />
13
+ )
14
+ }
@@ -1,5 +1,10 @@
1
- 'use strict'
2
- import React from 'react'
3
- export default function HorizontalSeparator () {
4
- return <hr className='text-dark-green my-4' />
5
- }
1
+ 'use strict'
2
+ import React from 'react'
3
+ import styles from './HorizontalSeparator.module.css'
4
+ export default function HorizontalSeparator ({ marginTop = 4, marginBottom = 4 }) {
5
+ function getClassName () {
6
+ return 'text-dark-green ' + (marginTop === marginBottom ? `${styles['marginY-' + marginTop]}` : `${styles['marginT-' + marginTop]} ${styles['marginB-' + marginBottom]}`)
7
+ }
8
+
9
+ return <hr className={getClassName()} />
10
+ }
@@ -0,0 +1,23 @@
1
+ .marginY-4 {
2
+ @apply my-4;
3
+ }
4
+
5
+ .marginT-4 {
6
+ @apply mt-4;
7
+ }
8
+
9
+ .marginB-4 {
10
+ @apply mb-4;
11
+ }
12
+
13
+ .marginY-10 {
14
+ @apply my-10;
15
+ }
16
+
17
+ .marginT-10 {
18
+ @apply mt-10;
19
+ }
20
+
21
+ .marginB-10 {
22
+ @apply mb-10;
23
+ }
@@ -1,11 +1,11 @@
1
- 'use strict'
2
- import React from 'react'
3
- import styles from './Input.module.css'
4
- import commonStyles from './Common.module.css'
5
- export default function Input ({ placeholder, value, name }) {
6
- return (
7
- <div className={`${styles.inputContainer} ${commonStyles.padded}`}>
8
- <input type='text' name={name} value={value} placeholder={placeholder} className='grow' />
9
- </div>
10
- )
11
- }
1
+ 'use strict'
2
+ import React from 'react'
3
+ import styles from './Input.module.css'
4
+ import commonStyles from './Common.module.css'
5
+ export default function Input ({ placeholder, value, name }) {
6
+ return (
7
+ <div className={`${styles.inputContainer} ${commonStyles.padded}`}>
8
+ <input type='text' name={name} value={value} placeholder={placeholder} className='grow' />
9
+ </div>
10
+ )
11
+ }
@@ -1,7 +1,7 @@
1
- .inputContainer {
2
- @apply flex justify-between w-full h-10 text-white border-main-green border border-solid box-border rounded-md;
3
- }
4
-
5
- .input {
6
- @apply grow focus:outline-none
7
- }
1
+ .inputContainer {
2
+ @apply flex justify-between w-full h-10 text-white border-main-green border border-solid box-border rounded-md;
3
+ }
4
+
5
+ .input {
6
+ @apply grow focus:outline-none
7
+ }