diff --git a/website/.node-version b/website/.node-version new file mode 100644 index 000000000000..348076b955bb --- /dev/null +++ b/website/.node-version @@ -0,0 +1 @@ +10.15.3 diff --git a/website/.prettierrc b/website/.prettierrc new file mode 100644 index 000000000000..b2095be81e4e --- /dev/null +++ b/website/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} diff --git a/website/assets/css/_section.css b/website/assets/css/_section.css new file mode 100644 index 000000000000..8092cd1d84ed --- /dev/null +++ b/website/assets/css/_section.css @@ -0,0 +1,351 @@ +@import '@hashicorp/hashi-global-styles/style'; + +.g-section-block { + padding: 160px 0; + + @media (max-width: 1119px) { + padding: 104px 0; + } + + @media (max-width: 767px) { + padding: 80px 0; + } + + &.theme-white-background-black-text:not(.divider-gray-line) + + .theme-white-background-black-text { + padding-top: 32px; + } + + /* Layout Styles */ + &.layout-horizontal { + & > .g-container { + display: flex; + align-items: center; + + & > * + * { + margin-left: 96px; + } + } + + & .img-container { + flex-shrink: 0; + + & img { + align-self: center; + } + } + } + + &.layout-vertical { + & > .g-container { + & > * + * { + margin-top: 96px; + + @media (max-width: 1119px) { + margin-top: 72px; + } + + @media (max-width: 767px) { + margin-top: 56px; + } + } + + & > .g-text-and-content + .g-text-and-content { + margin-top: 192px; + + @media (max-width: 1119px) { + margin-top: 144px; + } + + @media (max-width: 767px) { + margin-top: 112px; + } + } + + & > .g-section-header { + & + * { + margin-top: 72px; + + @media (max-width: 1119px) { + margin-top: 64px; + } + + @media (max-width: 767px) { + margin-top: 40px; + } + } + } + + & > * + .btn-container { + margin-top: 40px; + + @media (max-width: 767px) { + margin-top: 32px; + } + } + } + } + + /* TODO: remove this once new section header is out */ + & .g-section-header { + margin: 0 auto; + } + + /* Module styles */ + + & .btn-container { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: auto -8px -16px; + + & > * { + margin: auto 8px 16px; + } + } + + & .img-container { + display: flex; + justify-content: center; + + & .g-container { + flex-shrink: 0; + width: 100%; + } + + & img { + max-width: 100%; + } + + & picture { + display: flex; + justify-content: center; + width: 100%; + + & img { + object-fit: contain; + font-family: 'object-fit:contain'; + flex-shrink: 0; + } + } + } + + & .two-col-text-container { + & .g-container { + display: flex; + @media (max-width: 850px) { + flex-direction: column; + } + } + + & .left, + & .right { + width: 48%; + flex-shrink: 0; + + @media (max-width: 850px) { + width: 100%; + } + + & > *:first-child { + margin-top: 0; + } + } + + & .left { + margin-right: 4%; + + @media (max-width: 850px) { + margin-right: 0; + margin-bottom: 32px; + } + } + + & a { + font-weight: 600; + color: inherit; + + &:hover { + border-bottom: 1px solid; + opacity: 0.8; + } + } + + & h5 { + margin-bottom: 1em; + } + + & ul { + list-style: none; + padding-left: 15px; + + & li { + display: flex; + align-items: center; + margin-bottom: 5px; + + &:before { + content: ''; + width: 18px; + height: 18px; + background: url('/img/black-circle-white-check.svg') no-repeat; + background-size: 100%; + margin-right: 10px; + } + } + } + } + + & .g-text-and-image { + & .imgwrap { + display: flex; + + & picture { + display: flex; + justify-content: center; + width: 100%; + + & img { + object-fit: contain; + font-family: 'object-fit:contain'; + max-width: 350px; + } + } + } + + & .text { + & h2 { + font-size: 1.5rem; + } + + & a { + font-weight: 600; + color: white; + padding-bottom: 1px; + + &:hover { + border-bottom: 1px solid; + } + } + } + } + + & .small-text-tag { + text-align: center; + text-transform: uppercase; + color: #8d9096; + font-size: 0.9rem; + font-weight: 600; + } + + & .g-logo-grid.large li { + background-color: white; + } + + & .video-container { + max-width: 80%; + margin-left: auto; + margin-right: auto; + } + + /* THEMES */ + &.theme-terraform-purple-top-gradient { + color: white; + background: linear-gradient(to bottom, #1b212c, #000000); + } + + &.theme-dark-blue { + color: white; + background: #1b212d; + } + + &.theme-white-background-black-text { + background: white; + color: black; + } + + &.theme-black-background-white-text { + background: var(--gray-1); + color: white; + } + + &.theme-light-gray { + color: black; + background: #f3f4f6; + } + + &.theme-default-blue-gradient { + background: url('/img/backgrounds/partner-cta-bg.svg'); + background-position: center center; + background-size: cover; + color: var(--white); + } + + &.theme-terraform-purple-gradient { + @extend %gradient-bg; + background: linear-gradient(to right, #695af0, #6b5cf3); + + &::before { + background: linear-gradient(to right, #5b48e7, #6b5cf3); + } + } + + &.theme-nomad-green-gradient { + @extend %gradient-bg; + background: linear-gradient(to right, #1dbe83, #1ec185); + + &::before { + background: linear-gradient(to right, #20c78a, #17c185); + } + } + + &.theme-terraform-purple-testimonial-split { + color: white; + position: relative; + overflow: hidden; + + &:before { + content: ''; + background: linear-gradient(to right, #695af0, #6b5cf3); + width: 100%; + height: 550px; + position: absolute; + top: 0; + left: 0; + } + + & .g-container { + position: relative; + } + } + + /* DIVIDERS */ + &.divider-gray-line { + border-bottom: 1px solid #d9dbdd; + } + + &.divider-dark-gray-line { + border-bottom: 1px solid #424242; + } + + &.divider-black-down-arrow { + border-bottom: 1px solid #d0d2d5; + position: relative; + + &:after { + content: ''; + width: 82px; + height: 82px; + background: black url('/img/white-down-chevron.svg') 50% 55% no-repeat; + margin-top: 21px; + border-radius: 50%; + position: absolute; + bottom: -40px; + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + z-index: 2; + } + } +} diff --git a/website/assets/css/index.css b/website/assets/css/index.css index c469ea52f98e..833d0f1375dc 100644 --- a/website/assets/css/index.css +++ b/website/assets/css/index.css @@ -2,34 +2,45 @@ @import '@hashicorp/hashi-global-styles/style'; /* NPM Preact Components */ +@import '@hashicorp/hashi-alert/dist/style.css'; +@import '@hashicorp/hashi-button/dist/style.css'; +@import '@hashicorp/hashi-callouts/dist/style.css'; +@import '@hashicorp/hashi-case-study-slider/dist/style.css'; +@import '@hashicorp/hashi-code-block/dist/style.css'; +@import '@hashicorp/hashi-consent-manager/dist/style.css'; +@import '@hashicorp/hashi-content/dist/style.css'; +@import '@hashicorp/hashi-docs-sidenav/dist/style.css'; +@import '@hashicorp/hashi-docs-sitemap/dist/style.css'; @import '@hashicorp/hashi-footer/dist/style.css'; +@import '@hashicorp/hashi-hero/dist/style.css'; +@import '@hashicorp/hashi-linked-text-summary-list/dist/style.css'; +@import '@hashicorp/hashi-logo-grid/dist/style.css'; +@import '@hashicorp/hashi-mega-nav/dist/style.css'; @import '@hashicorp/hashi-nav/dist/style.css'; @import '@hashicorp/hashi-newsletter-signup-form/dist/style.css'; -@import '@hashicorp/hashi-button/dist/style.css'; +@import '@hashicorp/hashi-product-downloader/dist/style.css'; @import '@hashicorp/hashi-product-subnav/dist/style.css'; -@import '@hashicorp/hashi-content/dist/style.css'; -@import '@hashicorp/hashi-mega-nav/dist/style.css'; -@import '@hashicorp/hashi-docs-sidenav/dist/style.css'; -@import '@hashicorp/hashi-vertical-text-block-list/dist/style.css'; @import '@hashicorp/hashi-section-header/dist/style.css'; -@import '@hashicorp/hashi-product-downloader/dist/style.css'; -@import '@hashicorp/hashi-hero/dist/style.css'; -@import '@hashicorp/hashi-alert/dist/style.css'; -@import '@hashicorp/hashi-callouts/dist/style.css'; @import '@hashicorp/hashi-split-cta/dist/style.css'; -@import '@hashicorp/hashi-linked-text-summary-list/dist/style.css'; -@import '@hashicorp/hashi-docs-sitemap/dist/style.css'; -@import '@hashicorp/hashi-consent-manager/dist/style.css'; +@import '@hashicorp/hashi-text-and-content/dist/style.css'; @import '@hashicorp/hashi-toggle/dist/style.css'; +@import '@hashicorp/hashi-vertical-text-block-list/dist/style.css'; + +/* Local Preact Components */ +@import '../js/components/before-after-diagram/style.css'; /* to be removed pending new components */ @import '_inner'; @import '_secondary-nav'; +/* Layout */ +@import '_section'; + /* Pages */ @import 'pages/_docs'; @import 'pages/_section_block'; @import 'pages/_home'; +@import 'pages/_use_cases'; @import 'pages/_downloads.css'; /* Print styles */ @@ -38,3 +49,15 @@ h5 { font-weight: 600; } + +.g-text-and-content .image img { + width: 100%; +} + +/* Hide Mega Nav on mobile */ +nav.g-mega-nav { + display: none; + @media (min-width: 1023px) { + display: block; + } +} diff --git a/website/assets/css/pages/_home.css b/website/assets/css/pages/_home.css index 0d22a0040e8c..12455b2b7ad5 100644 --- a/website/assets/css/pages/_home.css +++ b/website/assets/css/pages/_home.css @@ -1,3 +1,34 @@ +@import '@hashicorp/hashi-global-styles/_typography.css'; + .g-split-cta h1 { font-size: 2.5em; } + +#page-home { + & .g-section-block.page-wrap { + padding-top: 0; + } + + & .g-logo-grid li img { + max-height: 50%; + max-width: 50%; + } + + & .g-container.remove-bottom-padding { + padding-bottom: 0; + } + + & .g-section-header.infrastructure { + /* Override default max-width */ + max-width: 1050px; + + & h2 { + max-width: 784px; + margin: 0 auto; + } + } + + & .g-container.before-after { + padding-top: 50px; + } +} diff --git a/website/assets/css/pages/_use_cases.css b/website/assets/css/pages/_use_cases.css new file mode 100644 index 000000000000..1d710196abfe --- /dev/null +++ b/website/assets/css/pages/_use_cases.css @@ -0,0 +1,72 @@ +@import '@hashicorp/hashi-global-styles/_variables.css'; + +#use-cases { + & .g-section-block section.pad-bottom { + padding-bottom: 144px; + } + + & .g-logo-grid li img { + max-height: 50%; + max-width: 50%; + } + + & .g-section-block.page-wrap { + padding-top: 0; + padding-bottom: 0; + } + + & .g-section-block.g-cta-section { + align-items: center; + background: var(--vault-gray-dark); + display: flex; + justify-content: center; + padding-left: 15px; + padding-right: 15px; + position: relative; + text-align: center; + color: var(--white); + + & h2 { + margin-top: 0; + } + + & .g-btn.white { + background: var(--white); + border: 2px solid var(--white); + color: var(--vault-gray-dark); + + &:hover { + background-color: var(--vault-gray); + border-color: var(--vault-gray); + color: var(--white); + + & path { + fill: var(--white); + } + } + } + + & .g-btn.download svg { + margin: 0 4px -4px 0; + } + + & .g-btn.download svg path { + transition: fill 0.25s ease; + } + + & .g-btn + .g-btn { + margin-left: 18px; + } + + & .g-btn.white-outline { + background: none; + border: 2px solid var(--white); + color: var(--white); + + &:hover { + background-color: var(--white); + color: var(--vault-gray-dark); + } + } + } +} diff --git a/website/assets/img/homepage/callouts/encryption.png b/website/assets/img/homepage/callouts/encryption.png new file mode 100644 index 000000000000..14710577d4a1 Binary files /dev/null and b/website/assets/img/homepage/callouts/encryption.png differ diff --git a/website/assets/img/homepage/callouts/identity.png b/website/assets/img/homepage/callouts/identity.png new file mode 100644 index 000000000000..d96e8b2353e6 Binary files /dev/null and b/website/assets/img/homepage/callouts/identity.png differ diff --git a/website/assets/img/homepage/callouts/secrets.png b/website/assets/img/homepage/callouts/secrets.png new file mode 100644 index 000000000000..588729443546 Binary files /dev/null and b/website/assets/img/homepage/callouts/secrets.png differ diff --git a/website/assets/img/icons/alert-triangle.svg b/website/assets/img/icons/alert-triangle.svg new file mode 100644 index 000000000000..ff190b5c33d1 --- /dev/null +++ b/website/assets/img/icons/alert-triangle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/website/assets/img/icons/check-circle.svg b/website/assets/img/icons/check-circle.svg new file mode 100644 index 000000000000..94da8277989b --- /dev/null +++ b/website/assets/img/icons/check-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/website/assets/img/use-cases/identity-based-access/challenge.png b/website/assets/img/use-cases/identity-based-access/challenge.png new file mode 100644 index 000000000000..6b7ea19a7eeb Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/challenge.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/aws.png b/website/assets/img/use-cases/identity-based-access/logos/aws.png new file mode 100644 index 000000000000..441ae71bd866 Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/aws.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/azure.png b/website/assets/img/use-cases/identity-based-access/logos/azure.png new file mode 100644 index 000000000000..7925c58194bc Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/azure.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/gcp.png b/website/assets/img/use-cases/identity-based-access/logos/gcp.png new file mode 100644 index 000000000000..cb636704ed0d Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/gcp.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/kubernetes.png b/website/assets/img/use-cases/identity-based-access/logos/kubernetes.png new file mode 100644 index 000000000000..b8a0a9a2a58d Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/kubernetes.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/nomad.png b/website/assets/img/use-cases/identity-based-access/logos/nomad.png new file mode 100644 index 000000000000..0949360c413e Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/nomad.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/okta.png b/website/assets/img/use-cases/identity-based-access/logos/okta.png new file mode 100644 index 000000000000..5627aa0a331a Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/okta.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/pivotalcf.png b/website/assets/img/use-cases/identity-based-access/logos/pivotalcf.png new file mode 100644 index 000000000000..de4269a67de0 Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/pivotalcf.png differ diff --git a/website/assets/img/use-cases/identity-based-access/logos/ssh.png b/website/assets/img/use-cases/identity-based-access/logos/ssh.png new file mode 100644 index 000000000000..60841d890e0d Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/logos/ssh.png differ diff --git a/website/assets/img/use-cases/identity-based-access/screenshot-control-groups.png b/website/assets/img/use-cases/identity-based-access/screenshot-control-groups.png new file mode 100644 index 000000000000..18ab76c191fe Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/screenshot-control-groups.png differ diff --git a/website/assets/img/use-cases/identity-based-access/screenshot-entities.png b/website/assets/img/use-cases/identity-based-access/screenshot-entities.png new file mode 100644 index 000000000000..c96d236aa8c2 Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/screenshot-entities.png differ diff --git a/website/assets/img/use-cases/identity-based-access/screenshot-identity-groups.png b/website/assets/img/use-cases/identity-based-access/screenshot-identity-groups.png new file mode 100644 index 000000000000..9fda217662bc Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/screenshot-identity-groups.png differ diff --git a/website/assets/img/use-cases/identity-based-access/solution.png b/website/assets/img/use-cases/identity-based-access/solution.png new file mode 100644 index 000000000000..1fe5d0fe8bf5 Binary files /dev/null and b/website/assets/img/use-cases/identity-based-access/solution.png differ diff --git a/website/assets/js/components/before-after-diagram/alert-icon.js b/website/assets/js/components/before-after-diagram/alert-icon.js new file mode 100644 index 000000000000..e953b37e1eed --- /dev/null +++ b/website/assets/js/components/before-after-diagram/alert-icon.js @@ -0,0 +1,32 @@ +const { h } = require('preact') + +module.exports = function AlertIcon() { + return ( + + + + + + ) +} diff --git a/website/assets/js/components/before-after-diagram/check-icon.js b/website/assets/js/components/before-after-diagram/check-icon.js new file mode 100644 index 000000000000..4fd17b59c721 --- /dev/null +++ b/website/assets/js/components/before-after-diagram/check-icon.js @@ -0,0 +1,27 @@ +const { h } = require('preact') + +module.exports = function CheckIcon() { + return ( + + + + + ) +} diff --git a/website/assets/js/components/before-after-diagram/index.js b/website/assets/js/components/before-after-diagram/index.js new file mode 100644 index 000000000000..33dc9421e7c8 --- /dev/null +++ b/website/assets/js/components/before-after-diagram/index.js @@ -0,0 +1,75 @@ +const { h, Component } = require('preact') +const { decode } = require('reshape-preact-components') +const marked = require('8fold-marked') +const Image = require('@hashicorp/hashi-image').default +const AlertIcon = require('./alert-icon') +const CheckIcon = require('./check-icon') + +module.exports = class BeforeAfterDiagram extends Component { + render() { + const data = decode(this.props._data) + + return ( +
+
+
+
+ +
+
+
+ + + + + +
+ {data.before_headline && ( +

+ )} + {data.before_content && ( +
+ )} +
+

+
+
+
+
+ +
+
+
+
+ +
+
+ {data.after_headline && ( +

+ )} + {data.after_content && ( +
+ )} +
+

+
+
+ ) + } +} diff --git a/website/assets/js/components/before-after-diagram/style.css b/website/assets/js/components/before-after-diagram/style.css new file mode 100644 index 000000000000..b6fc1cc4e3ff --- /dev/null +++ b/website/assets/js/components/before-after-diagram/style.css @@ -0,0 +1,424 @@ +.g-before-after-diagrams { + display: flex; + flex-wrap: wrap; + margin: 0 -16px; + position: relative; + + @media (max-width: 1023px) { + margin-left: -12px; + margin-right: -12px; + } + + @media (max-width: 767px) { + flex-direction: column; + margin-left: 40px; + margin-right: 0; + } + + & > div { + display: flex; + flex-direction: column; + margin: 0 16px; + position: relative; + width: calc(50% - 32px); + + @media (max-width: 1023px) { + margin: 0 12px; + width: calc(50% - 24px); + } + + @media (max-width: 767px) { + margin: 0; + width: 100%; + } + } + + & .before { + @media (max-width: 767px) { + margin-bottom: 62px; + } + + & li:before { + background: url('/img/icons/alert-triangle.svg'); + height: 20px; + margin-top: 3px; + width: 20px; + } + } + + & .after li:before { + background: url('/img/icons/check-circle.svg'); + height: 18px; + margin-top: 4px; + width: 18px; + } + + & .image { + align-items: center; + display: flex; + height: 320px; + justify-content: center; + margin-bottom: 96px; + + @media (max-width: 767px) { + margin-bottom: 40px; + } + + @media (max-width: 640px) { + height: 284px; + } + + @media (max-width: 540px) { + height: 238px; + } + + @media (max-width: 480px) { + height: 211px; + } + + @media (max-width: 375px) { + height: 163px; + } + + & div { + height: 100%; + text-align: center; + width: 100%; + } + + & img, + & svg { + max-height: 100%; + max-width: 100%; + } + } + + & .content { + border: 1px solid var(--gray-9); + padding: 24px 32px 20px; + position: relative; + flex-grow: 1; + + @media (max-width: 1023px) { + padding-left: 24px; + padding-right: 24px; + } + + @media (max-width: 767px) { + padding-left: 20px; + padding-right: 20px; + } + + &:before, + &:after { + bottom: 100%; + border: solid transparent; + content: ''; + height: 0; + left: 50%; + width: 0; + position: absolute; + pointer-events: none; + } + + &:before { + border-color: rgba(229, 230, 235, 0); + border-bottom-color: var(--gray-9); + border-width: 18px; + margin-left: -18px; + } + + &:after { + border-color: rgba(255, 255, 255, 0); + border-bottom-color: var(--white); + border-width: 17px; + margin-left: -17px; + } + + & > div { + height: 100%; + + &.line { + height: auto; + } + + & > div { + @media (min-width: 768px) { + max-width: 480px; + margin: 0 auto; + } + } + } + } + + & h3 { + border-bottom: 1px solid var(--gray-9); + color: var(--black); + font-weight: 300; + margin: 0 0 24px; + padding-bottom: 24px; + text-align: center; + + @media (max-width: 767px) { + font-size: 1.3125rem; + line-height: 2rem; + } + } + + & h4 { + display: block; + font-size: 0.75rem; + font-weight: var(--font-weight-bold); + letter-spacing: 0.5px; + line-height: 1.125rem; + margin: 24px 0 26px; + text-transform: uppercase; + } + + & ul { + list-style: none; + padding-left: 32px; + position: relative; + } + + & li { + margin: 8px 0; + + &:before { + background-repeat: no-repeat; + content: ''; + left: 0; + position: absolute; + } + } + + & .line { + padding: 0; + position: absolute; + right: 0; + top: -75px; + width: 100%; + + @media (max-width: 767px) { + left: -28px; + height: 100%; + right: auto; + top: 28px; + width: auto; + } + + & span { + display: block; + height: 1px; + position: absolute; + top: 12px; + width: calc(100% - 14px); + + @media (max-width: 767px) { + width: 1px; + } + + &:first-child { + background-image: linear-gradient( + 90deg, + rgba(210, 212, 219, 0) 0%, + var(--gray-8) 100% + ); + right: calc(50% + 20px); + width: calc(50% + 140px); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + rgba(210, 212, 219, 0) 0%, + var(--gray-8) 100% + ); + height: 245px; + right: auto; + top: -253px; + width: 1px; + } + } + + &:last-child { + background-image: linear-gradient( + 90deg, + var(--gray-8) 0%, + var(--black) 100% + ); + left: calc(50% + 20px); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + var(--gray-8) 0%, + var(--black) 100% + ); + height: calc(100% + 375px); + left: auto; + top: 32px; + } + + @media (max-width: 640px) { + height: calc(100% + 339px); + } + + @media (max-width: 540px) { + height: calc(100% + 293px); + } + + @media (max-width: 480px) { + height: calc(100% + 266px); + } + + @media (max-width: 375px) { + height: calc(100% + 218px); + } + + &:after { + border-color: transparent transparent transparent #000000; + border-style: solid; + border-width: 5.5px 0 5.5px 8px; + content: ''; + height: 0; + position: absolute; + right: -8px; + top: -5px; + width: 0; + + @media (max-width: 767px) { + transform: rotate(90deg); + top: auto; + bottom: -8px; + right: -4px; + } + } + } + } + + & svg { + position: absolute; + left: 50%; + margin: 0 0 0 -11px; + } + } + + /* + * TERRAFORM THEME + */ + &.terraform { + & .line span { + &:first-child { + background-image: linear-gradient( + 90deg, + rgba(95, 67, 233, 0) 0%, + var(--gray-8) 100% + ); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + rgba(95, 67, 233, 0) 0%, + var(--gray-8) 100% + ); + } + } + + &:last-child { + background-image: linear-gradient( + 90deg, + var(--gray-8) 0%, + var(--terraform-purple) 100% + ); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + var(--gray-8) 0%, + var(--terraform-purple) 100% + ); + } + + &:after { + border-color: transparent transparent transparent + var(--terraform-purple); + border-style: solid; + border-width: 5.5px 0 5.5px 8px; + } + } + } + & .after { + & li:before { + background: url('/img/icons/check-circle-purple.svg'); + height: 19px; + } + + .line { + svg, + path:first-child { + fill: var(--terraform-purple); + stroke: var(--terraform-purple); + } + } + } + } + + /* + * CONSUL THEME + */ + &.consul { + & .line span { + &:first-child { + background-image: linear-gradient( + 90deg, + rgba(95, 67, 233, 0) 0%, + var(--gray-8) 100% + ); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + rgba(95, 67, 233, 0) 0%, + var(--gray-8) 100% + ); + } + } + + &:last-child { + background-image: linear-gradient( + 90deg, + var(--gray-8) 0%, + var(--consul-pink) 100% + ); + + @media (max-width: 767px) { + background-image: linear-gradient( + 180deg, + var(--gray-8) 0%, + var(--consul-pink) 100% + ); + } + + &:after { + border-color: transparent transparent transparent var(--consul-pink); + border-style: solid; + border-width: 5.5px 0 5.5px 8px; + } + } + } + & .after { + & li:before { + background: url('/img/icons/check-circle-pink.svg'); + height: 19px; + } + + .line { + svg, + path:first-child { + fill: var(--consul-pink); + stroke: var(--consul-pink); + } + } + } + } +} diff --git a/website/assets/package-lock.json b/website/assets/package-lock.json index a9673535d1de..51c092669327 100644 --- a/website/assets/package-lock.json +++ b/website/assets/package-lock.json @@ -138,15 +138,25 @@ "resolved": "https://registry.npmjs.org/@hashicorp/hashi-callouts/-/hashi-callouts-2.1.0.tgz", "integrity": "sha512-sFcVJyW6SYGVxzTH55FWzvYKqv13Ten+BGFclr6lO4XpvnQpewP75BkLhnIq7lVf0gpFtOjo5kC3qmpyRJVLeQ==" }, + "@hashicorp/hashi-case-study-slider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/hashi-case-study-slider/-/hashi-case-study-slider-2.3.0.tgz", + "integrity": "sha512-pB/CXCtNqwU5WcR9VDyNTdYh4BJqj0ZtTQrNrYnoQ5g8OlggBBex/QASbnvaBCGkiXw5QDNHpkN6Lyc4iTHD+A==" + }, + "@hashicorp/hashi-code-block": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/hashi-code-block/-/hashi-code-block-1.2.0.tgz", + "integrity": "sha512-CARAGd/4E8EudamMThp3X7mXpOzWBKIi4qYSGKzt6o52s1FNKpzp+sLqcw9cuPAx+dVY5YiU0NCk6XY8OeNPRw==" + }, "@hashicorp/hashi-consent-manager": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@hashicorp/hashi-consent-manager/-/hashi-consent-manager-1.0.10.tgz", "integrity": "sha512-T3njOQOB8M8b4TGzDpfEtd05jdiprlQSzGYCe72dYcJDdgu0iUAmpx50b7dL09gGlUuxPI6wYCRff+ZQzLfFPQ==" }, "@hashicorp/hashi-content": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@hashicorp/hashi-content/-/hashi-content-0.1.0.tgz", - "integrity": "sha512-+XBhJKl8Ph0ei7UkEMf7DrfubkNBdZx1MIRxgtuhC72ScrR6wRt7apCywxiJoqEACI/c14xjUTA2BfmUR2XPzw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/hashi-content/-/hashi-content-1.0.1.tgz", + "integrity": "sha512-cX+Fm52yUVd0zJcKAWPstNDXF3PvwGP6HrvxRVmxWCrxqaHTeP6X7U9sUYJ58NIVr3E83zo8LyFtz+a7yj8DEA==" }, "@hashicorp/hashi-docs-sidenav": { "version": "1.0.3", @@ -191,6 +201,11 @@ "resolved": "https://registry.npmjs.org/@hashicorp/hashi-linked-text-summary-list/-/hashi-linked-text-summary-list-0.1.5.tgz", "integrity": "sha512-LZM9DCSK36W7F+hD5qgF/5XXFj6YLkJkhp0m4DZQD74NIsN3u6HGthAwr4t1Qy3eV2TR0h0AnrTnrMQoTpKDjQ==" }, + "@hashicorp/hashi-logo-grid": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@hashicorp/hashi-logo-grid/-/hashi-logo-grid-2.4.1.tgz", + "integrity": "sha512-8klunvdahv2CSt+U4E+gQ1GvFHk0fKwIezUyL4GsiBEy6iYl+CMzPNyv0DxwLH4cV0q6gg7ftDM8v2K6yyuZ1A==" + }, "@hashicorp/hashi-mega-nav": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@hashicorp/hashi-mega-nav/-/hashi-mega-nav-1.4.3.tgz", @@ -241,6 +256,11 @@ "resolved": "https://registry.npmjs.org/@hashicorp/hashi-split-cta/-/hashi-split-cta-0.1.6.tgz", "integrity": "sha512-vv9JMwLNNx4mW2uESLOUFlLi0jWqdhCtNS9VZPhJd05Bb9xQybyylqcGUZgElIiqy/jS9S9d162eHV+Bhf+fCQ==" }, + "@hashicorp/hashi-text-and-content": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@hashicorp/hashi-text-and-content/-/hashi-text-and-content-0.8.1.tgz", + "integrity": "sha512-nJWNVatLFdVeCFIUr861i+jYoMmTkArmwWty0WtrOuTMFfnXdKWYjUliUEB/D3GvJvcwcDW3DxhVRT+Vad2bQQ==" + }, "@hashicorp/hashi-toggle": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@hashicorp/hashi-toggle/-/hashi-toggle-0.2.3.tgz", @@ -4968,6 +4988,11 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "9.15.10", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.10.tgz", + "integrity": "sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw==" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", diff --git a/website/assets/package.json b/website/assets/package.json index 5d05f5253c9a..6e94d5892af9 100644 --- a/website/assets/package.json +++ b/website/assets/package.json @@ -10,8 +10,10 @@ "@hashicorp/hashi-alert": "^1.1.0", "@hashicorp/hashi-button": "1.0.5", "@hashicorp/hashi-callouts": "^2.0.5", + "@hashicorp/hashi-case-study-slider": "^2.3.0", + "@hashicorp/hashi-code-block": "^1.2.0", "@hashicorp/hashi-consent-manager": "^1.0.10", - "@hashicorp/hashi-content": "^0.1.0", + "@hashicorp/hashi-content": "^1.0.1", "@hashicorp/hashi-docs-sidenav": "^1.0.2", "@hashicorp/hashi-docs-sitemap": "^0.1.6", "@hashicorp/hashi-footer": "^1.1.3", @@ -20,6 +22,7 @@ "@hashicorp/hashi-hero": "^3.1.2", "@hashicorp/hashi-image": "1.0.5", "@hashicorp/hashi-linked-text-summary-list": "^0.1.4", + "@hashicorp/hashi-logo-grid": "^2.4.1", "@hashicorp/hashi-mega-nav": "^1.1.0", "@hashicorp/hashi-nav": "^1.1.2", "@hashicorp/hashi-newsletter-signup-form": "^1.3.0", @@ -27,6 +30,7 @@ "@hashicorp/hashi-product-subnav": "^0.5.5", "@hashicorp/hashi-section-header": "^4.0.0", "@hashicorp/hashi-split-cta": "^0.1.4", + "@hashicorp/hashi-text-and-content": "^0.8.1", "@hashicorp/hashi-toggle": "^0.2.2", "@hashicorp/hashi-vertical-text-block-list": "^0.1.1", "@hashicorp/js-utils": "^1.0.0", @@ -34,6 +38,7 @@ "@segment/in-eu": "^0.2.1", "@segment/top-domain": "^3.0.0", "color-contrast": "^0.0.1", + "highlight.js": "^9.15.10", "js-cookie": "^2.2.0", "marked": "^0.5.1", "normalize.css": "^8.0.0", diff --git a/website/assets/reshape.js b/website/assets/reshape.js index 854fb4edd0cd..947bc6b9fc6d 100644 --- a/website/assets/reshape.js +++ b/website/assets/reshape.js @@ -1,35 +1,42 @@ -const footer = require('@hashicorp/hashi-footer') -const nav = require('@hashicorp/hashi-nav') const button = require('@hashicorp/hashi-button') -const megaNav = require('@hashicorp/hashi-mega-nav') -const productSubnav = require('@hashicorp/hashi-product-subnav') -const verticalTextBlockList = require('@hashicorp/hashi-vertical-text-block-list') -const sectionHeader = require('@hashicorp/hashi-section-header') +const callouts = require('@hashicorp/hashi-callouts') +const caseStudySlider = require('@hashicorp/hashi-case-study-slider') +const consentManager = require('@hashicorp/hashi-consent-manager') const content = require('@hashicorp/hashi-content') -const productDownloader = require('@hashicorp/hashi-product-downloader') const docsSidenav = require('@hashicorp/hashi-docs-sidenav') +const docsSitemap = require('@hashicorp/hashi-docs-sitemap') +const footer = require('@hashicorp/hashi-footer') const hero = require('@hashicorp/hashi-hero') -const callouts = require('@hashicorp/hashi-callouts') -const splitCta = require('@hashicorp/hashi-split-cta') const linkedTextSummaryList = require('@hashicorp/hashi-linked-text-summary-list') -const docsSitemap = require('@hashicorp/hashi-docs-sitemap') -const consentManager = require('@hashicorp/hashi-consent-manager') +const megaNav = require('@hashicorp/hashi-mega-nav') +const nav = require('@hashicorp/hashi-nav') +const productDownloader = require('@hashicorp/hashi-product-downloader') +const productSubnav = require('@hashicorp/hashi-product-subnav') +const sectionHeader = require('@hashicorp/hashi-section-header') +const splitCta = require('@hashicorp/hashi-split-cta') +const textAndContent = require('@hashicorp/hashi-text-and-content') +const verticalTextBlockList = require('@hashicorp/hashi-vertical-text-block-list') + +const beforeAfterDiagram = require('./js/components/before-after-diagram') module.exports = { - 'hashi-footer': footer, - 'hashi-nav': nav, 'hashi-button': button, + 'hashi-callouts': callouts, + 'hashi-case-study-slider': caseStudySlider, + 'hashi-consent-manager': consentManager, + 'hashi-content': content, 'hashi-docs-sidenav': docsSidenav, + 'hashi-docs-sitemap': docsSitemap, + 'hashi-footer': footer, + 'hashi-hero': hero, + 'hashi-linked-text-summary-list': linkedTextSummaryList, 'hashi-mega-nav': megaNav, - 'hashi-product-subnav': productSubnav, - 'hashi-content': content, + 'hashi-nav': nav, 'hashi-product-downloader': productDownloader, - 'hashi-vertical-text-block-list': verticalTextBlockList, + 'hashi-product-subnav': productSubnav, 'hashi-section-header': sectionHeader, - 'hashi-hero': hero, - 'hashi-callouts': callouts, 'hashi-split-cta': splitCta, - 'hashi-linked-text-summary-list': linkedTextSummaryList, - 'hashi-docs-sitemap': docsSitemap, - 'hashi-consent-manager': consentManager + 'hashi-text-and-content': textAndContent, + 'hashi-vertical-text-block-list': verticalTextBlockList, + 'hashi-before-after': beforeAfterDiagram } diff --git a/website/config.rb b/website/config.rb index 90a44d200cf2..54e28bfc834e 100644 --- a/website/config.rb +++ b/website/config.rb @@ -83,6 +83,9 @@ def body_id_for(page) if page.url == "/" || page.url == "/index.html" return "page-home" end + if page.path.include? "use-cases" + return "use-cases" + end if !(title = page.data.page_title).blank? return title .downcase @@ -117,4 +120,63 @@ def body_classes_for(page) return classes.join(" ") end + + # Returns data / attributes used by the product subnav component. + # @return [Object] + def getSubNavData + return { + current_path: current_page.path, + products: dato.enterprise_products.map(&:to_hash), + subnav: { + tdm_focused_links: [ + { + title: "Intro", + url: "/intro" + }, + { + item_type: "dropdown_link", + title: "Use Cases", + links: [{ + title: "Secrets Management", + url: "/use-cases/secrets-management" + }, + { + title: "Data Encryption", + url: "/use-cases/data-encryption" + }, { + title: "Identity-based Access", + url: "/use-cases/identity-based-access" + }] + }, + { + title: "Enterprise", + url: "https://www.hashicorp.com/products/vault/enterprise" + }, + { + title: "Whitepaper", + url: "https://www.hashicorp.com/resources/unlocking-the-cloud-operating-model-security?utm_source=vaultsubnav" + } + ], + practitioner_focused_links: [ + { + title: "Learn", + url: "https://learn.hashicorp.com/vault" + }, + { + title: "Docs", + url: "/docs" + }, + { + title: "API", + url: "/api" + }, + { + title: "Community", + url: "/community" + } + ], + product: dato.vault_product_page.subnav.product.to_hash + } + } + end end diff --git a/website/source/api/index.html.erb b/website/source/api/index.html.erb deleted file mode 100644 index 6b7aa2d27c93..000000000000 --- a/website/source/api/index.html.erb +++ /dev/null @@ -1,83 +0,0 @@ ---- -page_title: "Vault API Documentation" -description: |- - Vault API reference documentation. ---- - -<% @meganav_title = 'API Docs' %> - - - -
-
- - -
- - -
-
- -
- -
- -
-
- - -
- -
-
-
- -
- - - -
- -
-
- - -
- - -
-
-
- -
diff --git a/website/source/api/index.html.md.erb b/website/source/api/index.html.md.erb new file mode 100644 index 000000000000..140695c363e7 --- /dev/null +++ b/website/source/api/index.html.md.erb @@ -0,0 +1,4 @@ +--- +layout: "api" +page_title: "Vault API Documentation" +--- \ No newline at end of file diff --git a/website/source/docs/index.html.erb b/website/source/docs/index.html.erb deleted file mode 100644 index 0a9360094cb5..000000000000 --- a/website/source/docs/index.html.erb +++ /dev/null @@ -1,82 +0,0 @@ ---- -page_title: "Vault Documentation" -description: |- - Vault reference documentation. ---- - -<% @meganav_title = 'Docs' %> - - - -
-
- - -
- - -
-
- -
- -
- -
-
- - -
- -
-
-
- -
- - - -
- -
-
- - -
- - -
-
-
-
diff --git a/website/source/docs/index.html.erb.md b/website/source/docs/index.html.erb.md new file mode 100644 index 000000000000..7952233e16ce --- /dev/null +++ b/website/source/docs/index.html.erb.md @@ -0,0 +1,5 @@ +--- +layout: 'docs' +sidebar_title: 'Overview' +sidebar_current: 'docs-index' +--- diff --git a/website/source/index.html.erb b/website/source/index.html.erb index 6e533a3b8240..4b21b7633cc7 100644 --- a/website/source/index.html.erb +++ b/website/source/index.html.erb @@ -2,54 +2,134 @@ description: "Vault secures, stores, and tightly controls access to tokens, passwords, certificates, API keys, and other secrets in modern computing. Vault handles leasing, key revocation, key rolling, auditing, and provides secrets as a service through a unified API." --- -<% page = dato.vault_oss_page %> +<%= partial "partials/subnav" %> - + + +
+ + <%-# Text Section -%> + +
+
+

Secure dynamic infrastructure across clouds and environments

+

The shift from static, on-premise infrastructure to dynamic, multi-provider infrastructure changes the approach to security. Security in static infrastructure relies on dedicated servers, static IP addresses, and a clear network perimeter. Security in dynamic infrastructure is defined by ephemeral applications and servers, trusted sources of user and application identity, and software-based encryption.

+
+
+ + <%-# Before After Diagram -%> + +
+ +
+ + <%-# Callouts -%> + +
+
+ +
+
+ + <%-# Principles / Text & Content Blocks -%> - -
- + + +<% secure_text_and_content = { + reverse_direction: true, + text: "### Secure with any identity + +Seamlessly integrate any trusted identity provider", + content: { + item_type: "sbc_logo_grid", + companies: dato.vault_product_page.principles_section.layout.content[2].content.companies.to_hash + } +} %> + + + +<% extend_text_and_content = { + text: "### Extend and integrate + +Securely manage secrets and access through a centralized workflow", + content: { + item_type: "sbc_logo_grid", + companies: dato.vault_product_page.principles_section.layout.content[3].content.companies.to_hash + } +} %> + +
- -
- -
-
- - -
- <% if page.features_buttons %> - <% page.features_buttons.buttons.each do |btn| %> - - <% end %> - <% end %> -
+
+
- -
- -
-
+
\ No newline at end of file diff --git a/website/source/intro/index.html.erb.md b/website/source/intro/index.html.erb.md new file mode 100644 index 000000000000..c642ed3fccc7 --- /dev/null +++ b/website/source/intro/index.html.erb.md @@ -0,0 +1,3 @@ +--- +layout: 'intro' +--- diff --git a/website/source/layouts/inner.erb b/website/source/layouts/inner.erb index 26480cac6533..f0c6659a6345 100644 --- a/website/source/layouts/inner.erb +++ b/website/source/layouts/inner.erb @@ -1,8 +1,5 @@ <% wrap_layout :layout do %> - + <%= partial "partials/subnav" %>