From dcb609b831ef6c8e711b576a2f31dd772eb66d53 Mon Sep 17 00:00:00 2001 From: Brandon Romano Date: Mon, 12 Oct 2020 15:56:27 -0700 Subject: [PATCH] [Website] Public Launch Assembly (#438) * Reduce hero size for placeholder * Clean up Sticky Footer - Increase the specificity of the selector to prevent any accidental collisions - Account for the meganav that exists * [Website] Add Boundary Features section to homepage (#436) * Install and implement ProductFeaturesList * Add images and content * Inline the product features * [Website] Add use cases section (#445) * Commit to illustrate UseCases error * update react image * Add in content from design * Tweaks * Apply handy edits Co-authored-by: Brandon Romano Co-authored-by: Jeff Escalante Co-authored-by: Brandon Romano * [Website] Add SectionBreakCta component (#452) * Create implement barebones component * Build structure/add content * Get CSS up to spec - Typography - spacing - Layout - box-shadow - Accent line * Mobile treatment * Update URL * Add a break-section to give bg on page * Change link to outbound Design is incorrect for this link Co-authored-by: Brandon Romano * Reduce CSS selectors Co-authored-by: Brandon Romano * [Website] Add branded CTA section (#450) * Create skeleton for component * Bring in line with CallToAction styles * Set up background * Typography and layout (and mobile) * Button polish * Changes to prep for updates These will keep the homepage ready for component updates and the upcoming docs and download pages. Co-authored-by: Brandon Romano * Address feedback - Reduce button hackiness - Adjust pattern position on mobile to not overlap button Co-authored-by: Brandon Romano * Upgrade button, minor tweaks to BrandedCTA (#481) * Updates dependencies * [Website] Homepage hero updates (#503) * Adjustments to align and lay out left side * Implement hero background * Adjust hero URLs * Implement mobile hero pattern/tweaks * Add video! * Mobile tweaks * Remove mobile bg * Center the text/buttons on mobile * Remove mobile hero pattern * Address visual nits * Adjust interface for video * [Website] Add "How it works" section (#483) * Create skeleton and implement component * Add sections * Add CSS and adjust structure * Remove sections ternary * Change nomenclature for clarity * Mobile tweaks * Tweaks inspired by HCP * Create LogoList component skeleton * Implement LogoList on main component - Shift footertext responsibility to it - Assume logos will be passed in, because it doesn't render otherwise anyway with the right checks * Implement some logos/restructure LogoList * CSS adjustments to logolist/section layout * Show example for too many integrations * Remove cutoff logic * Add SVGs for diagram stack * Combine SVGs into a component This is necessary to act on various parts of the image independently. * Fully combine SVG and remove unneeded CSS * Further CSS cleanup * Implement stickyness * Set up active example checks for graphic * Implement reactivity - Apply styles based on inactivity or activity, whichever fits best per-element - Add expected state to the general HowItWorks component, where it will be managed and passed into the diagram - Make icon and arrow spacers use the same spacer class * CSS tweaks for design/organization * Implement scroll-to-animate functionality! * Fill out icons for integrations * Feature updates - Move LogoList into folder - Give descriptions some margin * Mobile treatment tweaks * Import logic from the cloud-platform page on .com This fixes a bug in which the in-view example would not update in an expected manner. * Remove max-width adjustment on UL * Fix need for height on the graphic * Padding/margin tweaks * Minor CSS tweaks * Final padding adjustments * Plugging in proper content into the landing page (#545) * Misc content updates to align with copy doc * Plug in feature SVGs * Move use cases up * Remove the MegaNav - to be replaced soon * Updates the nav * Add footer content, security page * Remove react-mega-nav from styles * Downloads Page (#541) * [Website] Add use cases section (#445) * Commit to illustrate UseCases error * update react image * Add in content from design * Tweaks * Apply handy edits Co-authored-by: Brandon Romano Co-authored-by: Jeff Escalante Co-authored-by: Brandon Romano * Port new downloader page to Boundary * update placeholder data * missing css property * Fix the weird rebase * Fix padding Co-authored-by: Noel Quiles <3746694+EnMod@users.noreply.github.com> Co-authored-by: Jeff Escalante Co-authored-by: Brandon Romano * [Website] Add alert banner (#557) * Bring over waypoint's implementation * Prove that it works/theme to boundary * revert to hidden for now * [Website] README polish (#558) * Adjust readme for boundary * Correct URL in first paragraph * [Website] Add community page (#555) * Just import files from Consul * Revert CSS paradigm for VerticalBlockList * Adds community to the nav Co-authored-by: Brandon Romano * A few small content / bug tweaks (#563) * adds HashiStackMenu * Fix platform agnostic copy * Reduce padding between sections * Fix Subnav indicator for docs page * Fix features padding * Adds Favicon * Update how it works content * Adds share image * Updates use cases * Styling to community page * Remove some color overrides * Add SVGO option to nextconfig (#565) * Add press kit to footer (#567) * Plug in proper link for onboard users * Plug in proper video URL (#584) * Bump HSM version (#582) * Downloads Page Content (#585) * Wire up Boundary Downloads content * Plug in remaining downloads content * Download via Product slug * Tweak with transition timing (#587) * Plug in proper logo into the downloads page (#589) * Content tweaks (#590) * Remove border top from footer (#591) * More content tweaks (#608) * Updates the hero to support UI/CLI previews (#609) * Updates the hero to support UI/CLI previews * Updates video * More content tweaks (#634) * Plugs in light theme UI video * Update infra as code feature * Remove Auth (#636) * Remove auth-related files * Remove auth-related config * Remove auth provider and next-auth pkgs * Remove *env.local from gitignore * Swtich og:image to have a www subdomain Co-authored-by: Noel Quiles <3746694+EnMod@users.noreply.github.com> * Elevate prop destructuring to function call Co-authored-by: Jeff Escalante * Update website/pages/community/index.jsx Co-authored-by: Jeff Escalante Co-authored-by: Noel Quiles <3746694+EnMod@users.noreply.github.com> Co-authored-by: Jeff Escalante Co-authored-by: Zack Tanner Co-authored-by: Jimmy Merritello <7191639+jmfury@users.noreply.github.com> --- website/.gitignore | 1 - website/README.md | 10 + .../components/auth-gate/auth-gate.module.css | 28 - website/components/auth-gate/index.jsx | 83 -- website/components/auth-gate/loading.svg | 1 - .../auth-indicator/auth-indicator.module.css | 24 - website/components/auth-indicator/index.jsx | 27 - website/components/auth-indicator/loading.svg | 1 - .../branded-cta/branded-cta.module.css | 66 + .../components/branded-cta/img/bg-pattern.svg | 1 + website/components/branded-cta/index.jsx | 46 + .../conditional-auth-provider/index.jsx | 19 - website/components/downloader/cards/index.jsx | 124 ++ .../downloader/cards/style.module.css | 156 +++ .../components/downloader/dropdown/index.jsx | 58 + .../downloader/dropdown/style.module.css | 28 + .../components/downloader/logos/fastly.svg | 7 + .../downloader/release-information/index.jsx | 158 +++ .../release-information/style.module.css | 101 ++ .../components/downloader/utils/downloader.js | 123 ++ website/components/footer/index.jsx | 6 + website/components/footer/style.css | 1 - .../homepage-hero/HomepageHero.module.css | 40 + website/components/homepage-hero/index.jsx | 76 +- .../components/homepage-hero/style.module.css | 62 - .../how-it-works/feature/feature.module.css | 9 + .../components/how-it-works/feature/index.jsx | 26 + .../how-it-works/feature/logo-list/index.jsx | 22 + .../feature/logo-list/logo-list.module.css | 16 + .../how-boundary-works-diagram.module.css | 190 +++ .../how-boundary-works-diagram/index.jsx | 294 +++++ .../how-it-works/how-it-works.module.css | 87 ++ website/components/how-it-works/index.jsx | 50 + .../components/section-break-cta/index.jsx | 22 + .../section-break-cta.module.css | 31 + .../components/signin-error-page/index.jsx | 33 - .../signin-error-page/signin-error.module.css | 29 - website/components/subnav/index.jsx | 2 +- website/data/alert-banner.js | 7 + website/data/downloads.js | 66 + website/data/navigation.js | 20 +- website/lib/next-auth-utils/config.js | 19 - website/next.config.js | 8 +- website/package-lock.json | 1122 +++++++---------- website/package.json | 23 +- website/pages/_app.js | 38 +- website/pages/api/auth/[...nextauth].js | 12 - website/pages/community/index.jsx | 32 + website/pages/community/style.css | 21 + website/pages/docs/[[...page]].jsx | 2 +- website/pages/downloads/img/boundary-logo.svg | 1 + website/pages/downloads/index.jsx | 70 +- website/pages/downloads/style.css | 4 - website/pages/downloads/style.module.css | 61 + .../home/img/features/config-as-code.svg | 1 + .../img/features/identity-based-access.svg | 1 + .../managing-dynamic-environments.svg | 1 + .../img/features/platform-agnosticity.svg | 1 + .../home/img/features/session-management.svg | 1 + .../home/img/features/session-visibility.svg | 1 + website/pages/home/img/logos/aws.svg | 1 + website/pages/home/img/logos/azure.svg | 1 + website/pages/home/img/logos/consul.svg | 1 + website/pages/home/img/logos/gcp.svg | 1 + website/pages/home/img/logos/github.svg | 1 + website/pages/home/img/logos/kubernetes.svg | 1 + website/pages/home/img/logos/more.svg | 1 + website/pages/home/img/logos/okta.svg | 1 + website/pages/home/img/logos/ping.svg | 1 + website/pages/home/img/logos/terraform.svg | 1 + .../pages/home/img/red-usecase-accessmgmt.png | Bin 0 -> 37534 bytes .../home/img/red-usecase-accessprivileges.png | Bin 0 -> 24909 bytes .../img/red-usecase-sessionvisibility.png | Bin 0 -> 31353 bytes website/pages/home/index.jsx | 221 +++- website/pages/home/style.css | 50 +- website/pages/security/index.jsx | 37 + website/pages/security/styles.module.css | 15 + website/pages/signin-error/index.jsx | 5 - website/pages/style.css | 51 +- website/public/favicon.ico | Bin 0 -> 169111 bytes website/public/files/press-kit.zip | Bin 0 -> 191102 bytes website/public/img/hero-pattern.svg | 2 +- website/public/img/og-image.png | Bin 11900 -> 180023 bytes website/public/videos/hero-cli.mp4 | Bin 0 -> 462900 bytes website/public/videos/hero-ui.mp4 | Bin 0 -> 1592220 bytes 85 files changed, 2800 insertions(+), 1161 deletions(-) delete mode 100644 website/components/auth-gate/auth-gate.module.css delete mode 100644 website/components/auth-gate/index.jsx delete mode 100644 website/components/auth-gate/loading.svg delete mode 100644 website/components/auth-indicator/auth-indicator.module.css delete mode 100644 website/components/auth-indicator/index.jsx delete mode 100644 website/components/auth-indicator/loading.svg create mode 100644 website/components/branded-cta/branded-cta.module.css create mode 100644 website/components/branded-cta/img/bg-pattern.svg create mode 100644 website/components/branded-cta/index.jsx delete mode 100644 website/components/conditional-auth-provider/index.jsx create mode 100644 website/components/downloader/cards/index.jsx create mode 100644 website/components/downloader/cards/style.module.css create mode 100644 website/components/downloader/dropdown/index.jsx create mode 100644 website/components/downloader/dropdown/style.module.css create mode 100644 website/components/downloader/logos/fastly.svg create mode 100644 website/components/downloader/release-information/index.jsx create mode 100644 website/components/downloader/release-information/style.module.css create mode 100644 website/components/downloader/utils/downloader.js create mode 100644 website/components/homepage-hero/HomepageHero.module.css delete mode 100644 website/components/homepage-hero/style.module.css create mode 100644 website/components/how-it-works/feature/feature.module.css create mode 100644 website/components/how-it-works/feature/index.jsx create mode 100644 website/components/how-it-works/feature/logo-list/index.jsx create mode 100644 website/components/how-it-works/feature/logo-list/logo-list.module.css create mode 100644 website/components/how-it-works/how-boundary-works-diagram/how-boundary-works-diagram.module.css create mode 100644 website/components/how-it-works/how-boundary-works-diagram/index.jsx create mode 100644 website/components/how-it-works/how-it-works.module.css create mode 100644 website/components/how-it-works/index.jsx create mode 100644 website/components/section-break-cta/index.jsx create mode 100644 website/components/section-break-cta/section-break-cta.module.css delete mode 100644 website/components/signin-error-page/index.jsx delete mode 100644 website/components/signin-error-page/signin-error.module.css create mode 100644 website/data/alert-banner.js create mode 100644 website/data/downloads.js delete mode 100644 website/lib/next-auth-utils/config.js delete mode 100644 website/pages/api/auth/[...nextauth].js create mode 100644 website/pages/community/index.jsx create mode 100644 website/pages/community/style.css create mode 100644 website/pages/downloads/img/boundary-logo.svg delete mode 100644 website/pages/downloads/style.css create mode 100644 website/pages/downloads/style.module.css create mode 100644 website/pages/home/img/features/config-as-code.svg create mode 100644 website/pages/home/img/features/identity-based-access.svg create mode 100644 website/pages/home/img/features/managing-dynamic-environments.svg create mode 100644 website/pages/home/img/features/platform-agnosticity.svg create mode 100644 website/pages/home/img/features/session-management.svg create mode 100644 website/pages/home/img/features/session-visibility.svg create mode 100644 website/pages/home/img/logos/aws.svg create mode 100644 website/pages/home/img/logos/azure.svg create mode 100644 website/pages/home/img/logos/consul.svg create mode 100644 website/pages/home/img/logos/gcp.svg create mode 100644 website/pages/home/img/logos/github.svg create mode 100644 website/pages/home/img/logos/kubernetes.svg create mode 100644 website/pages/home/img/logos/more.svg create mode 100644 website/pages/home/img/logos/okta.svg create mode 100644 website/pages/home/img/logos/ping.svg create mode 100644 website/pages/home/img/logos/terraform.svg create mode 100644 website/pages/home/img/red-usecase-accessmgmt.png create mode 100644 website/pages/home/img/red-usecase-accessprivileges.png create mode 100644 website/pages/home/img/red-usecase-sessionvisibility.png create mode 100644 website/pages/security/index.jsx create mode 100644 website/pages/security/styles.module.css delete mode 100644 website/pages/signin-error/index.jsx create mode 100644 website/public/favicon.ico create mode 100644 website/public/files/press-kit.zip create mode 100644 website/public/videos/hero-cli.mp4 create mode 100644 website/public/videos/hero-ui.mp4 diff --git a/website/.gitignore b/website/.gitignore index 4407f9d430..1d23ce1de1 100644 --- a/website/.gitignore +++ b/website/.gitignore @@ -3,4 +3,3 @@ node_modules .next out .mdx-data -.env*.local diff --git a/website/README.md b/website/README.md index e15ede984d..fcec2b4ebd 100644 --- a/website/README.md +++ b/website/README.md @@ -28,6 +28,7 @@ This subdirectory contains the entire source for the [Boundary Website](https:// - [Editing Navigation Sidebars](#editing-navigation-sidebars) - [Index-less Categories](#index-less-categories) - [Custom or External Links](#custom-or-external-links) + - [Editing/Enabling the Alert Banner](#editingenabling-the-alert-banner) - [Changing the Release Version](#changing-the-release-version) - [Displaying a Prerelease](#displaying-a-prerelease) - [Redirects](#redirects) @@ -316,6 +317,15 @@ If the link provided in the `href` property is external, it will display a small +## Editing/Enabling the Alert Banner + +The data and visibility of the alert banner are controlled by the `alert-banner.js` file in the [`/data` directory](data). The following data can be edited in this file: + +- `ALERT_BANNER_ACTIVE`: Determines if the banner is visible (when set to `true`) or not (when set to `false`). +- `tag`: Copy for the bordered text on the left side of the alert. +- `text`: Copy for the center text of the alert. +- `url`: Where the alert links to when clicked. + diff --git a/website/components/auth-gate/auth-gate.module.css b/website/components/auth-gate/auth-gate.module.css deleted file mode 100644 index 2664a39449..0000000000 --- a/website/components/auth-gate/auth-gate.module.css +++ /dev/null @@ -1,28 +0,0 @@ -.signInWrapper { - width: 100vw; - height: 100vh; - display: flex; - justify-content: center; - align-items: center; -} - -.loadingIconSpin { - width: 100vw; - height: 100vh; - display: flex; - justify-content: center; - align-items: center; - animation: spin 0.5s linear infinite; -} - -@keyframes spin { - 100% { - transform: rotate(360deg); - } -} - -.loginLockup { - display: flex; - width: 50vw; - justify-content: space-around; -} diff --git a/website/components/auth-gate/index.jsx b/website/components/auth-gate/index.jsx deleted file mode 100644 index a5b4b20dcc..0000000000 --- a/website/components/auth-gate/index.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import { useSession, getCsrfToken, getProviders } from 'next-auth/client' -import LoadingIcon from './loading.svg?include' -import InlineSvg from '@hashicorp/react-inline-svg' -import styles from './auth-gate.module.css' -import Button from '@hashicorp/react-button' -import { useEffect, useState } from 'react' -import { useRouter } from 'next/router' -import SigninErrorPage from 'components/signin-error-page' - -export default function AuthGate({ children }) { - const [session, loading] = useSession() - const { query } = useRouter() - if (query?.error === 'oAuthCallback') return - - if (loading) - return - return session ? ( - <>{children} - ) : ( -
- -
- ) -} - -function SignInForm() { - const [token, setToken] = useState(null) - useEffect(() => { - async function getToken() { - const t = await getCsrfToken() - if (t) { - setToken(t) - } - } - getToken() - }, [token]) - return token ? ( -
-
-
- ) : null -} - -function Form({ callbackUrl, token }) { - const authProviders = useAuthProviders() - - return ( -
- {authProviders && - Object.keys(authProviders).map((ap) => ( - - - -
- ) -} - -export function useAuthProviders() { - const [authProviders, setAuthProviders] = useState([]) - async function getProviderList() { - const providers = await getProviders() - if (providers) { - setAuthProviders(providers) - } - } - useEffect(() => { - if (typeof window !== 'undefined') { - getProviderList() - } - }, []) - return authProviders -} diff --git a/website/components/auth-gate/loading.svg b/website/components/auth-gate/loading.svg deleted file mode 100644 index 9a3df750aa..0000000000 --- a/website/components/auth-gate/loading.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website/components/auth-indicator/auth-indicator.module.css b/website/components/auth-indicator/auth-indicator.module.css deleted file mode 100644 index 453adc3f8a..0000000000 --- a/website/components/auth-indicator/auth-indicator.module.css +++ /dev/null @@ -1,24 +0,0 @@ -.authIndicator { - position: fixed; - bottom: 0; - width: 100vw; - z-index: 3; - padding: 1rem 2rem; - text-align: center; - background: var(--black); - color: var(--white); - display: flex; - flex-wrap: wrap; - justify-content: center; - align-items: center; - @media (--medium-up) { - justify-content: flex-end; - } -} - -.loggedInText { - margin: 1rem 1rem; - @media (--medium-up) { - margin: 0 1rem; - } -} diff --git a/website/components/auth-indicator/index.jsx b/website/components/auth-indicator/index.jsx deleted file mode 100644 index 856016fbfe..0000000000 --- a/website/components/auth-indicator/index.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { signOut, useSession } from 'next-auth/client' -import styles from './auth-indicator.module.css' -import Button from '@hashicorp/react-button' - -export default function AuthIndicator() { - const [session, loading] = useSession() - if (loading) return `Loading...` - return ( -
- {session && ( - <> - - Signed in as {session.user.email} - - -
- ) -} diff --git a/website/components/auth-indicator/loading.svg b/website/components/auth-indicator/loading.svg deleted file mode 100644 index 9a3df750aa..0000000000 --- a/website/components/auth-indicator/loading.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website/components/branded-cta/branded-cta.module.css b/website/components/branded-cta/branded-cta.module.css new file mode 100644 index 0000000000..33ff4d78aa --- /dev/null +++ b/website/components/branded-cta/branded-cta.module.css @@ -0,0 +1,66 @@ +.brandedCta { + padding: 88px 0; + background-color: var(--red-l3); + background-image: url('./img/bg-pattern.svg'); + background-position: bottom right; + background-repeat: no-repeat; + + @media (--small) { + background-position: bottom 0 right -130px; + } + + @media (462px <= width < 600px) { + background-position: bottom 0 right -260px; + } + + @media (width < 462px) { + background-position: bottom 0 right -170px; + } +} + +.contentContainer { + @media (width >= 992px) { + display: flex; + } + + @media (width < 992px) { + flex-direction: column; + } +} + +.heading { + color: var(--black); + margin-top: 0; + + @media (width >= 992px) { + flex-basis: 33.3%; + margin: 0; + } +} + +.content { + max-width: 647px; + margin: 0; + color: var(--gray-3); +} + +.content-and-links { + @media (width >= 992px) { + flex-basis: 66.6%; + margin-left: 32px; + } + + & .g-type-body-large { + max-width: 35em; + } +} + +.links { + margin-top: 40px; + margin-bottom: -16px; + + & a { + margin-right: 16px; + margin-bottom: 16px; + } +} diff --git a/website/components/branded-cta/img/bg-pattern.svg b/website/components/branded-cta/img/bg-pattern.svg new file mode 100644 index 0000000000..f259e198bc --- /dev/null +++ b/website/components/branded-cta/img/bg-pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/components/branded-cta/index.jsx b/website/components/branded-cta/index.jsx new file mode 100644 index 0000000000..4c9c06f797 --- /dev/null +++ b/website/components/branded-cta/index.jsx @@ -0,0 +1,46 @@ +import styles from './branded-cta.module.css' +import Button from '@hashicorp/react-button' + +export default function BrandedCta({ heading, content, links }) { + + return ( +
+
+

+ {heading} +

+
+

+ {content} +

+
+ {links.map((link, stableIdx) => { + const buttonVariant = stableIdx === 0 ? 'primary' : 'secondary' + const linkType = link.type || '' + return ( +
+
+
+
+ ) +} diff --git a/website/components/conditional-auth-provider/index.jsx b/website/components/conditional-auth-provider/index.jsx deleted file mode 100644 index 71e2eec645..0000000000 --- a/website/components/conditional-auth-provider/index.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import AuthIndicator from 'components/auth-indicator' -import AuthGate from 'components/auth-gate' -import { Provider as NextAuthProvider } from 'next-auth/client' - -const shouldApplyAuth = - process.env.HASHI_ENV === 'production' || process.env.HASHI_ENV === 'preview' - -export default function ConditionalAuthProvider({ children, session }) { - return shouldApplyAuth ? ( - - - {children} - - - - ) : ( - <>{children} - ) -} diff --git a/website/components/downloader/cards/index.jsx b/website/components/downloader/cards/index.jsx new file mode 100644 index 0000000000..ab771cfb00 --- /dev/null +++ b/website/components/downloader/cards/index.jsx @@ -0,0 +1,124 @@ +import Tabs from '@hashicorp/react-tabs' + +import { prettyOs, prettyArch } from 'components/downloader/utils/downloader' +import styles from './style.module.css' + +export default function DownloadTabs({ + defaultTabIdx, + tabData, + downloads, + version, + merchandisingSlot, + brand, + logo, + tutorialLink, +}) { + return ( + ({ + heading: prettyOs(os), + tabChildren: function TabChildren() { + return ( +
+ + {merchandisingSlot} +
+ ) + }, + }))} + /> + ) +} + +function Cards({ + os, + downloads, + packageManagers, + version, + theme, + logo, + tutorialLink, +}) { + const arches = downloads[os] + const hasPackageManager = Boolean(packageManagers) + const hasMultiplePackageManagers = Array.isArray(packageManagers) + + return ( + <> +
+ {hasPackageManager && ( +
+ Package Manager + {Array.isArray(packageManagers) ? ( + ({ + heading: label, + tabChildren: function TabChildren() { + return ( +
+ {commands.map((command) => ( +
{command}
+ ))} +
+ ) + }, + }))} + /> + ) : ( +
+ {packageManagers.commands.map((command) => ( +
{command}
+ ))} +
+ )} + {tutorialLink && ( + + )} +
+ )} +
+ Binary Download +
+
+ {logo} + {version} +
+ {Object.entries(arches).map(([arch, url]) => ( + + {prettyArch(arch)} + + ))} +
+
+ Bandwidth courtesy of + Fastly +
+
+
+ + ) +} diff --git a/website/components/downloader/cards/style.module.css b/website/components/downloader/cards/style.module.css new file mode 100644 index 0000000000..3983457ff1 --- /dev/null +++ b/website/components/downloader/cards/style.module.css @@ -0,0 +1,156 @@ +.cards { + max-width: 880px; + margin: 0 auto; +} + +.logoWrapper { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 10px; +} + +.logoDownloadWrapper { + width: 100%; +} + +.version { + margin-left: 8px; +} + +.downloadCards { + justify-content: center; + margin: 54px 0 24px; + + & a { + color: var(--gray-2); + } + + @media (--medium-up) { + margin: 64px 0; + display: grid; + grid-template-columns: 1fr 1fr; + grid-column-gap: 48px; + justify-items: center; + } + + & .downloadLink { + color: var(--brand); + margin-right: 16px; + } +} + +.downloadCardsSingle { + composes: downloadCards; + + & .card { + max-width: unset; + } + + @media (--medium-up) { + grid-template-columns: 1fr; + + & .card:first-child { + margin-bottom: 48px; + } + } +} + +.card { + width: 100%; + min-height: 278px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + justify-content: space-between; + padding: 40px 32px; + color: var(--gray-2); + border: 1px solid var(--gray-6); + + &:first-child { + border-bottom: none; + + @media (--medium-up) { + border-bottom: 1px solid var(--gray-6); + } + } +} + +.packageManagers { + composes: card; + + & a { + color: var(--brand); + } + + & :global { + & .g-tabs { + width: 100%; + + @media (--medium-up) { + width: initial; + } + } + } +} + +.soloCard { + composes: card; + grid-column: span 2; + + &:first-child { + border-bottom: 1px solid var(--gray-6); + } +} + +.install { + color: var(--white); + background-color: var(--black); + padding: 16px 24px; + border-radius: 3px; + text-align: left; + margin: 32px 0; + + & pre { + margin: 0; + padding: 0; + background-color: inherit; + white-space: normal; + + &::before { + color: #e93471; + content: '$'; + margin-right: 8px; + } + + @media (--medium-up) { + white-space: pre; + } + } +} + +.cardTitle { + font-family: var(--font-display); + font-size: 12px; + line-height: 18px; + letter-spacing: 0.06em; + text-transform: uppercase; + color: var(--gray-4); + font-weight: bold; +} + +.fastly { + display: flex; + align-items: center; + flex-direction: column; + + & svg path { + fill: var(--black); + } + + & img { + margin-top: 12px; + width: 48px; + } +} diff --git a/website/components/downloader/dropdown/index.jsx b/website/components/downloader/dropdown/index.jsx new file mode 100644 index 0000000000..11d202db39 --- /dev/null +++ b/website/components/downloader/dropdown/index.jsx @@ -0,0 +1,58 @@ +import { useState, useRef, useEffect } from 'react' +import Button from '@hashicorp/react-button' +import styles from './style.module.css' + +export default function Dropdown({ options, onChange, title, brand }) { + const [open, setOpen] = useState(false) + const buttonRef = useRef() + + useEffect(() => { + function handleClickOutside(event) { + if (buttonRef.current.contains(event.target)) return + + setOpen(false) + } + document.addEventListener('mousedown', handleClickOutside) + + return () => { + document.removeEventListener('mousedown', handleClickOutside) + } + }, []) + + return ( +
+
+ ) +} diff --git a/website/components/downloader/dropdown/style.module.css b/website/components/downloader/dropdown/style.module.css new file mode 100644 index 0000000000..f7e381898a --- /dev/null +++ b/website/components/downloader/dropdown/style.module.css @@ -0,0 +1,28 @@ +.root { + display: inline-block; + position: relative; +} + +.menu { + position: absolute; + list-style: none; + max-height: 250px; + overflow-y: auto; + top: 35px; + width: 100%; + padding: 0; + background-color: var(--white); + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), + 0 1px 3px 0 rgba(0, 0, 0, 0.12); +} + +.option { + padding: 8px 16px; + cursor: pointer; + background-color: var(--brand); + color: var(--white); + + &:hover { + background-color: var(--brand-d1); + } +} diff --git a/website/components/downloader/logos/fastly.svg b/website/components/downloader/logos/fastly.svg new file mode 100644 index 0000000000..cfe7b7e968 --- /dev/null +++ b/website/components/downloader/logos/fastly.svg @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/website/components/downloader/release-information/index.jsx b/website/components/downloader/release-information/index.jsx new file mode 100644 index 0000000000..2eb1344e7a --- /dev/null +++ b/website/components/downloader/release-information/index.jsx @@ -0,0 +1,158 @@ +import { useState, Fragment, useEffect } from 'react' + +import Dropdown from 'components/downloader/dropdown' +import { + prettyArch, + prettyOs, + sortPlatforms, + getVersionLabel, + sortAndFilterReleases, +} from 'components/downloader/utils/downloader' +import styles from './style.module.css' + +export default function ReleaseInformation({ + productId, + productName, + latestVersion, + packageManagers, + containers, + tutorials, + changelog, + brand, +}) { + const [selectedVersionId, setSelectedVersionId] = useState(latestVersion) + const [releases, setReleases] = useState([]) + const { version, ...selectedVersion } = + releases.find((release) => release.version === selectedVersionId) || {} + + useEffect(() => { + // lazy load all release versions to populate dropdown & releases section + fetch(`https://releases.hashicorp.com/${productId}/index.json`) + .then((res) => res.json()) + .then((data) => { + const latestReleases = sortAndFilterReleases(Object.keys(data.versions)) + + const releases = latestReleases.map((releaseVersion) => ({ + ...sortPlatforms(data.versions[releaseVersion]), + version: releaseVersion, + })) + setReleases(releases) + }) + }, []) + + return ( +
+
+

Release Information

+
+ {releases.length > 0 && ( + <> +
Releases:
+
+ ({ + label: `${productName} ${getVersionLabel( + releaseData.version, + latestVersion + )}`, + value: releaseData.version, + }))} + onChange={(release) => setSelectedVersionId(release)} + /> + + Changelog + +
+ + )} +
Latest Downloads:
+
+ Package downloads for {productName} {version} +
+ {Object.entries(selectedVersion).map(([os, release]) => ( + +
{prettyOs(os)}
+
+ {Object.entries(release).map(([arch, file]) => ( + + {prettyArch(arch)} + + ))} +
+
+ ))} +
+

+ You can find the{' '} + + SHA256 checksums for {productName} {version} + {' '} + online and you can{' '} + + verify the checksums signature file + {' '} + which has been signed using{' '} + + HashiCorp's GPG key. + +

+
+ + {packageManagers?.length > 0 && ( + <> +
Package Managers
+
+ {packageManagers.map((packageManager) => ( +
+ Install with{' '} + {packageManager.label} +
+ ))} +
+ + )} + {containers?.length > 0 && ( + <> +
Containers
+
+ {containers.map((container) => ( +
+ Run with {container.label} +
+ ))} +
+ + )} + + {containers?.length > 0 && ( + <> +
Tutorials
+
+ {tutorials.map((tutorial) => ( + + ))} +
+ + )} +
+
+
+ ) +} diff --git a/website/components/downloader/release-information/style.module.css b/website/components/downloader/release-information/style.module.css new file mode 100644 index 0000000000..3f91d6ec02 --- /dev/null +++ b/website/components/downloader/release-information/style.module.css @@ -0,0 +1,101 @@ +.root { + background-color: var(--gray-7); + padding: 42px 0; + margin-top: 42px; + color: var(--gray-2); + + & p { + color: var(--gray-2); + } + + & a { + color: var(--gray-2); + } + + & :global(.g-container) { + max-width: 825px; + } + + & h2 { + text-align: center; + color: var(--black); + margin-bottom: 54px; + + @media (--medium-up) { + margin-bottom: 64px; + } + } +} + +.heading { + margin: 24px 0; + font-weight: bold; + color: var(--black); + + @media (--medium-up) { + text-align: right; + margin: 0; + } +} + +.changelog { + display: block; + margin: 24px 0 0; + color: var(--black); + + @media (--medium-up) { + display: inline-block; + margin: 0 0 0 24px; + } +} + +.grid { + margin: 48px auto; + + @media (--medium-up) { + display: grid; + grid-column-gap: 32px; + grid-row-gap: 48px; + grid-template-columns: auto 1fr; + } +} + +.latestDownloads { + composes: heading; + margin-top: 40px; + + @media (--medium-up) { + margin-top: 0; + } +} + +.downloads { + display: grid; + width: 100%; + grid-template-columns: auto 1fr; + margin: 17px 0 40px; + grid-column-gap: 28px; + grid-row-gap: 16px; + + & a { + margin: 0 6px; + } + + & .os { + font-weight: bold; + color: var(--black); + } + + @media (--medium-up) { + margin: 20px 0 64px; + } +} + +.releases { + align-self: center; + composes: heading; +} + +.links > div:not(:first-child) { + margin: 15px 0; +} diff --git a/website/components/downloader/utils/downloader.js b/website/components/downloader/utils/downloader.js new file mode 100644 index 0000000000..06d4b91d45 --- /dev/null +++ b/website/components/downloader/utils/downloader.js @@ -0,0 +1,123 @@ +import semverRSort from 'semver/functions/rsort' +import semverPrerelease from 'semver/functions/prerelease' +import semverValid from 'semver/functions/valid' + +export function getVersionLabel(version, latestVersion) { + if (version === latestVersion) { + return `${version} (latest)` + } + + return version +} + +export function sortAndFilterReleases(releases) { + const validReleases = releases.filter(semverValid) + // descending sort on releases, while filtering out pre-releases + return semverRSort(validReleases).filter( + (version) => !semverPrerelease(version) + ) +} + +/** TODO: Below utils directly from Product-Downloader component. + * Should either be exported, or migrated back to web-components */ + +export function prettyArch(arch) { + switch (arch) { + case 'all': + return 'Universal (32 and 64-bit)' + case 'i686': + case 'i386': + case '686': + case '386': + return '32-bit' + case 'x86_64': + case '86_64': + case 'amd64': + return '64-bit' + default: + if (/-/.test(arch)) { + const parts = arch.split(/-(.+)/) + return `${prettyArch(parts[0])} (${parts[1]})` + } else { + const parts = arch.split('_') + if (parts.length > 0) { + return ( + parts[parts.length - 1].charAt(0).toUpperCase() + + parts[parts.length - 1].slice(1) + ) + } + } + } +} + +export function detectOs(platform) { + for (let key in platformMap) { + if (platform.indexOf(key) !== -1) { + return platformMap[key] + } + } + + return null +} + +export function prettyOs(os) { + switch (os) { + case 'darwin': + return 'Mac OS X' + case 'freebsd': + return 'FreeBSD' + case 'openbsd': + return 'OpenBSD' + case 'netbsd': + return 'NetBSD' + case 'archlinux': + return 'Arch Linux' + case 'linux': + return 'Linux' + case 'windows': + return 'Windows' + default: + return os.charAt(0).toUpperCase() + os.slice(1) + } +} + +const platformMap = { + Mac: 'darwin', + Win: 'windows', + Linux: 'linux', +} + +export function sortPlatforms(releaseData) { + // first we pull the platforms out of the release data object and format it the way we want + const platforms = releaseData.builds.reduce((acc, build) => { + if (!acc[build.os]) acc[build.os] = {} + acc[build.os][build.arch] = build.url + return acc + }, {}) + + const platformKeys = Object.keys(platforms) + + // create array of sorted values to base the order on + const sortedValues = Object.keys(platformMap) + .map((e) => platformMap[e]) + // join the lists together to make sure + // all items are accounted for when sorting + .concat(platformKeys) + // filter our any duplicates and unneeded items + .filter((elem, pos, arr) => { + return arr.indexOf(elem) == pos && platformKeys.indexOf(elem) > -1 + }) + + return ( + platformKeys + // sort items based on platformMap order + .sort((a, b) => { + return sortedValues.indexOf(a) - sortedValues.indexOf(b) + }) + // create new sorted object to return + .reduce((result, key) => { + result[key] = platforms[key] + return result + }, {}) + ) +} diff --git a/website/components/footer/index.jsx b/website/components/footer/index.jsx index 8b1c01bb5c..88e2fcecef 100644 --- a/website/components/footer/index.jsx +++ b/website/components/footer/index.jsx @@ -8,6 +8,12 @@ export default function Footer({ openConsentManager }) { Docs + Learn + Privacy + + Security + + Press Kit Consent Manager diff --git a/website/components/footer/style.css b/website/components/footer/style.css index 7d72632890..bd11930e6c 100644 --- a/website/components/footer/style.css +++ b/website/components/footer/style.css @@ -2,7 +2,6 @@ padding: 25px 0 17px 0; flex-shrink: 0; display: flex; - border-top: 1px solid var(--gray-6); & .g-container { display: flex; diff --git a/website/components/homepage-hero/HomepageHero.module.css b/website/components/homepage-hero/HomepageHero.module.css new file mode 100644 index 0000000000..a604834559 --- /dev/null +++ b/website/components/homepage-hero/HomepageHero.module.css @@ -0,0 +1,40 @@ +.homepageHero { + padding: 128px 0; + background-repeat: no-repeat; + background-color: var(--red-l3); + background-image: url(/img/hero-pattern.svg); + background-position: bottom right; + + @media (max-width: 767px) { + padding: 88px 0; + background-position: bottom 0 right -130px; + } + + & :global(.g-hero) { + background: none; + padding: 0; + + & :global(.g-btn) { + border-color: var(--red); + background-color: var(--red); + } + + & :global(.carousel) { + display: flex; + flex-direction: column-reverse; + + & :global(.controls) { + padding-top: 0; + margin-bottom: 32px; + + & :global(.progress-bar) { + background-color: var(--gray-6); + + & > span { + background: var(--red); + } + } + } + } + } +} diff --git a/website/components/homepage-hero/index.jsx b/website/components/homepage-hero/index.jsx index 289bb6cf69..c61a195341 100644 --- a/website/components/homepage-hero/index.jsx +++ b/website/components/homepage-hero/index.jsx @@ -1,35 +1,51 @@ -import s from './style.module.css' -import Button from '@hashicorp/react-button' +import Hero from '@hashicorp/react-hero' +import styles from './HomepageHero.module.css' -export default function HomepageHero({ title, description, links }) { +/** + * A simple Facade around our react-hero to make the interface a little more straightforward + * for the end-user updating this on our Homepage, while also allowing us to shim in some + * additional styles and encapsulate that logic. + */ +export default function HomepageHero({ + title, + description, + links, + uiVideo, + cliVideo, +}) { return ( -
-
- - Welcome to the INTERNAL BETA for - HashiCorp Boundary! This is a confidential internal only beta. No - details should be shared externally. - -

{title}

-
-

{description}

-
- {links.map((link, index) => { - const brand = index === 0 ? 'hashicorp' : 'neutral' - const variant = index === 0 ? 'primary' : 'secondary' - return ( -
-
-
+
+
) } diff --git a/website/components/homepage-hero/style.module.css b/website/components/homepage-hero/style.module.css deleted file mode 100644 index 3b1f45fe33..0000000000 --- a/website/components/homepage-hero/style.module.css +++ /dev/null @@ -1,62 +0,0 @@ -.root { - /* 100% height - nav - footer */ - min-height: calc(100vh - (64px + 77px)); - width: 100%; - padding: 150px 0; - background-repeat: no-repeat; - background-color: var(--gray-7); - background-image: url(/img/hero-pattern.svg); - background-size: contain; - - @media (max-width: 758px) { - padding: 64px 0; - } - - & .eyebrow { - font-family: var(--font-body); - text-align: center; - display: block; - font-weight: var(--font-weight-bold); - font-size: 1.1rem; - - & .red { - color: #ba2226; - } - } - - @media (max-width: 758px) { - background-image: url(/img/mobile-hero-pattern.svg); - } - - & h1 { - text-align: center; - white-space: pre-wrap; - } - - & p { - margin: 0 auto 0 auto; - text-align: center; - max-width: 40em; - } - - & :global(.g-grid-container) { - max-width: 700px; - } - - & .links { - display: flex; - flex-wrap: wrap; - justify-content: center; - margin-top: calc(32px - 8px); - margin-bottom: -8px; - - & a { - margin: 8px; - - &:global(.variant-primary) { - border-color: var(--boundary); - background-color: var(--boundary); - } - } - } -} diff --git a/website/components/how-it-works/feature/feature.module.css b/website/components/how-it-works/feature/feature.module.css new file mode 100644 index 0000000000..a3edf3dd76 --- /dev/null +++ b/website/components/how-it-works/feature/feature.module.css @@ -0,0 +1,9 @@ +.root { + & > h4 { + margin-top: 0; + } + + & > p { + margin-bottom: 32px; + } +} diff --git a/website/components/how-it-works/feature/index.jsx b/website/components/how-it-works/feature/index.jsx new file mode 100644 index 0000000000..43b0d195d5 --- /dev/null +++ b/website/components/how-it-works/feature/index.jsx @@ -0,0 +1,26 @@ +import LogoList from './logo-list' +import s from './feature.module.css' +import { useInView } from 'react-intersection-observer' +import { useState } from 'react' + +export default function Feature({ + title, + description, + logos, + onInViewStatusChanged, +}) { + const [ref, inView] = useInView({ threshold: 0.8 }) + const [inViewStatus, setInViewStatus] = useState(false) + if (inView != inViewStatus) { + setInViewStatus(inView) + onInViewStatusChanged(inView) + } + + return ( +
+

{title}

+

{description}

+ {logos ? : null} +
+ ) +} diff --git a/website/components/how-it-works/feature/logo-list/index.jsx b/website/components/how-it-works/feature/logo-list/index.jsx new file mode 100644 index 0000000000..5d354906c7 --- /dev/null +++ b/website/components/how-it-works/feature/logo-list/index.jsx @@ -0,0 +1,22 @@ +import s from './logo-list.module.css' + +export default function LogoList({ logos }) { + return ( +
+
+ {logos.map((logo, stableIdx) => ( +
+ {logo.alt} +
+ ))} +
+ +

+ Integrations coming soon +

+
+ ) +} diff --git a/website/components/how-it-works/feature/logo-list/logo-list.module.css b/website/components/how-it-works/feature/logo-list/logo-list.module.css new file mode 100644 index 0000000000..84ccc79961 --- /dev/null +++ b/website/components/how-it-works/feature/logo-list/logo-list.module.css @@ -0,0 +1,16 @@ +.logos { + display: flex; + flex-direction: row; + align-items: center; + max-width: 440px; + flex-wrap: wrap; + + & > div { + margin-right: 30px; + margin-bottom: 20px; + } +} + +.footerText { + color: var(--gray-5); +} diff --git a/website/components/how-it-works/how-boundary-works-diagram/how-boundary-works-diagram.module.css b/website/components/how-it-works/how-boundary-works-diagram/how-boundary-works-diagram.module.css new file mode 100644 index 0000000000..7357db0eb5 --- /dev/null +++ b/website/components/how-it-works/how-boundary-works-diagram/how-boundary-works-diagram.module.css @@ -0,0 +1,190 @@ +.root { + --transition-time: 0.7s; + + @media (--medium-up) { + position: sticky; + top: calc(50vh - (249px)); + } + + & > svg { + width: 100%; + } + + & .boundaryLetter, + & .spacer, + & .iconBg { + fill: var(--white); + } + + & .iconLines, + & .iconBg { + stroke-linecap: round; + stroke-width: 1.5px; + stroke-linejoin: round; + } + + & .boundaryFill, + & .arrowHead { + fill: #f04e54; + } + + & .arrowHead, + & .arrowSegment, + & .spacer { + transition: var(--transition-time) ease; + transition-property: opacity; + } + + & .arrowSegment { + stroke-width: 2px; + stroke: #f04e54; + stroke-miterlimit: 10; + stroke-linecap: round; + fill: none; + } + + & .dropShadow { + opacity: 0.08; + mix-blend-mode: multiply; + } + + & .iconLines { + stroke: var(--white); + fill: none; + transition: var(--transition-time) ease; + transition-property: stroke; + } + + & .subtitle { + fill: #b6b8c3; + } + + & .iconBg { + stroke: #e5e6ec; + stroke-width: 1px; + transition: var(--transition-time) ease; + transition-property: fill, stroke; + } + + & .authenticate { + & .iconBg { + fill: var(--white); + } + + & .iconLines { + stroke: #e5e6ec; + stroke-width: 1px; + } + } + + & .authorize { + & .spacer { + opacity: 0; + } + + & .iconBg { + fill: var(--black); + stroke: var(--black); + } + + & .iconLines { + stroke: #e5e6ec; + } + } + + & .access { + & .spacer { + opacity: 0; + } + + & .iconBg { + fill: var(--black); + stroke: var(--black); + } + + & .vaultIcon { + fill: var(--white); + } + } + + & .hostsAndServices { + opacity: 1; + transform: translate(0, 0); + transition: var(--transition-time) ease; + transition-property: opacity, transform; + + & .leadingLine { + fill: none; + stroke-linecap: round; + stroke-miterlimit: 10; + stroke-width: 1.5px; + stroke: var(--black); + } + } + + & .arrowOne .arrowHead, + & .arrowTwo .arrowHead { + @media (--small) { + opacity: 0; + } + } + + & .inactive { + & .arrowHead, + & .arrowSegment, + & .spacer { + @media (--medium-up) { + opacity: 0; + } + } + + &.authorize { + & .spacer { + @media (--medium-up) { + opacity: 1; + } + } + + & .iconBg { + @media (--medium-up) { + fill: var(--white); + stroke: #e5e6ec; + } + } + + & .iconLines { + @media (--medium-up) { + stroke: #b6b8c3; + } + } + } + + &.access { + & .spacer { + @media (--medium-up) { + opacity: 1; + } + } + + & .iconBg { + @media (--medium-up) { + fill: var(--white); + stroke: var(--white); + } + } + + & .vaultIcon { + @media (--medium-up) { + fill: var(--black); + } + } + } + + &.hostsAndServices { + @media (--medium-up) { + opacity: 0; + transform: translate(0, 10px); + } + } + } +} diff --git a/website/components/how-it-works/how-boundary-works-diagram/index.jsx b/website/components/how-it-works/how-boundary-works-diagram/index.jsx new file mode 100644 index 0000000000..2dbb1ef27e --- /dev/null +++ b/website/components/how-it-works/how-boundary-works-diagram/index.jsx @@ -0,0 +1,294 @@ +import s from './how-boundary-works-diagram.module.css' +import classnames from 'classnames' + +export default function HowBoundaryWorksDiagram({ activeExampleIndex }) { + return ( +
+ + + + + + {/* Hosts & Services */} + + + + + + + + + + + + + + + {/* Top-right arrow segment, always active */} + + + {/* Arrow (Example 1) */} + + + + + + + {/* Arrow (Example 2) */} + + + + + + + + {/* Arrow (Example 3) */} + + + + + + + + {/* Boundary logo */} + + + + + + + + {/* Users */} + + + + + + + + + + {/* Authenticate */} + + + + + + + + + + + + + + {/* Authorize */} + + + + + + + + + + + {/* Access */} + + + + + + + + + + + +
+ ) +} diff --git a/website/components/how-it-works/how-it-works.module.css b/website/components/how-it-works/how-it-works.module.css new file mode 100644 index 0000000000..15dfb812d8 --- /dev/null +++ b/website/components/how-it-works/how-it-works.module.css @@ -0,0 +1,87 @@ +.root { + padding: 88px 0; + + & .headerWrapper { + & h2 { + text-align: center; + margin-top: 0; + margin-bottom: 32px; + @media (--small) { + margin-bottom: 0; + } + } + + & p { + max-width: 818px; + text-align: center; + margin-left: auto; + margin-right: auto; + } + } +} + +.contentContainer { + display: flex; + justify-content: space-between; + position: relative; + + @media (--small) { + flex-direction: column; + } + + & > ul { + max-width: 470px; + margin-left: 128px; + padding: 0; + + @media (width < 1120px) { + margin-left: 64px; + } + + @media (width < 1024px) { + margin-left: 40px; + } + + @media (--small) { + margin-left: 0; + } + } +} + +.diagram { + width: 591px; + max-width: 100%; +} + +.features { + & > li { + list-style: none; + + & > div { + list-style: none; + padding-bottom: 285px; + + @media (--small) { + padding-top: 0; + margin-bottom: 0; + padding-bottom: 100px; + } + } + + &:last-child { + & > div { + padding-bottom: 355px; + margin-bottom: -200px; + } + } + + &:first-child { + & > div { + padding-top: 108px; + @media (width < 1120px) { + padding-top: 64px; + } + } + } + } +} diff --git a/website/components/how-it-works/index.jsx b/website/components/how-it-works/index.jsx new file mode 100644 index 0000000000..8ca3c736bb --- /dev/null +++ b/website/components/how-it-works/index.jsx @@ -0,0 +1,50 @@ +import s from './how-it-works.module.css' +import classNames from 'classnames' +import HowBoundaryWorksDiagram from './how-boundary-works-diagram' +import Feature from './feature' +import { useState } from 'react' + +export default function HowItWorks({ title, description, features }) { + const [activeExampleIndex, setActiveExampleIndex] = useState(0) + const [viewportStatus, setViewportStatus] = useState( + new Array(features.length).fill(false) + ) + + return ( +
+
+

{title}

+

{description}

+
+
+
+ +
+
    + {features.map((feature, index) => ( +
  • + { + const newStatusArray = [...viewportStatus] + newStatusArray[index] = state + setViewportStatus(newStatusArray) + // Calculate the first element in focus, set that as + // our new activeExampleIndex. If it's been updated + // notify the subscriber. + const newExampleIndex = newStatusArray.lastIndexOf(true) + if ( + activeExampleIndex != newExampleIndex && + newExampleIndex != -1 + ) { + setActiveExampleIndex(newExampleIndex) + } + }} + /> +
  • + ))} +
+
+
+ ) +} diff --git a/website/components/section-break-cta/index.jsx b/website/components/section-break-cta/index.jsx new file mode 100644 index 0000000000..8402b0f21b --- /dev/null +++ b/website/components/section-break-cta/index.jsx @@ -0,0 +1,22 @@ +import styles from './section-break-cta.module.css' +import Button from '@hashicorp/react-button' + +export default function SectionBreakCta({ heading, content, link }) { + return ( +
+
+

{heading}

+

{content}

+
+ ) +} diff --git a/website/components/section-break-cta/section-break-cta.module.css b/website/components/section-break-cta/section-break-cta.module.css new file mode 100644 index 0000000000..3e1e842851 --- /dev/null +++ b/website/components/section-break-cta/section-break-cta.module.css @@ -0,0 +1,31 @@ +.sectionBreakCta { + padding: 60px 30px; + max-width: 800px; + display: flex; + flex-direction: column; + text-align: center; + box-shadow: 0 8px 12px rgba(37, 38, 45, 0.08); + margin: 0 auto; + background-color: var(--white); + + @media (width <= 880px) { + margin: 0 40px; + } + + & > h4 { + margin-top: 0; + margin-bottom: 8px; + } + + & > p { + margin-top: 0; + margin-bottom: 40px; + } + + & hr { + width: 64px; + background-color: var(--red); + margin-top: 0; + margin-bottom: 24px; + } +} diff --git a/website/components/signin-error-page/index.jsx b/website/components/signin-error-page/index.jsx deleted file mode 100644 index 14d93965d3..0000000000 --- a/website/components/signin-error-page/index.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import styles from './signin-error.module.css' -import Button from '@hashicorp/react-button' -import { useAuthProviders } from 'components/auth-gate' - -export default function SigninErrorPage() { - const authProviders = useAuthProviders() - return ( -
-

- Sorry!
- It seems you do not have appropriate permissions to view this content. -

- {authProviders && ( -
-
-

{`If you'd like to try again with another Okta account, please log out of Okta`}

- {process.env.NEXT_PUBLIC_OKTA_DOMAIN && ( -
-
-

{`If you'd like to try again with another Auth0 account, please go back`}

-
- ) -
- )} -
- ) -} diff --git a/website/components/signin-error-page/signin-error.module.css b/website/components/signin-error-page/signin-error.module.css deleted file mode 100644 index 437ac92577..0000000000 --- a/website/components/signin-error-page/signin-error.module.css +++ /dev/null @@ -1,29 +0,0 @@ -.signinErrorWrapper { - display: flex; - justify-content: center; - align-items: center; - text-align: center; - flex-direction: column; - width: 100vw; - height: 100vh; -} - -.logoutCard { - margin-top: 3rem; - display: flex; - justify-content: center; - flex-wrap: wrap; - align-items: center; - text-align: center; - padding: 2rem; - border: 1px solid var(--gray-6); -} - -.authProviderGoBack { - display: flex; - flex: 0 1 600px; - justify-content: center; - align-items: center; - text-align: center; - flex-direction: column; -} diff --git a/website/components/subnav/index.jsx b/website/components/subnav/index.jsx index 6d6c14cf4b..b8d2dd4f86 100644 --- a/website/components/subnav/index.jsx +++ b/website/components/subnav/index.jsx @@ -19,7 +19,7 @@ export default function ProductSubnav() { }, { text: 'Download', - url: 'https://github.com/hashicorp/boundary/releases', + url: '/downloads', }, ]} currentPath={router.asPath} diff --git a/website/data/alert-banner.js b/website/data/alert-banner.js new file mode 100644 index 0000000000..8704f4db0f --- /dev/null +++ b/website/data/alert-banner.js @@ -0,0 +1,7 @@ +export const ALERT_BANNER_ACTIVE = false + +export default { + tag: 'ANNOUNCING', + text: 'Some details about an announcement here', + url: 'https://hashicorp.com', +} diff --git a/website/data/downloads.js b/website/data/downloads.js new file mode 100644 index 0000000000..614a54c4b1 --- /dev/null +++ b/website/data/downloads.js @@ -0,0 +1,66 @@ +export const packageManagers = { + homebrew: { + label: 'Homebrew', + url: '', + commands: ['brew tap hashicorp/tap', 'brew install hashicorp/tap/boundary'], + }, + ubuntu: { + label: 'Ubuntu/Debian', + commands: [ + 'curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -', + 'sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"', + 'sudo apt-get update && sudo apt-get install boundary', + ], + }, + centos: { + label: 'CentOS/RHEL', + commands: [ + 'sudo yum install -y yum-utils', + 'sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo', + 'sudo yum -y install boundary', + ], + }, + fedora: { + label: 'Fedora', + commands: [ + 'sudo dnf install -y dnf-plugins-core', + 'sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo', + 'sudo dnf -y install boundary', + ], + }, + amazonLinux: { + label: 'Amazon Linux', + commands: [ + 'sudo yum install -y yum-utils', + 'sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo', + 'sudo yum -y install boundary', + ], + }, +} + +export const packageManagersByOs = { + darwin: packageManagers.homebrew, + linux: [ + packageManagers.ubuntu, + packageManagers.centos, + packageManagers.fedora, + packageManagers.amazonLinux, + ], +} + +export const getStartedLinks = [ + { + label: 'Install Boundary', + href: + 'https://learn.hashicorp.com/tutorials/boundary/getting-started-install', + }, + { + label: 'Introduction to Boundary', + href: + 'https://learn.hashicorp.com/tutorials/boundary/getting-started-intro', + }, + { + label: 'Start a Development Environment', + href: 'https://learn.hashicorp.com/tutorials/boundary/getting-started-dev', + }, +] diff --git a/website/data/navigation.js b/website/data/navigation.js index 1eb1a6e8dd..ee5e1782be 100644 --- a/website/data/navigation.js +++ b/website/data/navigation.js @@ -1,10 +1,28 @@ export default [ + { + text: 'Overview', + url: '/', + type: 'inbound', + }, + 'divider', + { + text: 'Tutorials', + url: 'https://learn.hashicorp.com/boundary', + type: 'inbound', + }, { text: 'Docs', - url: '/docs/getting-started', + url: '/docs', + type: 'inbound', }, { text: 'API', url: '/api-docs', + type: 'inbound', + }, + { + text: 'Community', + url: '/community', + type: 'inbound', }, ] diff --git a/website/lib/next-auth-utils/config.js b/website/lib/next-auth-utils/config.js deleted file mode 100644 index e56a10d2ef..0000000000 --- a/website/lib/next-auth-utils/config.js +++ /dev/null @@ -1,19 +0,0 @@ -import NextAuth from 'next-auth' -import NextAuthProviders from 'next-auth/providers' - -function formatProviderConfig(ap) { - const apName = ap.toUpperCase() - const config = { - clientId: process.env[`${apName}_CLIENT_ID`], - clientSecret: process.env[`${apName}_CLIENT_SECRET`], - domain: process.env[`${apName}_DOMAIN`], - } - return NextAuthProviders[ap](config) -} - -export default (req, res) => ({ environments, pages }) => - NextAuth(req, res, { - providers: - environments[process.env.HASHI_ENV]?.map(formatProviderConfig) || [], - pages, - }) diff --git a/website/next.config.js b/website/next.config.js index 44d063af40..60832a4c05 100644 --- a/website/next.config.js +++ b/website/next.config.js @@ -5,25 +5,21 @@ const redirects = require('./redirects.js') // log out our primary environment variables for clarity in build logs console.log(`HASHI_ENV: ${process.env.HASHI_ENV}`) console.log(`NODE_ENV: ${process.env.NODE_ENV}`) -console.log(`NEXTAUTH_URL: ${process.env.NEXTAUTH_URL}`) -console.log(`OKTA_DOMAIN: ${process.env.OKTA_DOMAIN}`) -console.log(`AUTH0_DOMAIN: ${process.env.AUTH0_DOMAIN}`) module.exports = withHashicorp({ defaultLayout: true, - transpileModules: ['is-absolute-url', '@hashicorp/react-mega-nav'], + transpileModules: ['is-absolute-url', '@hashicorp/react-.*'], mdx: { resolveIncludes: path.join(__dirname, 'pages/partials') }, })({ async redirects() { return await redirects }, + svgo: { plugins: [{ removeViewBox: false }] }, experimental: { modern: true }, env: { HASHI_ENV: process.env.HASHI_ENV || 'development', SEGMENT_WRITE_KEY: 'JkNZiSgwVRAAFrkqqdHLxf0xfcZuhYYc', BUGSNAG_CLIENT_KEY: '635db43e199cb02419379291d573205b', BUGSNAG_SERVER_KEY: 'f85278a46e1b5565a9e91974cdc2843b', - NEXT_PUBLIC_OKTA_DOMAIN: process.env.OKTA_DOMAIN, - NEXT_PUBLIC_AUTH0_DOMAIN: process.env.AUTH0_DOMAIN, }, }) diff --git a/website/package-lock.json b/website/package-lock.json index 679e781574..57e0470869 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1429,6 +1429,16 @@ "resolved": "https://registry.npmjs.org/@hashicorp/js-utils/-/js-utils-1.0.10.tgz", "integrity": "sha512-59AS4kK3EURCTU9ibJmk8MVT8i3qc5tEHv985dxECZrWTL4+3kKr45u/13OPpcRlpUSIKeWEsN9FL1f5/ztHww==" }, + "@hashicorp/localstorage-polyfill": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@hashicorp/localstorage-polyfill/-/localstorage-polyfill-1.0.14.tgz", + "integrity": "sha512-xyrD15VTKcmOQhMsZbWIoi1REVAHspBfYY3qxuI4Rxsx7S7mcsOjf7lxvlHfVzivkrBfpYfUP54f7Yji/FUv8Q==" + }, + "@hashicorp/mktg-assets": { + "version": "1.0.0-alpha.20", + "resolved": "https://registry.npmjs.org/@hashicorp/mktg-assets/-/mktg-assets-1.0.0-alpha.20.tgz", + "integrity": "sha512-ajCBCcxDpiwfxsh8wMGHu9GuKcNRmuiFyfgUiRXipvLqHFnNLZwZfBwaFxgCT8EK1jxdkfUWJTFkPY3rXmIo2A==" + }, "@hashicorp/nextjs-scripts": { "version": "13.0.0-canary.1", "resolved": "https://registry.npmjs.org/@hashicorp/nextjs-scripts/-/nextjs-scripts-13.0.0-canary.1.tgz", @@ -1482,25 +1492,60 @@ "stylelint-use-nesting": "^3.0.0", "stylelint-value-no-unknown-custom-properties": "^3.0.0", "typescript": "4.0.2" - } - }, - "@hashicorp/react-button": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.2.6.tgz", - "integrity": "sha512-pFpI7PRDA4fi4BBWIBUDn4Ye6OThpuJTWG2fZHblJD8sw7gZfNNtAoadmQjJuMjJV7/T8OemL0k2iW7smpl08A==", - "requires": { - "@hashicorp/react-global-styles": "^4.5.0", - "@hashicorp/react-inline-svg": "^1.0.2", - "slugify": "^1.3.6" }, "dependencies": { "@hashicorp/react-inline-svg": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz", "integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw==" + }, + "@hashicorp/react-tabs": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-0.4.2.tgz", + "integrity": "sha512-sPW1zBdlAbDU7uK57U1/TUKhQbkqcLrxO6mwQLfybuEI1pRmljGK1h9hTXOfHRy9bBxGQeJ1FtmbqcvKspP/Kg==", + "requires": { + "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-inline-svg": "^1.0.2", + "@tippy.js/react": "^3.1.1" + } + } + } + }, + "@hashicorp/react-alert": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-2.0.3.tgz", + "integrity": "sha512-03qWTvECGrG2Z0cm/w71J/KmSBJrUem1QTdRuGFHLTPGgAdIgI90xWpYWmUjGw7gXrxJ/q1yY2JwbfpHwRrpPg==" + }, + "@hashicorp/react-alert-banner": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert-banner/-/react-alert-banner-4.1.0.tgz", + "integrity": "sha512-PyUZwKqOqN5GuB14dMxgYMq5HMTtm7y2fArsjhOnS8TK+OsjT6hTwKZSEYazCOMXYW8ps5x5MV1RFExwYrwQvQ==", + "requires": { + "js-cookie": "2.2.0", + "slugify": "1.3.4" + }, + "dependencies": { + "js-cookie": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", + "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=" + }, + "slugify": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz", + "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw==" } } }, + "@hashicorp/react-button": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-3.0.1.tgz", + "integrity": "sha512-kuG6migHYysTH9GZlA9sHFrlgcJrnB46i1UjXUlZ9duVT3P4JzjM57K1sU+LNXlr3qDUENkcABqFhluEGg8TXg==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.0", + "slugify": "1.3.6" + } + }, "@hashicorp/react-consent-manager": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-2.1.6.tgz", @@ -1512,20 +1557,31 @@ "js-cookie": "^2.2.0", "object-assign": "^4.1.1", "unfetch": "^4.1.0" + }, + "dependencies": { + "@hashicorp/react-button": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.3.0.tgz", + "integrity": "sha512-1C6V8OxadkdDAkwgItDfNxx7ns9EB6znK39V94RBiPvElmsNLCEG7zujcQX71V2n+HMSv1JPgDvXp4WLICzK+Q==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.0", + "slugify": "^1.3.6" + } + } } }, "@hashicorp/react-content": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-4.0.2.tgz", - "integrity": "sha512-wVrjV2yad+Y41drxsXeDGkfRXNbhQiup7T5yt9tqoF94d1mBgSDD005M9+DOOpAaJL+4WdCdwmwGoBCHSSF91g==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-5.1.0.tgz", + "integrity": "sha512-9odUq0SSxvQbCTGnqKQe9GWenBee4Wnp3RwjDNHLKZa/NULRD4PqkIskeIJbVqTvNqqUuR5xfq/VBGXMYyBRnw==" }, "@hashicorp/react-docs-page": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-5.0.3.tgz", - "integrity": "sha512-5yginb72ZWYjbFOAcOv7adJps/UiWws/H/tRdJIx2MMhIfiYjjjybZXe9TOmhS1+T7xXokvPMleJ2JgVN1NU2Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-6.2.0.tgz", + "integrity": "sha512-tQAaukpfF3wZKNoogVTlSVPvEUyRfbRNv6RDIavzV6nF3KwmPndbvtqEsZD4NrHQ1ZpZkXnLvHlR+fcPgvIIDA==", "requires": { - "@hashicorp/react-content": "^4.0.2", - "@hashicorp/react-docs-sidenav": "^4.0.1", + "@hashicorp/react-content": "^5.1.0", + "@hashicorp/react-docs-sidenav": "^5.1.0", "@hashicorp/react-head": "^1.1.3", "@hashicorp/react-inline-svg": "^1.0.2" }, @@ -1538,12 +1594,12 @@ } }, "@hashicorp/react-docs-sidenav": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-4.0.1.tgz", - "integrity": "sha512-a8iv+H+kt56dKLhqcMh+RWnzOp9Lo21h4hOHtFPRQWCu7x0PIxKSAKlDJxLr5k3mYEYo66jofItqvCBvWHc3tw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-5.1.0.tgz", + "integrity": "sha512-JnIV2tDLxlTJtrwFMAoKKloIJi/xclNSr37sTZTTAdiHM/m0ko+TcsB7gb1ISZlRoIpMOvM6YQHn5M+Niii4bA==", "requires": { "@hashicorp/react-link-wrap": "^0.0.3", - "fuzzysearch": "^1.0.3" + "fuzzysearch": "1.0.3" } }, "@hashicorp/react-enterprise-alert": { @@ -1559,17 +1615,91 @@ "resolved": "https://registry.npmjs.org/@hashicorp/react-global-styles/-/react-global-styles-4.5.0.tgz", "integrity": "sha512-CBLEL2PnjMHaT2XT7rLs/QvkamcIKD3ckvUWcCf9mSiYHTuTNbb8gJpQvVSEenN+ISFxAt1FVRQ7aJnnBYjVWg==" }, + "@hashicorp/react-hashi-stack-menu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-hashi-stack-menu/-/react-hashi-stack-menu-1.0.3.tgz", + "integrity": "sha512-bzO6fBodh61OrunYIMQKfGSJQUKIq70TQ74dt2trBPjBsgURHMCIkiMmKffjuSdJjhCxx2nb+y0/B/PwxxHxmg==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.2", + "slugify": "1.3.4" + }, + "dependencies": { + "@hashicorp/react-inline-svg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz", + "integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw==" + }, + "slugify": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.4.tgz", + "integrity": "sha512-KP0ZYk5hJNBS8/eIjGkFDCzGQIoZ1mnfQRYS5WM3273z+fxGWXeN0fkwf2ebEweydv9tioZIHGZKoF21U07/nw==" + } + } + }, "@hashicorp/react-head": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@hashicorp/react-head/-/react-head-1.1.3.tgz", "integrity": "sha512-66Iz5cmHLEh7m0mWCbCiG3t+LM6RJaX7M72FQDyWWbUHm24WheDTpII4KYTpLgK9HM+UlaHW2pqFAwBzfAboCA==" }, + "@hashicorp/react-hero": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@hashicorp/react-hero/-/react-hero-3.1.9.tgz", + "integrity": "sha512-SbIDp5GUc5B5mYa6wj9JZJDaQcInEcumb2HA2eq3jDaoW3hmwWGyr49S1RNIVukEUze8TF+bHvSDem8B5MLuxw==", + "requires": { + "@hashicorp/js-utils": "^1.0.8-alpha.0", + "@hashicorp/localstorage-polyfill": "^1.0.14", + "@hashicorp/react-alert": "^2.0.3", + "@hashicorp/react-button": "^2.2.8", + "@hashicorp/react-image": "^2.0.3", + "@hashicorp/react-text-input": "^2.0.3", + "formik": "^1.5.8", + "marked": "^0.7.0", + "promise-polyfill": "^8.1.0", + "query-string": "^5.1.1" + }, + "dependencies": { + "@hashicorp/js-utils": { + "version": "1.0.8-alpha.0", + "resolved": "https://registry.npmjs.org/@hashicorp/js-utils/-/js-utils-1.0.8-alpha.0.tgz", + "integrity": "sha512-Sa51DV8GPlvmrcRP9t7HlOysqEZeZ4xrCC2Jga7olONKaDfw+Jip1+ihJFeBszMaa9nvu2uB0Kxpxn0W9w9s2w==" + }, + "@hashicorp/react-button": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.2.8.tgz", + "integrity": "sha512-dEn1L/q4OEB35ttc/MmfewXm/SWSD8S3lVTum67GHoaQdxxIU5DFI1GzE+7soQJuIkAqoqMk6s5BvBUW966ksQ==", + "requires": { + "@hashicorp/react-global-styles": "^4.6.1", + "@hashicorp/react-inline-svg": "^1.0.2", + "slugify": "^1.3.6" + } + }, + "@hashicorp/react-global-styles": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-global-styles/-/react-global-styles-4.6.1.tgz", + "integrity": "sha512-a2eWgjLwGAC2LjUHE7Xt6sRGGjyTWfrc4N+qVxsyZw4eE0EiNhMIKDYHWjmtb+tGh8r8j+ca3tSjsuOUePVPUw==" + }, + "@hashicorp/react-image": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.4.tgz", + "integrity": "sha512-rJCx74lxQE9l9LpFhlxSjQ0yjrzjce5uzEGmMgPvMsNiQtgetjNyeg1p5N8k7xRGYXNapt8uY2kZiE69OyL9cQ==", + "requires": { + "object-assign": "^4.1.1", + "query-string": "5.1.1" + } + }, + "@hashicorp/react-inline-svg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz", + "integrity": "sha512-AAFnBslSTgnEr++dTbMn3sybAqvn7myIj88ijGigF6u11eSRiV64zqEcyYLQKWTV6dF4AvYoxiYC6GSOgiM0Yw==" + } + } + }, "@hashicorp/react-image": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.4.tgz", - "integrity": "sha512-rJCx74lxQE9l9LpFhlxSjQ0yjrzjce5uzEGmMgPvMsNiQtgetjNyeg1p5N8k7xRGYXNapt8uY2kZiE69OyL9cQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-3.0.1.tgz", + "integrity": "sha512-6NXEBKWmKdmBeN+f9jy8J6k62mCDNrPxsH2glYqyDL8nWhvHGsoB9ODtPWjoNky1AM9KKS3E5nd1lFnQclp+Ew==", "requires": { - "object-assign": "^4.1.1", + "object-assign": "4.1.1", "query-string": "5.1.1" } }, @@ -1586,20 +1716,43 @@ "is-absolute-url": "^3.0.3" } }, - "@hashicorp/react-mega-nav": { - "version": "4.0.1-2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-mega-nav/-/react-mega-nav-4.0.1-2.tgz", - "integrity": "sha512-uDw+vk6YBDSR9sZoZa3oYd0N15UzYpuGLV1/2lofM6O4/IhEkWlGlsyWpzWABV+pcHBB4KOqnCUxpvmS9Ar61g==", - "requires": { - "@hashicorp/react-inline-svg": "^1.0.0" - } - }, "@hashicorp/react-product-downloader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloader/-/react-product-downloader-4.1.3.tgz", "integrity": "sha512-r8yQV0awvxsa382aDhXcEqsyrRy9ThR84TWXISWj7gYENmxCV5bzHvle/Pqpm7BpRhpK7O9mUwoKMo4jAid1gg==", "requires": { "@hashicorp/react-button": "^2.2.6" + }, + "dependencies": { + "@hashicorp/react-button": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.3.0.tgz", + "integrity": "sha512-1C6V8OxadkdDAkwgItDfNxx7ns9EB6znK39V94RBiPvElmsNLCEG7zujcQX71V2n+HMSv1JPgDvXp4WLICzK+Q==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.0", + "slugify": "^1.3.6" + } + } + } + }, + "@hashicorp/react-product-features-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-product-features-list/-/react-product-features-list-2.1.0.tgz", + "integrity": "sha512-M5KSuxswCC1kqOGksX1OtCfmAed+ArbLnEdaFkFOyTI8ldnSCAO9iaME0TwFDP7du2vlWay4EDEhib/L51zxMg==", + "requires": { + "@hashicorp/react-button": "^3.0.1", + "@hashicorp/react-image": "^2.0.3" + }, + "dependencies": { + "@hashicorp/react-image": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.4.tgz", + "integrity": "sha512-rJCx74lxQE9l9LpFhlxSjQ0yjrzjce5uzEGmMgPvMsNiQtgetjNyeg1p5N8k7xRGYXNapt8uY2kZiE69OyL9cQ==", + "requires": { + "object-assign": "^4.1.1", + "query-string": "5.1.1" + } + } } }, "@hashicorp/react-section-header": { @@ -1623,6 +1776,15 @@ "isomorphic-unfetch": "^3.0.0" }, "dependencies": { + "@hashicorp/react-button": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-2.3.0.tgz", + "integrity": "sha512-1C6V8OxadkdDAkwgItDfNxx7ns9EB6znK39V94RBiPvElmsNLCEG7zujcQX71V2n+HMSv1JPgDvXp4WLICzK+Q==", + "requires": { + "@hashicorp/react-inline-svg": "^1.0.0", + "slugify": "^1.3.6" + } + }, "@hashicorp/react-inline-svg": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-1.0.2.tgz", @@ -1636,11 +1798,11 @@ } }, "@hashicorp/react-tabs": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-0.4.2.tgz", - "integrity": "sha512-sPW1zBdlAbDU7uK57U1/TUKhQbkqcLrxO6mwQLfybuEI1pRmljGK1h9hTXOfHRy9bBxGQeJ1FtmbqcvKspP/Kg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-0.6.1.tgz", + "integrity": "sha512-8WvgqkrfIHnD7Xj6ucjxs8p2cpb2moR+xl//5Jarjcv2BgafvWNluM00HtusvgfOwNpB7xNZunBlajHXOMe58g==", "requires": { - "@hashicorp/react-global-styles": "^4.4.2", + "@hashicorp/react-global-styles": "^4.5.0", "@hashicorp/react-inline-svg": "^1.0.2", "@tippy.js/react": "^3.1.1" }, @@ -1652,11 +1814,39 @@ } } }, + "@hashicorp/react-text-input": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-text-input/-/react-text-input-2.0.3.tgz", + "integrity": "sha512-Vd4rEGSwOFl6lkeBlaPNWn8KePDdV+2uIFDYKUDOVVLhi/6GetUpxJEvxeo1S2MymTjlzQsAh6IXrZnQy+FT3Q==", + "requires": { + "uuid": "^3.3.2" + } + }, "@hashicorp/react-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@hashicorp/react-toggle/-/react-toggle-1.0.3.tgz", "integrity": "sha512-8RImlv34csyEh9hbPPZxFOHKtoHGvZJj8yQshafeggm8AOM8C5BOnx9nz/l6OBUOngn/2wOPulxOVB8AtcvaKA==" }, + "@hashicorp/react-use-cases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-use-cases/-/react-use-cases-2.0.1.tgz", + "integrity": "sha512-w+uRvOmqZxwXY/46dan97lBfYKh4Lf2ESbb8HmsBqIyu4KvYQ6P6Vuyu7VDDr/ZJ8iefccWiO/o4VAvR1OsgEQ==", + "requires": { + "@hashicorp/react-image": "^2.0.3", + "marked": "^0.7.0" + }, + "dependencies": { + "@hashicorp/react-image": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.4.tgz", + "integrity": "sha512-rJCx74lxQE9l9LpFhlxSjQ0yjrzjce5uzEGmMgPvMsNiQtgetjNyeg1p5N8k7xRGYXNapt8uY2kZiE69OyL9cQ==", + "requires": { + "object-assign": "^4.1.1", + "query-string": "5.1.1" + } + } + } + }, "@hashicorp/react-vertical-text-block-list": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@hashicorp/react-vertical-text-block-list/-/react-vertical-text-block-list-2.0.3.tgz", @@ -1665,6 +1855,17 @@ "@hashicorp/react-image": "^2.0.3", "@hashicorp/react-link-wrap": "^0.0.3", "marked": "^0.7.0" + }, + "dependencies": { + "@hashicorp/react-image": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-image/-/react-image-2.0.4.tgz", + "integrity": "sha512-rJCx74lxQE9l9LpFhlxSjQ0yjrzjce5uzEGmMgPvMsNiQtgetjNyeg1p5N8k7xRGYXNapt8uY2kZiE69OyL9cQ==", + "requires": { + "object-assign": "^4.1.1", + "query-string": "5.1.1" + } + } } }, "@hashicorp/remark-plugins": { @@ -1912,11 +2113,6 @@ "fastq": "^1.6.0" } }, - "@panva/asn1.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", - "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==" - }, "@segment/in-eu": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@segment/in-eu/-/in-eu-0.2.1.tgz", @@ -2535,11 +2731,6 @@ "color-convert": "^1.9.0" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -2678,11 +2869,6 @@ } } }, - "app-root-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", - "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -2795,6 +2981,11 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -3642,11 +3833,6 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -4158,156 +4344,6 @@ "restore-cursor": "^3.1.0" } }, - "cli-highlight": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz", - "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==", - "requires": { - "chalk": "^3.0.0", - "highlight.js": "^9.6.0", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^5.1.1", - "yargs": "^15.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - } - } - }, "cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", @@ -4392,41 +4428,6 @@ "tiny-emitter": "^2.0.0" } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -4655,6 +4656,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, "core-js-compat": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", @@ -4747,6 +4753,15 @@ "sha.js": "^2.4.8" } }, + "create-react-context": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz", + "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==", + "requires": { + "fbjs": "^0.8.0", + "gud": "^1.0.0" + } + }, "cross-fetch": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz", @@ -4783,11 +4798,6 @@ "randomfill": "^1.0.3" } }, - "crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", - "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" - }, "css": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", @@ -5192,6 +5202,11 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5360,11 +5375,6 @@ "tslib": "^1.10.0" } }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, "download": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", @@ -5416,14 +5426,6 @@ "stream-shift": "^1.0.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5478,6 +5480,24 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6201,6 +6221,20 @@ "reusify": "^1.0.4" } }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -6214,11 +6248,6 @@ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -6402,6 +6431,34 @@ "mime-types": "^2.1.12" } }, + "formik": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/formik/-/formik-1.5.8.tgz", + "integrity": "sha512-fNvPe+ddbh+7xiByT25vuso2p2hseG/Yvuj211fV1DbCjljUEG9OpgRpcb7g7O3kxHX/q31cbZDzMxJXPWSNwA==", + "requires": { + "create-react-context": "^0.2.2", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.14", + "lodash-es": "^4.17.14", + "prop-types": "^15.6.1", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.9.3" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -6494,11 +6551,6 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, - "futoin-hkdf": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.3.2.tgz", - "integrity": "sha512-3EVi3ETTyJg5PSXlxLCaUVVn0pSbDf62L3Gwxne7Uq+d8adOSNWQAad4gg7WToHkcgnCJb3Wlb1P8r4Evj4GPw==" - }, "fuzzysearch": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz", @@ -6509,11 +6561,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -6723,6 +6770,11 @@ "strip-bom-string": "^1.0.0" } }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, "gzip-size": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", @@ -6984,11 +7036,6 @@ "tslib": "^1.10.0" } }, - "highlight.js": { - "version": "9.18.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz", - "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==" - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6999,6 +7046,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -7881,6 +7936,31 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, "isomorphic-unfetch": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.0.0.tgz", @@ -7941,14 +8021,6 @@ } } }, - "jose": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.0.tgz", - "integrity": "sha512-JmfDRzt/HSj8ipd9TsDtEHoLUnLYavG+7e8F6s1mx2jfVSfXOTaFQsJUydbjJpTnTDHP1+yKL9Ke7ktS/a0Eiw==", - "requires": { - "@panva/asn1.js": "^1.0.0" - } - }, "js-cookie": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", @@ -8015,35 +8087,6 @@ "universalify": "^1.0.0" } }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "jstz": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/jstz/-/jstz-2.1.1.tgz", @@ -8058,30 +8101,6 @@ "object.assign": "^4.1.0" } }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, "katex": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz", @@ -8231,6 +8250,11 @@ } } }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -8267,46 +8291,16 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -8600,6 +8594,11 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memoize-one": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -8860,16 +8859,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "nan": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", @@ -9121,25 +9110,6 @@ } } }, - "next-auth": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-3.1.0.tgz", - "integrity": "sha512-e+s6hjPZpqbnjla9WOi0VuLkDlLMU3cJmS0jTBBvsvSGsOPvMbaCCAMBEoNV3nWSgPrq6zLG2dixmCCxzG7fXA==", - "requires": { - "crypto-js": "^4.0.0", - "futoin-hkdf": "^1.3.2", - "jose": "^1.27.2", - "jsonwebtoken": "^8.5.1", - "jwt-decode": "^2.2.0", - "nodemailer": "^6.4.6", - "oauth": "^0.9.15", - "preact": "^10.4.1", - "preact-render-to-string": "^5.1.7", - "querystring": "^0.2.0", - "require_optional": "^1.0.1", - "typeorm": "^0.2.24" - } - }, "next-mdx-remote": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-1.0.0.tgz", @@ -9308,11 +9278,6 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==" }, - "nodemailer": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.11.tgz", - "integrity": "sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ==" - }, "normalize-html-whitespace": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", @@ -9423,11 +9388,6 @@ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" }, - "oauth": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9765,11 +9725,6 @@ "callsites": "^3.0.0" } }, - "parent-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", - "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" - }, "parse-asn1": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", @@ -9803,19 +9758,6 @@ "error-ex": "^1.2.0" } }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz", - "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==", - "requires": { - "parse5": "^5.1.1" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -10616,19 +10558,6 @@ "uniq": "^1.0.1" } }, - "preact": { - "version": "10.5.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.2.tgz", - "integrity": "sha512-4y2Q6kMiJtMONMJR7z+o8P5tGkMzVItyy77AXGrUdusv+dk4jwoS3KrpCBkFloY2xsScRJYwZQZrx89tTjDkOw==" - }, - "preact-render-to-string": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.1.10.tgz", - "integrity": "sha512-40svy7NDe5Qe0ymdsIC11f0hZb05MeTSUqqIaWJ5DEFCh/sF86KcpRW0kN/ymGYDVVUCfv9qFrVuLCXR7aQxgQ==", - "requires": { - "pretty-format": "^3.8.0" - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10653,11 +10582,6 @@ "fast-diff": "^1.1.2" } }, - "pretty-format": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", - "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=" - }, "prismjs": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.21.0.tgz", @@ -10681,11 +10605,24 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -10892,11 +10829,33 @@ } } }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-intersection-observer": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-8.29.0.tgz", + "integrity": "sha512-Bqp7GBa5Aieo8C33Bz0e5WuUnFUKN3WOayKMT/2f0ujfW+YpzOEdNE4MK/TnaHp+cisK7n1At3qcFaNPfhHbqw==" + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-player": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/react-player/-/react-player-2.6.2.tgz", + "integrity": "sha512-Wi9DynNSVgddKxac5OzsH0Upk6VRYssvLLGgCRw6vsjzqMX6S5N26WDRNYnLaHykxFNtpPSDc53fXDe52hMaCg==", + "requires": { + "deepmerge": "^4.0.0", + "load-script": "^1.0.0", + "memoize-one": "^5.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.0.1" + } + }, "react-refresh": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", @@ -10969,11 +10928,6 @@ "strip-indent": "^1.0.1" } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, "refractor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.1.0.tgz", @@ -11327,37 +11281,6 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -11749,11 +11672,6 @@ "send": "0.17.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -11891,9 +11809,9 @@ } }, "slugify": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.5.tgz", - "integrity": "sha512-WpECLAgYaxHoEAJ8Q1Lo8HOs1ngn7LN7QjXgOLbmmfkcWvosyk4ZTXkTzKyhngK640USTZUlgoQJfED1kz5fnQ==" + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.6.tgz", + "integrity": "sha512-wA9XS475ZmGNlEnYYLPReSfuz/c3VQsEMoU43mi6OnKMCdbnFXd4/Yg7J0lBv8jkPolacMpOrWEaoYxuE1+hoQ==" }, "snake-case": { "version": "3.0.3", @@ -13243,22 +13161,6 @@ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -13292,6 +13194,11 @@ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "optional": true }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tippy.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-5.2.1.tgz", @@ -13520,50 +13427,16 @@ "is-typedarray": "^1.0.0" } }, - "typeorm": { - "version": "0.2.26", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.26.tgz", - "integrity": "sha512-sbKxK6K9sXZPCVF0weEb74UA/z1UW0sRWfI7EoOOtQaRZaLvSEwtgHPqle9t8asxEtD+gzkUdd+NqF7yH7HtIQ==", - "requires": { - "app-root-path": "^3.0.0", - "buffer": "^5.1.0", - "chalk": "^2.4.2", - "cli-highlight": "^2.0.0", - "debug": "^4.1.1", - "dotenv": "^8.2.0", - "glob": "^7.1.2", - "js-yaml": "^3.13.1", - "mkdirp": "^1.0.3", - "reflect-metadata": "^0.1.13", - "sha.js": "^2.4.11", - "tslib": "^1.9.0", - "xml2js": "^0.4.17", - "yargonaut": "^1.1.2", - "yargs": "^13.2.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, "typescript": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==" }, + "ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" + }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -14370,6 +14243,11 @@ } } }, + "whatwg-fetch": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" + }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -14388,11 +14266,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", @@ -14498,20 +14371,6 @@ "async-limiter": "~1.0.0" } }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -14532,129 +14391,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" }, - "yargonaut": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", - "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", - "requires": { - "chalk": "^1.1.1", - "figlet": "^1.1.1", - "parent-require": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, "yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", diff --git a/website/package.json b/website/package.json index cb673aef3b..672cf8e647 100644 --- a/website/package.json +++ b/website/package.json @@ -5,29 +5,39 @@ "author": "HashiCorp", "dependencies": { "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@hashicorp/mktg-assets": "^1.0.0-alpha.20", "@hashicorp/nextjs-scripts": "13.0.0-canary.1", - "@hashicorp/react-content": "4.0.2", - "@hashicorp/react-docs-page": "5.0.3", + "@hashicorp/react-alert-banner": "^4.1.0", + "@hashicorp/react-button": "^3.0.1", + "@hashicorp/react-content": "5.1.0", + "@hashicorp/react-docs-page": "6.2.0", "@hashicorp/react-global-styles": "4.5.0", + "@hashicorp/react-hashi-stack-menu": "^1.0.3", "@hashicorp/react-head": "1.1.3", - "@hashicorp/react-image": "2.0.4", - "@hashicorp/react-mega-nav": "4.0.1-2", + "@hashicorp/react-hero": "^3.1.9", + "@hashicorp/react-image": "3.0.1", "@hashicorp/react-product-downloader": "4.1.3", + "@hashicorp/react-product-features-list": "^2.1.0", "@hashicorp/react-section-header": "2.0.2", "@hashicorp/react-subnav": "3.3.1", + "@hashicorp/react-tabs": "^0.6.1", + "@hashicorp/react-use-cases": "2.0.1", "@hashicorp/react-vertical-text-block-list": "2.0.3", "babel-plugin-import-glob-array": "0.2.0", "change-case": "^4.1.1", + "classnames": "^2.2.6", "fs-exists-sync": "0.1.0", "gray-matter": "4.0.2", "js-yaml": "3.14.0", "line-reader": "0.4.0", "next": "9.5.3", - "next-auth": "^3.1.0", "next-mdx-remote": "1.0.0", "react": "16.13.1", "react-dom": "16.13.1", - "readdirp": "3.4.0" + "react-intersection-observer": "^8.29.0", + "react-player": "^2.6.2", + "readdirp": "3.4.0", + "semver": "^7.3.2" }, "devDependencies": { "dart-linkcheck": "2.0.15", @@ -52,7 +62,6 @@ "generate:readme": "next-hashicorp markdown-blocks README.md", "lint": "next-hashicorp lint", "start": "next dev", - "dev:auth": "HASHI_ENV=preview npm start", "static": "npm run build && npm run export && cp _redirects out/.", "linkcheck": "linkcheck " } diff --git a/website/pages/_app.js b/website/pages/_app.js index 52bc794646..ffe853a00f 100644 --- a/website/pages/_app.js +++ b/website/pages/_app.js @@ -3,16 +3,17 @@ import '@hashicorp/nextjs-scripts/lib/nprogress/style.css' import NProgress from '@hashicorp/nextjs-scripts/lib/nprogress' import createConsentManager from '@hashicorp/nextjs-scripts/lib/consent-manager' import useAnchorLinkAnalytics from '@hashicorp/nextjs-scripts/lib/anchor-link-analytics' +import HashiStackMenu from '@hashicorp/react-hashi-stack-menu' import Router from 'next/router' import HashiHead from '@hashicorp/react-head' import Head from 'next/head' import { ErrorBoundary } from '@hashicorp/nextjs-scripts/lib/bugsnag' -import ConditionalAuthProvider from 'components/conditional-auth-provider' -import MegaNav from '@hashicorp/react-mega-nav' import ProductSubnav from '../components/subnav' import Footer from 'components/footer' import Error from './_error' import { productName } from '../data/metadata' +import AlertBanner from '@hashicorp/react-alert-banner' +import alertBannerData, { ALERT_BANNER_ACTIVE } from 'data/alert-banner' NProgress({ Router }) const { ConsentManager, openConsentManager } = createConsentManager({ @@ -24,23 +25,22 @@ function App({ Component, pageProps }) { return ( - - - - -
- -
-