@platformatic/ui-components 0.1.5 → 0.1.7

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 (143) hide show
  1. package/dist/assets/{index.e67c83bd.js → index.fcbe6de7.js} +14 -14
  2. package/dist/index.html +2 -2
  3. package/dist/platformatic-ui.css +1 -0
  4. package/index.js +2 -2
  5. package/package.json +1 -1
  6. package/src/components/Api/ApiIcon.jsx +28 -0
  7. package/src/components/Api/ApiIconClosed.jsx +18 -0
  8. package/src/components/Api/Footer.jsx +2 -2
  9. package/src/components/ApiDetail.jsx +1 -2
  10. package/src/components/{Api.jsx → ApiSummary.jsx} +7 -10
  11. package/src/components/LoginButton.jsx +8 -8
  12. package/src/components/LoginButton.module.css +6 -2
  13. package/src/stories/ApiDetail.stories.jsx +43 -0
  14. package/src/stories/ApiSummary.stories.jsx +43 -0
  15. package/src/stories/BorderedBox.stories.jsx +1 -1
  16. package/src/stories/BorderedText.stories.jsx +24 -0
  17. package/src/stories/Button.stories.jsx +13 -13
  18. package/src/stories/GHLoginButton.stories.jsx +1 -1
  19. package/src/stories/LoginButton.stories.jsx +2 -2
  20. package/tailwind.config.cjs +5 -1
  21. package/dist/assets/index.2da5d0ca.css +0 -1
  22. package/src/stories/Header.jsx +0 -57
  23. package/src/stories/Header.stories.jsx +0 -24
  24. package/src/stories/Page.jsx +0 -69
  25. package/src/stories/Page.stories.jsx +0 -25
  26. package/src/stories/header.css +0 -32
  27. package/src/stories/page.css +0 -69
  28. package/storybook-static/0.53758dff751ed2733218.manager.bundle.js +0 -2
  29. package/storybook-static/0.53758dff751ed2733218.manager.bundle.js.LICENSE.txt +0 -8
  30. package/storybook-static/1.9d13fd5be5dcb92d80a6.manager.bundle.js +0 -1
  31. package/storybook-static/5.410945cbec993452eed2.manager.bundle.js +0 -2
  32. package/storybook-static/5.410945cbec993452eed2.manager.bundle.js.LICENSE.txt +0 -31
  33. package/storybook-static/6.9ef90ca53c7deb768ec6.manager.bundle.js +0 -1
  34. package/storybook-static/7.47a294f1c5761295c4cb.manager.bundle.js +0 -1
  35. package/storybook-static/8.35b89a87599812bb0515.manager.bundle.js +0 -2
  36. package/storybook-static/8.35b89a87599812bb0515.manager.bundle.js.LICENSE.txt +0 -12
  37. package/storybook-static/9.d19ea1957ceb9893827c.manager.bundle.js +0 -1
  38. package/storybook-static/api-icon-closed.svg +0 -6
  39. package/storybook-static/api-icon.svg +0 -9
  40. package/storybook-static/assets/BorderedBox.stories.8d7654fe.css +0 -1
  41. package/storybook-static/assets/BorderedBox.stories.f9bbae3a.js +0 -26
  42. package/storybook-static/assets/BorderedBox.stories.f9bbae3a.js.map +0 -1
  43. package/storybook-static/assets/Button.7e305135.js +0 -2
  44. package/storybook-static/assets/Button.7e305135.js.map +0 -1
  45. package/storybook-static/assets/Button.bc1a867b.css +0 -1
  46. package/storybook-static/assets/Button.stories.8d745781.js +0 -42
  47. package/storybook-static/assets/Button.stories.8d745781.js.map +0 -1
  48. package/storybook-static/assets/Color-f953d088.a38b7cbd.js +0 -3
  49. package/storybook-static/assets/Color-f953d088.a38b7cbd.js.map +0 -1
  50. package/storybook-static/assets/GlobalScrollAreaStyles-8793ce4a.cf1537f5.js +0 -2
  51. package/storybook-static/assets/GlobalScrollAreaStyles-8793ce4a.cf1537f5.js.map +0 -1
  52. package/storybook-static/assets/Header.4fc7684b.css +0 -1
  53. package/storybook-static/assets/Header.cf6306b0.js +0 -2
  54. package/storybook-static/assets/Header.cf6306b0.js.map +0 -1
  55. package/storybook-static/assets/Header.stories.17ffb615.js +0 -26
  56. package/storybook-static/assets/Header.stories.17ffb615.js.map +0 -1
  57. package/storybook-static/assets/Introduction.stories.bc0afbca.js +0 -105
  58. package/storybook-static/assets/Introduction.stories.bc0afbca.js.map +0 -1
  59. package/storybook-static/assets/LoginButton.stories.10ae424d.js +0 -776
  60. package/storybook-static/assets/LoginButton.stories.10ae424d.js.map +0 -1
  61. package/storybook-static/assets/LoginButton.stories.edf744f1.css +0 -1
  62. package/storybook-static/assets/OverlayScrollbars-1355f44c.fce02603.js +0 -18
  63. package/storybook-static/assets/OverlayScrollbars-1355f44c.fce02603.js.map +0 -1
  64. package/storybook-static/assets/Page.stories.0913ba40.css +0 -1
  65. package/storybook-static/assets/Page.stories.76f6205c.js +0 -84
  66. package/storybook-static/assets/Page.stories.76f6205c.js.map +0 -1
  67. package/storybook-static/assets/Props.8d39388f.js +0 -187
  68. package/storybook-static/assets/Props.8d39388f.js.map +0 -1
  69. package/storybook-static/assets/WithTooltip-167e9982.ebb6fc8d.js +0 -11
  70. package/storybook-static/assets/WithTooltip-167e9982.ebb6fc8d.js.map +0 -1
  71. package/storybook-static/assets/client.177c4b3e.js +0 -2
  72. package/storybook-static/assets/client.177c4b3e.js.map +0 -1
  73. package/storybook-static/assets/code-brackets.9ef6443e.svg +0 -1
  74. package/storybook-static/assets/colors.ac9401f3.svg +0 -1
  75. package/storybook-static/assets/comments.f15a6837.svg +0 -1
  76. package/storybook-static/assets/config.3c15c657.js +0 -74
  77. package/storybook-static/assets/config.3c15c657.js.map +0 -1
  78. package/storybook-static/assets/config.be729574.js +0 -2
  79. package/storybook-static/assets/config.be729574.js.map +0 -1
  80. package/storybook-static/assets/direction.94a9917f.svg +0 -1
  81. package/storybook-static/assets/es.map.constructor.bc2f31bd.js +0 -2
  82. package/storybook-static/assets/es.map.constructor.bc2f31bd.js.map +0 -1
  83. package/storybook-static/assets/es.number.to-fixed.db152345.js +0 -2
  84. package/storybook-static/assets/es.number.to-fixed.db152345.js.map +0 -1
  85. package/storybook-static/assets/es.regexp.flags.ebae2243.js +0 -2
  86. package/storybook-static/assets/es.regexp.flags.ebae2243.js.map +0 -1
  87. package/storybook-static/assets/es.string.from-code-point.e6202842.js +0 -2
  88. package/storybook-static/assets/es.string.from-code-point.e6202842.js.map +0 -1
  89. package/storybook-static/assets/flow.275142c6.svg +0 -1
  90. package/storybook-static/assets/formatter-0d5cb0eb.aebafedb.js +0 -297
  91. package/storybook-static/assets/formatter-0d5cb0eb.aebafedb.js.map +0 -1
  92. package/storybook-static/assets/iframe.aab06436.js +0 -153
  93. package/storybook-static/assets/iframe.aab06436.js.map +0 -1
  94. package/storybook-static/assets/index.7df59845.js +0 -2
  95. package/storybook-static/assets/index.7df59845.js.map +0 -1
  96. package/storybook-static/assets/index.814c1dee.js +0 -9
  97. package/storybook-static/assets/index.814c1dee.js.map +0 -1
  98. package/storybook-static/assets/index.c7ae27b6.js +0 -25
  99. package/storybook-static/assets/index.c7ae27b6.js.map +0 -1
  100. package/storybook-static/assets/index.f76a1af3.js +0 -2
  101. package/storybook-static/assets/index.f76a1af3.js.map +0 -1
  102. package/storybook-static/assets/instrumenter.3eab649e.js +0 -4
  103. package/storybook-static/assets/instrumenter.3eab649e.js.map +0 -1
  104. package/storybook-static/assets/jsx-runtime.e2ea81d7.js +0 -18
  105. package/storybook-static/assets/jsx-runtime.e2ea81d7.js.map +0 -1
  106. package/storybook-static/assets/make-decorator.7fb2aeb9.js +0 -3
  107. package/storybook-static/assets/make-decorator.7fb2aeb9.js.map +0 -1
  108. package/storybook-static/assets/plugin.57148314.svg +0 -1
  109. package/storybook-static/assets/preview.0975d66e.js +0 -3
  110. package/storybook-static/assets/preview.0975d66e.js.map +0 -1
  111. package/storybook-static/assets/preview.38b4e44b.js +0 -14
  112. package/storybook-static/assets/preview.38b4e44b.js.map +0 -1
  113. package/storybook-static/assets/preview.4099ceae.js +0 -2
  114. package/storybook-static/assets/preview.4099ceae.js.map +0 -1
  115. package/storybook-static/assets/preview.43118df9.js +0 -26
  116. package/storybook-static/assets/preview.43118df9.js.map +0 -1
  117. package/storybook-static/assets/preview.4dfec941.js +0 -2
  118. package/storybook-static/assets/preview.4dfec941.js.map +0 -1
  119. package/storybook-static/assets/preview.b37e665b.js +0 -397
  120. package/storybook-static/assets/preview.b37e665b.js.map +0 -1
  121. package/storybook-static/assets/preview.b8ebcf81.css +0 -1
  122. package/storybook-static/assets/preview.cc910bd3.js +0 -2
  123. package/storybook-static/assets/preview.cc910bd3.js.map +0 -1
  124. package/storybook-static/assets/preview.f14efd1d.js +0 -3
  125. package/storybook-static/assets/preview.f14efd1d.js.map +0 -1
  126. package/storybook-static/assets/renderDocs.4312919d.js +0 -2
  127. package/storybook-static/assets/renderDocs.4312919d.js.map +0 -1
  128. package/storybook-static/assets/repo.fb4ece47.svg +0 -1
  129. package/storybook-static/assets/stackalt.2ad81543.svg +0 -1
  130. package/storybook-static/assets/string.6cc73134.js +0 -2
  131. package/storybook-static/assets/string.6cc73134.js.map +0 -1
  132. package/storybook-static/assets/syntaxhighlighter-b07b042a.04697fcf.js +0 -16
  133. package/storybook-static/assets/syntaxhighlighter-b07b042a.04697fcf.js.map +0 -1
  134. package/storybook-static/favicon.ico +0 -0
  135. package/storybook-static/iframe.html +0 -486
  136. package/storybook-static/index.html +0 -59
  137. package/storybook-static/main.1e2c996516b3b52674de.manager.bundle.js +0 -1
  138. package/storybook-static/project.json +0 -1
  139. package/storybook-static/runtime~main.904779a78e0adff8f659.manager.bundle.js +0 -1
  140. package/storybook-static/stories.json +0 -1
  141. package/storybook-static/vendors~main.ab297a8d7023057bddf0.manager.bundle.js +0 -2
  142. package/storybook-static/vendors~main.ab297a8d7023057bddf0.manager.bundle.js.LICENSE.txt +0 -107
  143. package/storybook-static/vite.svg +0 -1
package/dist/index.html CHANGED
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Platformatic UI Components</title>
7
- <script type="module" crossorigin src="/assets/index.e67c83bd.js"></script>
8
- <link rel="stylesheet" href="/assets/index.2da5d0ca.css">
7
+ <script type="module" crossorigin src="/assets/index.fcbe6de7.js"></script>
8
+ <link rel="stylesheet" href="/platformatic-ui.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -0,0 +1 @@
1
+ ._input_1v03r_1{box-sizing:border-box;display:flex;height:2.5rem;width:100%;justify-content:space-between;border-radius:.375rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(33 250 144 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._input_1v03r_1>input:focus{outline:2px solid transparent;outline-offset:2px}._padded_1atg3_1{padding:.625rem .5rem}._bordered_1ece3_1{border-radius:.375rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));padding:.25rem .5rem;letter-spacing:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._main_sk3z1_1{display:flex;align-items:center;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._data_sk3z1_5{display:flex;width:100%;flex-direction:column}._stats-header_19k8x_1{display:flex;align-items:center;justify-content:space-between;font-weight:700}._stats-main-stat_19k8x_4{display:flex;align-items:center;justify-content:center;gap:1rem}._tabbed-container_129x6_1{--tw-bg-opacity: 1;background-color:rgb(0 40 61 / var(--tw-bg-opacity))}._tabs-header_129x6_5{margin-bottom:1rem;display:flex;height:4rem;justify-content:space-between;text-transform:uppercase;letter-spacing:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._tabs-header_129x6_5:hover{cursor:pointer}._selected-tab_129x6_8{font-weight:700;--tw-text-opacity: 1;color:rgb(33 250 144 / var(--tw-text-opacity));text-decoration-line:underline;text-underline-offset:8px}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Montserrat}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%;margin-right:auto;margin-left:auto}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.m-3{margin:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mr-5{margin-right:1.25rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-1{margin-right:.25rem}.flex{display:flex}.grid{display:grid}.contents{display:contents}.w-full{width:100%}.w-9{width:2.25rem}.grow{flex-grow:1}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-4{gap:1rem}.gap-2{gap:.5rem}.gap-10{gap:2.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-error-red{--tw-border-opacity: 1;border-color:rgb(250 33 33 / var(--tw-border-opacity))}.border-main-green{--tw-border-opacity: 1;border-color:rgb(33 250 144 / var(--tw-border-opacity))}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-5xl{font-size:3rem;line-height:1}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-light{font-weight:300}.text-main-green{--tw-text-opacity: 1;color:rgb(33 250 144 / var(--tw-text-opacity))}.text-dark-green{--tw-text-opacity: 1;color:rgb(2 120 63 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-error-red{--tw-text-opacity: 1;color:rgb(250 33 33 / var(--tw-text-opacity))}@font-face{font-family:Montserrat;src:local("Montserrat"),url(./fonts/Montserrat/static/Montserrat-Light.ttf) format("truetype");font-weight:300}@font-face{font-family:Montserrat;src:local("Montserrat"),url(./fonts/Montserrat/static/Montserrat-Regular.ttf) format("truetype");font-weight:500}@font-face{font-family:Montserrat;src:local("Montserrat"),url(./fonts/Montserrat/static/Montserrat-Bold.ttf) format("truetype");font-weight:700}:root{--tw-bg-opacity: 1;background-color:rgb(0 40 61 / var(--tw-bg-opacity));font-family:Montserrat}a{--tw-text-opacity: 1;color:rgb(37 136 228 / var(--tw-text-opacity))}.bordered{box-sizing:border-box;border-radius:.375rem;border-width:1px;border-style:solid}.padded{padding:.625rem .5rem}.api-footer{margin-left:2.25rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .5rem .5rem 1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.api-status{justify-self:end}.bordered-box{margin-bottom:1rem;flex:1 1 0%;row-gap:1rem;--tw-bg-opacity: 1;background-color:rgb(0 52 79 / var(--tw-bg-opacity));padding:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity));box-sizing:border-box;border-radius:.375rem;border-width:1px;border-style:solid}input{background-color:transparent}.hover\:cursor-pointer:hover{cursor:pointer}
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- import Api from './src/components/Api'
3
+ import ApiSummary from './src/components/ApiSummary'
4
4
  import ApiDetails from './src/components/ApiDetail'
5
5
  import BorderedBox from './src/components/BorderedBox'
6
6
  import BorderedText from './src/components/BorderedText'
@@ -16,7 +16,7 @@ import VerticalSeparator from './src/components/VerticalSeparator'
16
16
  import LoginButton from './src/components/LoginButton'
17
17
  import GHLoginButton from './src/components/GHLoginButton'
18
18
  export {
19
- Api,
19
+ ApiSummary,
20
20
  ApiDetails,
21
21
  BorderedBox,
22
22
  BorderedText,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@platformatic/ui-components",
3
3
  "description": "Platformatic UI Components",
4
- "version": "0.1.5",
4
+ "version": "0.1.7",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
7
  "scripts": {
@@ -0,0 +1,28 @@
1
+ export default function ApiIcon () {
2
+ return (
3
+ <svg
4
+ width={38}
5
+ height={56}
6
+ fill='none'
7
+ xmlns='http://www.w3.org/2000/svg'
8
+ >
9
+ <path
10
+ d='M8.12 22.358A7.12 7.12 0 0 1 8.118 8.12a7.12 7.12 0 0 1 13.631-2.88c.2-.02.404-.029.61-.029a7.121 7.121 0 0 1 6.864 5.236 6.079 6.079 0 1 1 1.7 11.912'
11
+ stroke='#fff'
12
+ strokeWidth={2}
13
+ strokeLinecap='round'
14
+ strokeLinejoin='round'
15
+ />
16
+ <path
17
+ d='M13 11.5V31h-1.5M25 13v18h3M19 15.4v35.8h11.4'
18
+ stroke='#fff'
19
+ strokeWidth={2}
20
+ strokeLinecap='round'
21
+ strokeLinejoin='round'
22
+ />
23
+ <circle cx={7} cy={31} r={3} stroke='#fff' strokeWidth={2} />
24
+ <circle cx={31} cy={31} r={3} stroke='#fff' strokeWidth={2} />
25
+ <circle cx={34} cy={51.2} r={3} stroke='#fff' strokeWidth={2} />
26
+ </svg>
27
+ )
28
+ }
@@ -0,0 +1,18 @@
1
+ export default function ApiIconClosed () {
2
+ return (
3
+ <svg
4
+ width={38}
5
+ height={42}
6
+ fill='none'
7
+ xmlns='http://www.w3.org/2000/svg'
8
+ >
9
+ <path
10
+ d='M8.12 22.358A7.12 7.12 0 0 1 8.118 8.12a7.12 7.12 0 0 1 13.631-2.88c.2-.02.404-.029.61-.029a7.121 7.121 0 0 1 6.864 5.236 6.079 6.079 0 1 1 1.7 11.912M13 11.5v7M13 31v-3m0-3v-3.5M25 13v6m0 15.5V31m0-3v-6M19 15.4v7.1m0 18v-4m0-11v8'
11
+ stroke='#fff'
12
+ strokeWidth={2}
13
+ strokeLinecap='round'
14
+ strokeLinejoin='round'
15
+ />
16
+ </svg>
17
+ )
18
+ }
@@ -6,7 +6,7 @@ import BorderedText from '../BorderedText'
6
6
  import styles from './Footer.module.css'
7
7
  import React from 'react'
8
8
  export default function ApiFooter (props) {
9
- const { graphql, openapi } = props
9
+ const { graphql, openapi, db } = props
10
10
  return (
11
11
  <div className={styles.footer}>
12
12
  <div className='flex gap-2'>
@@ -18,7 +18,7 @@ export default function ApiFooter (props) {
18
18
  <Separator />
19
19
  <span><FontAwesomeIcon icon={faFileLines} /> API Docs</span>
20
20
  <Separator />
21
- <span><FontAwesomeIcon icon={faDatabase} /> SQLite</span>
21
+ <span><FontAwesomeIcon icon={faDatabase} /> {db}</span>
22
22
  </div>
23
23
  </div>
24
24
  )
@@ -9,8 +9,7 @@ import StatsView from './StatsView'
9
9
  import VerticalSeparator from './VerticalSeparator'
10
10
  import React from 'react'
11
11
  export default function ApiDetails (props) {
12
- const apiData = props.data
13
- const { url, repository, version, openapi, graphql, source, lastDeploy } = apiData
12
+ const { url, repository, version, openapi, graphql, source, lastDeploy } = props
14
13
  const requestStats = {
15
14
  mainStat: {
16
15
  value: 12,
@@ -4,6 +4,8 @@ import ApiFooter from './Api/Footer'
4
4
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
5
5
  import { faLink } from '@fortawesome/free-solid-svg-icons'
6
6
  import ApiVersion from './Api/Version'
7
+ import ApiIcon from './Api/ApiIcon'
8
+ import ApiIconClosed from './Api/ApiIconClosed'
7
9
  import Separator from './VerticalSeparator'
8
10
  import ApiStatus from './Api/Status'
9
11
  import BorderedBox from './BorderedBox'
@@ -17,16 +19,10 @@ function ApiName (props) {
17
19
  <span className='text-main-green font-semibold text-2xl'>{name}</span>
18
20
  )
19
21
  }
20
- export default function API (props) {
22
+ export default function ApiSummary (props) {
21
23
  const [isOpen, setIsOpen] = useState(true)
22
- const { name, version, source, lastDeploy, graphql, openapi, online } = props.data
24
+ const { name, version, source, lastDeploy, graphql, openapi, online, db } = props
23
25
  const color = online ? 'green' : 'red'
24
- function getApiIcon () {
25
- if (isOpen) {
26
- return 'api-icon.svg'
27
- }
28
- return 'api-icon-closed.svg'
29
- }
30
26
  return (
31
27
  <BorderedBox
32
28
  color={color}
@@ -35,7 +31,7 @@ export default function API (props) {
35
31
  <>
36
32
  <div className={styles.main}>
37
33
  <div className='flex w-full'>
38
- <img className='w-9 mr-5' src={getApiIcon()} />
34
+ <div className='w-9 mr-5'><ApiIcon /></div>
39
35
  <div className={styles.data}>
40
36
  <div className='flex items-center justify-between'>
41
37
  <div className='flex items-center justify-between gap-4'>
@@ -67,12 +63,13 @@ export default function API (props) {
67
63
  <ApiFooter
68
64
  graphql={graphql}
69
65
  openapi={openapi}
66
+ db={db}
70
67
  />
71
68
  </>
72
69
  )}
73
70
  {!isOpen && (
74
71
  <div className='flex items-center'>
75
- <img className='w-9 mr-5' src={getApiIcon()} />
72
+ <img className='w-9 mr-5' src={<ApiIconClosed />} />
76
73
  <ApiName name={name} />
77
74
  <span onClick={() => { setIsOpen(!isOpen) }} className='ml-4 hover:cursor-pointer'>Click here to set up your api</span>
78
75
  </div>
@@ -5,13 +5,13 @@ import styles from './LoginButton.module.css'
5
5
 
6
6
  export default function LoginButton ({ icon, label, onClick, ...props }) {
7
7
  return (
8
- <button
9
- type='button'
10
- onClick={onClick}
11
- className={styles.button}
12
- {...props}
13
- >
14
- {icon ? <FontAwesomeIcon icon={icon} /> : null} &nbsp;{label}
15
- </button>
8
+ <div className={styles.container} onClick={onClick}>
9
+ <div
10
+ className={styles.button}
11
+ {...props}
12
+ >
13
+ {icon ? <FontAwesomeIcon icon={icon} className='mr-2' /> : null} {label}
14
+ </div>
15
+ </div>
16
16
  )
17
17
  }
@@ -1,3 +1,7 @@
1
1
  .button {
2
- @apply bg-light-green text-main-dark-blue font-bold py-2 px-4 rounded;
3
- }
2
+ @apply bg-light-green text-main-dark-blue font-bold py-2 px-4 rounded w-full text-center cursor-pointer
3
+ }
4
+
5
+ .container {
6
+ @apply w-64
7
+ }
@@ -0,0 +1,43 @@
1
+ 'use strict'
2
+ import ApiDetail from '../components/ApiDetail'
3
+ export default {
4
+ title: 'Platformatic/ApiDetail',
5
+ component: ApiDetail,
6
+ argTypes: {
7
+ text: { control: 'string' }
8
+ }
9
+ }
10
+
11
+ const Template = (args) => <ApiDetail {...args} />
12
+
13
+ export const Online = Template.bind({})
14
+
15
+ Online.args = {
16
+ id: 1,
17
+ name: 'api-online',
18
+ version: '1.2.3',
19
+ source: 'Platformatic DB',
20
+ lastDeploy: '2022-10-10',
21
+ graphql: true,
22
+ openapi: true,
23
+ online: true,
24
+ url: 'https://example.com',
25
+ repository: 'platformatic/example',
26
+ db: 'SQLite'
27
+ }
28
+
29
+ export const Offline = Template.bind({})
30
+
31
+ Offline.args = {
32
+ id: 1,
33
+ name: 'api-offline',
34
+ version: '1.2.3',
35
+ source: 'Platformatic DB',
36
+ lastDeploy: '2022-10-10',
37
+ graphql: true,
38
+ openapi: true,
39
+ online: false,
40
+ url: 'https://example.com',
41
+ repository: 'platformatic/example',
42
+ db: 'PostgreSQL'
43
+ }
@@ -0,0 +1,43 @@
1
+ 'use strict'
2
+ import ApiSummary from '../components/ApiSummary'
3
+ export default {
4
+ title: 'Platformatic/ApiSummary',
5
+ component: ApiSummary,
6
+ argTypes: {
7
+ text: { control: 'string' }
8
+ }
9
+ }
10
+
11
+ const Template = (args) => <ApiSummary {...args} />
12
+
13
+ export const Online = Template.bind({})
14
+
15
+ Online.args = {
16
+ id: 1,
17
+ name: 'api-online',
18
+ version: '1.2.3',
19
+ source: 'Platformatic DB',
20
+ lastDeploy: '2022-10-10',
21
+ graphql: true,
22
+ openapi: true,
23
+ online: true,
24
+ url: 'https://example.com',
25
+ repository: 'platformatic/example',
26
+ db: 'SQLite'
27
+ }
28
+
29
+ export const Offline = Template.bind({})
30
+
31
+ Offline.args = {
32
+ id: 1,
33
+ name: 'api-offline',
34
+ version: '1.2.3',
35
+ source: 'Platformatic DB',
36
+ lastDeploy: '2022-10-10',
37
+ graphql: true,
38
+ openapi: true,
39
+ online: false,
40
+ url: 'https://example.com',
41
+ repository: 'platformatic/example',
42
+ db: 'PostgreSQL'
43
+ }
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
  import BorderedBox from '../components/BorderedBox'
3
3
  export default {
4
- title: 'Example/BorderedBox',
4
+ title: 'Platformatic/BorderedBox',
5
5
  component: BorderedBox,
6
6
  // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
7
7
  argTypes: {
@@ -0,0 +1,24 @@
1
+ 'use strict'
2
+ import BorderedText from '../components/BorderedText'
3
+ export default {
4
+ title: 'Platformatic/BorderedText',
5
+ component: BorderedText,
6
+ // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
7
+ argTypes: {
8
+ text: { control: 'string' }
9
+ }
10
+ }
11
+
12
+ // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
13
+ const Template = (args) => <BorderedText {...args} />
14
+
15
+ export const Sample = Template.bind({})
16
+ // More on args: https://storybook.js.org/docs/react/writing-stories/args
17
+ Sample.args = {
18
+ text: 'Hello Platformatic!'
19
+ }
20
+ export const Version = Template.bind({})
21
+
22
+ Version.args = {
23
+ text: 'v1.2.3'
24
+ }
@@ -1,6 +1,6 @@
1
- import React from 'react';
1
+ import React from 'react'
2
2
 
3
- import { Button } from './Button';
3
+ import { Button } from './Button'
4
4
 
5
5
  // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
6
6
  export default {
@@ -8,33 +8,33 @@ export default {
8
8
  component: Button,
9
9
  // More on argTypes: https://storybook.js.org/docs/react/api/argtypes
10
10
  argTypes: {
11
- backgroundColor: { control: 'color' },
11
+ backgroundColor: { control: 'color' }
12
12
  },
13
- };
13
+ }
14
14
 
15
15
  // More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
16
- const Template = (args) => <Button {...args} />;
16
+ const Template = (args) => <Button {...args} />
17
17
 
18
- export const Primary = Template.bind({});
18
+ export const Primary = Template.bind({})
19
19
  // More on args: https://storybook.js.org/docs/react/writing-stories/args
20
20
  Primary.args = {
21
21
  primary: true,
22
- label: 'Button',
22
+ label: 'Button'
23
23
  };
24
24
 
25
- export const Secondary = Template.bind({});
25
+ export const Secondary = Template.bind({})
26
26
  Secondary.args = {
27
- label: 'Button',
27
+ label: 'Button'
28
28
  };
29
29
 
30
- export const Large = Template.bind({});
30
+ export const Large = Template.bind({})
31
31
  Large.args = {
32
32
  size: 'large',
33
- label: 'Button',
33
+ label: 'Button'
34
34
  };
35
35
 
36
- export const Small = Template.bind({});
36
+ export const Small = Template.bind({})
37
37
  Small.args = {
38
38
  size: 'small',
39
- label: 'Button',
39
+ label: 'Button'
40
40
  };
@@ -2,7 +2,7 @@ import React from 'react'
2
2
  import GHLoginButton from '../components/GHLoginButton'
3
3
 
4
4
  export default {
5
- title: 'Example/GHLoginButton',
5
+ title: 'Platformatic/GHLoginButton',
6
6
  component: GHLoginButton
7
7
  }
8
8
 
@@ -1,8 +1,8 @@
1
1
  import React from 'react'
2
- import LoginButton from '../components/LoginButton'
2
+ import LoginButton from '../components/LoginButton'
3
3
 
4
4
  export default {
5
- title: 'Example/LoginButton',
5
+ title: 'Platformatic/LoginButton',
6
6
  component: LoginButton
7
7
  }
8
8
 
@@ -22,7 +22,11 @@ module.exports = {
22
22
  },
23
23
  safelist: [
24
24
  'border-error-red',
25
- 'border-main-green'
25
+ 'border-main-green',
26
+ 'text-3xl',
27
+ 'text-4xl',
28
+ 'text-5xl',
29
+ 'text-6xl'
26
30
  ],
27
31
  plugins: []
28
32
  }
@@ -1 +0,0 @@
1
- ._input_1v03r_1{box-sizing:border-box;display:flex;height:2.5rem;width:100%;justify-content:space-between;border-radius:.375rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(33 250 144 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._input_1v03r_1>input:focus{outline:2px solid transparent;outline-offset:2px}._padded_650jz_1{padding:.625rem .5rem}._bordered_650jz_5{box-sizing:border-box;border-radius:.375rem;border-width:1px;border-style:solid}._bordered_1ece3_1{border-radius:.375rem;border-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));padding:.25rem .5rem;letter-spacing:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._footer_kawbk_1{margin-left:2.25rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .5rem .5rem 1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._borderedBox_1fd0d_1{margin-bottom:1rem;flex:1 1 0%;row-gap:1rem;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(0 52 79 / var(--tw-bg-opacity));padding:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._main_1uwu5_1{display:flex;align-items:center;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._data_1uwu5_5{display:flex;width:100%;flex-direction:column}._status_1uwu5_9{justify-self:end}._stats-header_w45a1_1{display:flex;align-items:center;justify-content:space-between;font-weight:700}._stats-main-stat_w45a1_4{display:flex;align-items:center;justify-content:center;gap:1rem}._tabbed-container_129x6_1{--tw-bg-opacity: 1;background-color:rgb(0 40 61 / var(--tw-bg-opacity))}._tabs-header_129x6_5{margin-bottom:1rem;display:flex;height:4rem;justify-content:space-between;text-transform:uppercase;letter-spacing:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._tabs-header_129x6_5:hover{cursor:pointer}._selected-tab_129x6_8{font-weight:700;--tw-text-opacity: 1;color:rgb(33 250 144 / var(--tw-text-opacity));text-decoration-line:underline;text-underline-offset:8px}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Montserrat}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%;margin-right:auto;margin-left:auto}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.m-3{margin:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-5{margin-top:1.25rem;margin-bottom:1.25rem}.mr-5{margin-right:1.25rem}.ml-4{margin-left:1rem}.mr-2{margin-right:.5rem}.mr-1{margin-right:.25rem}.flex{display:flex}.grid{display:grid}.contents{display:contents}.w-full{width:100%}.w-9{width:2.25rem}.grow{flex-grow:1}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-4{gap:1rem}.gap-2{gap:.5rem}.gap-10{gap:2.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-error-red{--tw-border-opacity: 1;border-color:rgb(250 33 33 / var(--tw-border-opacity))}.border-main-green{--tw-border-opacity: 1;border-color:rgb(33 250 144 / var(--tw-border-opacity))}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-5xl{font-size:3rem;line-height:1}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-light{font-weight:300}.text-main-green{--tw-text-opacity: 1;color:rgb(33 250 144 / var(--tw-text-opacity))}.text-dark-green{--tw-text-opacity: 1;color:rgb(2 120 63 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-error-red{--tw-text-opacity: 1;color:rgb(250 33 33 / var(--tw-text-opacity))}@font-face{font-family:Montserrat;src:local("Montserrat"),url(./fonts/Montserrat/Montserrat-VariableFont_wght.ttf) format("truetype");font-weight:100 900}:root{--tw-bg-opacity: 1;background-color:rgb(0 40 61 / var(--tw-bg-opacity));font-family:Montserrat}a{--tw-text-opacity: 1;color:rgb(37 136 228 / var(--tw-text-opacity))}input{background-color:transparent}.hover\:cursor-pointer:hover{cursor:pointer}
@@ -1,57 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- import { Button } from './Button';
5
- import './header.css';
6
-
7
- export const Header = ({ user, onLogin, onLogout, onCreateAccount }) => (
8
- <header>
9
- <div className="wrapper">
10
- <div>
11
- <svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
12
- <g fill="none" fillRule="evenodd">
13
- <path
14
- d="M10 0h12a10 10 0 0110 10v12a10 10 0 01-10 10H10A10 10 0 010 22V10A10 10 0 0110 0z"
15
- fill="#FFF"
16
- />
17
- <path
18
- d="M5.3 10.6l10.4 6v11.1l-10.4-6v-11zm11.4-6.2l9.7 5.5-9.7 5.6V4.4z"
19
- fill="#555AB9"
20
- />
21
- <path
22
- d="M27.2 10.6v11.2l-10.5 6V16.5l10.5-6zM15.7 4.4v11L6 10l9.7-5.5z"
23
- fill="#91BAF8"
24
- />
25
- </g>
26
- </svg>
27
- <h1>Acme</h1>
28
- </div>
29
- <div>
30
- {user ? (
31
- <>
32
- <span className="welcome">
33
- Welcome, <b>{user.name}</b>!
34
- </span>
35
- <Button size="small" onClick={onLogout} label="Log out" />
36
- </>
37
- ) : (
38
- <>
39
- <Button size="small" onClick={onLogin} label="Log in" />
40
- <Button primary size="small" onClick={onCreateAccount} label="Sign up" />
41
- </>
42
- )}
43
- </div>
44
- </div>
45
- </header>
46
- );
47
-
48
- Header.propTypes = {
49
- user: PropTypes.shape({}),
50
- onLogin: PropTypes.func.isRequired,
51
- onLogout: PropTypes.func.isRequired,
52
- onCreateAccount: PropTypes.func.isRequired,
53
- };
54
-
55
- Header.defaultProps = {
56
- user: null,
57
- };
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Header } from './Header';
4
-
5
- export default {
6
- title: 'Example/Header',
7
- component: Header,
8
- parameters: {
9
- // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
10
- layout: 'fullscreen',
11
- },
12
- };
13
-
14
- const Template = (args) => <Header {...args} />;
15
-
16
- export const LoggedIn = Template.bind({});
17
- LoggedIn.args = {
18
- user: {
19
- name: 'Jane Doe',
20
- },
21
- };
22
-
23
- export const LoggedOut = Template.bind({});
24
- LoggedOut.args = {};
@@ -1,69 +0,0 @@
1
- import React from 'react';
2
-
3
- import { Header } from './Header';
4
- import './page.css';
5
-
6
- export const Page = () => {
7
- const [user, setUser] = React.useState();
8
-
9
- return (
10
- <article>
11
- <Header
12
- user={user}
13
- onLogin={() => setUser({ name: 'Jane Doe' })}
14
- onLogout={() => setUser(undefined)}
15
- onCreateAccount={() => setUser({ name: 'Jane Doe' })}
16
- />
17
-
18
- <section>
19
- <h2>Pages in Storybook</h2>
20
- <p>
21
- We recommend building UIs with a{' '}
22
- <a href="https://componentdriven.org" target="_blank" rel="noopener noreferrer">
23
- <strong>component-driven</strong>
24
- </a>{' '}
25
- process starting with atomic components and ending with pages.
26
- </p>
27
- <p>
28
- Render pages with mock data. This makes it easy to build and review page states without
29
- needing to navigate to them in your app. Here are some handy patterns for managing page
30
- data in Storybook:
31
- </p>
32
- <ul>
33
- <li>
34
- Use a higher-level connected component. Storybook helps you compose such data from the
35
- "args" of child component stories
36
- </li>
37
- <li>
38
- Assemble data in the page component from your services. You can mock these services out
39
- using Storybook.
40
- </li>
41
- </ul>
42
- <p>
43
- Get a guided tutorial on component-driven development at{' '}
44
- <a href="https://storybook.js.org/tutorials/" target="_blank" rel="noopener noreferrer">
45
- Storybook tutorials
46
- </a>
47
- . Read more in the{' '}
48
- <a href="https://storybook.js.org/docs" target="_blank" rel="noopener noreferrer">
49
- docs
50
- </a>
51
- .
52
- </p>
53
- <div className="tip-wrapper">
54
- <span className="tip">Tip</span> Adjust the width of the canvas with the{' '}
55
- <svg width="10" height="10" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg">
56
- <g fill="none" fillRule="evenodd">
57
- <path
58
- d="M1.5 5.2h4.8c.3 0 .5.2.5.4v5.1c-.1.2-.3.3-.4.3H1.4a.5.5 0 01-.5-.4V5.7c0-.3.2-.5.5-.5zm0-2.1h6.9c.3 0 .5.2.5.4v7a.5.5 0 01-1 0V4H1.5a.5.5 0 010-1zm0-2.1h9c.3 0 .5.2.5.4v9.1a.5.5 0 01-1 0V2H1.5a.5.5 0 010-1zm4.3 5.2H2V10h3.8V6.2z"
59
- id="a"
60
- fill="#999"
61
- />
62
- </g>
63
- </svg>
64
- Viewports addon in the toolbar
65
- </div>
66
- </section>
67
- </article>
68
- );
69
- };
@@ -1,25 +0,0 @@
1
- import React from 'react';
2
- import { within, userEvent } from '@storybook/testing-library';
3
-
4
- import { Page } from './Page';
5
-
6
- export default {
7
- title: 'Example/Page',
8
- component: Page,
9
- parameters: {
10
- // More on Story layout: https://storybook.js.org/docs/react/configure/story-layout
11
- layout: 'fullscreen',
12
- },
13
- };
14
-
15
- const Template = (args) => <Page {...args} />;
16
-
17
- // More on interaction testing: https://storybook.js.org/docs/react/writing-tests/interaction-testing
18
- export const LoggedOut = Template.bind({});
19
-
20
- export const LoggedIn = Template.bind({});
21
- LoggedIn.play = async ({ canvasElement }) => {
22
- const canvas = within(canvasElement);
23
- const loginButton = await canvas.getByRole('button', { name: /Log in/i });
24
- await userEvent.click(loginButton);
25
- };