@hashicorp/react-components 0.0.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +4 -0
- package/.stylelintrc.js +3 -0
- package/.test/setup-vitest.js +1 -0
- package/README.md +2 -78
- package/global.d.ts +6 -0
- package/package.json +29 -29
- package/postcss.config.js +21 -0
- package/src/components/actions/index.tsx +107 -0
- package/src/components/actions/style.module.css +28 -0
- package/src/components/actions/types.ts +73 -0
- package/src/components/call-to-action/index.tsx +205 -0
- package/src/components/call-to-action/styles/variant-centered.module.css +93 -0
- package/src/components/call-to-action/styles/variant-compact-grid.module.css +88 -0
- package/src/components/call-to-action/styles/variant-compact.module.css +91 -0
- package/src/components/call-to-action/styles/variant-links.module.css +85 -0
- package/src/components/card/README.md +11 -0
- package/src/components/card/card.tsx +45 -0
- package/src/components/card/index.test.tsx +69 -0
- package/src/components/card/index.tsx +14 -0
- package/src/components/card/newsroom-card/index.test.tsx +39 -0
- package/src/components/card/newsroom-card/index.tsx +37 -0
- package/src/components/card/newsroom-card/style.module.css +12 -0
- package/src/components/card/partner-card/index.test.tsx +57 -0
- package/src/components/card/partner-card/index.tsx +69 -0
- package/src/components/card/partner-card/style.module.css +24 -0
- package/src/components/card/person-card/index.test.tsx +71 -0
- package/src/components/card/person-card/index.tsx +93 -0
- package/src/components/card/person-card/style.module.css +33 -0
- package/src/components/card/primitives.tsx +176 -0
- package/src/components/card/promo-card/index.tsx +51 -0
- package/src/components/card/resource-card/index.test.tsx +48 -0
- package/src/components/card/resource-card/index.tsx +37 -0
- package/src/components/card/style.module.css +145 -0
- package/src/components/card/types.ts +66 -0
- package/src/components/card/unified-card/index.tsx +64 -0
- package/{packages → src/components}/consent-manager/README.md +44 -1
- package/src/components/consent-manager/components/banner/banner.module.css +23 -0
- package/src/components/consent-manager/components/banner/banner.test.tsx +31 -0
- package/src/components/consent-manager/components/banner/banner.tsx +73 -0
- package/src/components/consent-manager/components/dialog/dialog.module.css +145 -0
- package/src/components/consent-manager/components/dialog/dialog.test.tsx +194 -0
- package/src/components/consent-manager/components/dialog/dialog.tsx +339 -0
- package/src/components/consent-manager/img/icn_close.tsx +19 -0
- package/src/components/consent-manager/index.test.tsx +334 -0
- package/src/components/consent-manager/index.tsx +186 -0
- package/src/components/consent-manager/loader/README.md +29 -0
- package/src/components/consent-manager/loader/categories.ts +22 -0
- package/src/components/consent-manager/loader/index.tsx +94 -0
- package/src/components/consent-manager/loader/presets/enterprise.ts +12 -0
- package/src/components/consent-manager/loader/presets/oss.ts +10 -0
- package/src/components/consent-manager/loader/services.ts +45 -0
- package/src/components/consent-manager/scripts/custom.tsx +59 -0
- package/src/components/consent-manager/scripts/segment.tsx +87 -0
- package/src/components/consent-manager/style.module.css +9 -0
- package/src/components/consent-manager/types.ts +55 -0
- package/src/components/consent-manager/util/cookies.test.ts +75 -0
- package/src/components/consent-manager/util/cookies.ts +70 -0
- package/src/components/consent-manager/util/integrations.test.ts +115 -0
- package/src/components/consent-manager/util/integrations.ts +110 -0
- package/src/components/intro/index.tsx +82 -0
- package/src/components/intro/style.module.css +67 -0
- package/src/components/intro/types.ts +44 -0
- package/src/components/marketo-form/CHANGELOG.md +122 -0
- package/src/components/marketo-form/README.md +1 -0
- package/src/components/marketo-form/contexts/FormMetadata.ts +11 -0
- package/src/components/marketo-form/docs.mdx +197 -0
- package/src/components/marketo-form/fixtures/index.ts +185 -0
- package/src/components/marketo-form/form/index.tsx +369 -0
- package/src/components/marketo-form/index.test.tsx +320 -0
- package/src/components/marketo-form/index.ts +11 -0
- package/src/components/marketo-form/package.original.json +30 -0
- package/src/components/marketo-form/partials/error-message/index.tsx +12 -0
- package/src/components/marketo-form/partials/error-message/style.module.css +13 -0
- package/src/components/marketo-form/partials/field/index.tsx +90 -0
- package/src/components/marketo-form/partials/field-wrapper/index.tsx +26 -0
- package/src/components/marketo-form/partials/fields/checkbox-field/index.tsx +32 -0
- package/src/components/marketo-form/partials/fields/email-field/index.tsx +35 -0
- package/src/components/marketo-form/partials/fields/form-page-url-field/index.tsx +21 -0
- package/src/components/marketo-form/partials/fields/hidden-field/index.tsx +37 -0
- package/src/components/marketo-form/partials/fields/htmltext-field/index.tsx +21 -0
- package/src/components/marketo-form/partials/fields/htmltext-field/style.module.css +6 -0
- package/src/components/marketo-form/partials/fields/name-field/index.tsx +19 -0
- package/src/components/marketo-form/partials/fields/name-field/style.module.css +13 -0
- package/src/components/marketo-form/partials/fields/radio-buttons-field/index.tsx +48 -0
- package/src/components/marketo-form/partials/fields/select-field/index.tsx +39 -0
- package/src/components/marketo-form/partials/fields/select-field/style.module.css +5 -0
- package/src/components/marketo-form/partials/fields/telephone-field/index.tsx +30 -0
- package/src/components/marketo-form/partials/fields/text-field/index.tsx +30 -0
- package/src/components/marketo-form/partials/fields/textarea-field/index.tsx +29 -0
- package/src/components/marketo-form/partials/label/index.tsx +24 -0
- package/src/components/marketo-form/partials/label/style.module.css +12 -0
- package/src/components/marketo-form/partials/visibility-rule/index.tsx +84 -0
- package/src/components/marketo-form/props.js +66 -0
- package/src/components/marketo-form/server/api-routes.ts +109 -0
- package/src/components/marketo-form/server/client.ts +98 -0
- package/src/components/marketo-form/server/index.ts +8 -0
- package/src/components/marketo-form/types.ts +268 -0
- package/src/components/marketo-form/utils.test.tsx +103 -0
- package/src/components/marketo-form/utils.ts +445 -0
- package/src/components/next-steps/index.tsx +143 -0
- package/src/components/next-steps/style.module.css +270 -0
- package/src/components/next-steps/types.ts +63 -0
- package/src/components/product-badge/index.test.tsx +11 -0
- package/src/components/product-badge/index.tsx +42 -0
- package/src/components/product-badge/style.module.css +76 -0
- package/src/components/products-used/index.tsx +84 -0
- package/src/components/products-used/style.module.css +87 -0
- package/src/components/products-used/types.ts +31 -0
- package/src/components/related-content/index.test.tsx +74 -0
- package/src/components/related-content/index.tsx +56 -0
- package/src/components/related-content/style.module.css +89 -0
- package/src/components/related-content/types.ts +21 -0
- package/src/components/subnav/helpers/areBasePathsMatching.ts +13 -0
- package/src/components/subnav/helpers/traverse/index.ts +42 -0
- package/src/components/subnav/helpers/useHeightRef.ts +42 -0
- package/src/components/subnav/helpers/useNavRef.ts +30 -0
- package/src/components/subnav/helpers/useOverflowRef.ts +85 -0
- package/src/components/subnav/helpers/useStuckRef.ts +51 -0
- package/src/components/subnav/index.tsx +199 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.test.ts +26 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.ts +22 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/index.tsx +87 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.test.ts +29 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.ts +32 -0
- package/src/components/subnav/partials/CtaLinks/github-stars-link/style.module.css +85 -0
- package/src/components/subnav/partials/CtaLinks/icons/github-logo.js +20 -0
- package/{packages → src/components}/subnav/partials/CtaLinks/icons/github.svg.js +5 -0
- package/src/components/subnav/partials/CtaLinks/icons/star.js +20 -0
- package/src/components/subnav/partials/CtaLinks/index.tsx +131 -0
- package/src/components/subnav/partials/CtaLinks/style.module.css +45 -0
- package/src/components/subnav/partials/DropdownTrigger/index.tsx +35 -0
- package/src/components/subnav/partials/DropdownTrigger/style.module.css +36 -0
- package/src/components/subnav/partials/MenuItemsDefault/index.tsx +151 -0
- package/src/components/subnav/partials/MenuItemsDefault/style.module.css +91 -0
- package/src/components/subnav/partials/MenuItemsOverflow/index.tsx +139 -0
- package/src/components/subnav/partials/MenuItemsOverflow/style.module.css +82 -0
- package/src/components/subnav/partials/TitleLink/index.tsx +113 -0
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-dark.ts +9 -0
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-community-product-logos_on-light.ts +9 -0
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-dark.ts +23 -0
- package/src/components/subnav/partials/TitleLink/mktg-logos/all-primary-logos_on-light.ts +23 -0
- package/src/components/subnav/partials/TitleLink/style.module.css +43 -0
- package/src/components/subnav/partials/nav-item-text/index.tsx +37 -0
- package/src/components/subnav/partials/nav-item-text/style.module.css +15 -0
- package/src/components/subnav/style.module.css +68 -0
- package/src/components/subnav/subnav-consts.ts +1 -0
- package/src/components/subnav/theme.module.css +50 -0
- package/tsconfig.json +14 -0
- package/vitest.config.mts +12 -0
- package/.circleci/config.yml +0 -8
- package/.github/pull_request_template.md +0 -36
- package/.github/workflows/publish.yml +0 -181
- package/__test-helpers/expect-throw.js +0 -6
- package/__test-helpers/extend-expect.js +0 -1
- package/__test-helpers/mocks/css-module-mock.js +0 -1
- package/__test-helpers/mocks/graphql-fragment-mock.js +0 -1
- package/__test-helpers/mocks/svg-mock.js +0 -1
- package/babel.config.js +0 -5
- package/jest.config.js +0 -13
- package/lerna.json +0 -16
- package/next.config.js +0 -14
- package/packages/accordion/LICENSE +0 -373
- package/packages/accordion/README.md +0 -5
- package/packages/accordion/index.js +0 -21
- package/packages/accordion/package-lock.json +0 -13
- package/packages/accordion/package.json +0 -20
- package/packages/accordion/partials/AccordionItems/fixtures/default.json +0 -12
- package/packages/accordion/partials/AccordionItems/icons/arrow-down.svg +0 -1
- package/packages/accordion/partials/AccordionItems/index.js +0 -64
- package/packages/accordion/partials/AccordionItems/style.css +0 -2
- package/packages/accordion/partials/AccordionItems/styles/content.css +0 -47
- package/packages/accordion/partials/AccordionItems/styles/index.css +0 -72
- package/packages/accordion/partials/Collapsible/index.js +0 -87
- package/packages/accordion/partials/Collapsible/style.css +0 -10
- package/packages/accordion/style.css +0 -3
- package/packages/accordion/styles/index.css +0 -14
- package/packages/alert/LICENSE +0 -373
- package/packages/alert/README.md +0 -9
- package/packages/alert/fragment.graphql +0 -8
- package/packages/alert/index.js +0 -44
- package/packages/alert/package.json +0 -22
- package/packages/alert/style.css +0 -138
- package/packages/alert-banner/LICENSE +0 -373
- package/packages/alert-banner/README.md +0 -3
- package/packages/alert-banner/close-icon.js +0 -35
- package/packages/alert-banner/fragment.graphql +0 -8
- package/packages/alert-banner/index.jsx +0 -97
- package/packages/alert-banner/package-lock.json +0 -18
- package/packages/alert-banner/package.json +0 -26
- package/packages/alert-banner/style.css +0 -151
- package/packages/button/LICENSE +0 -373
- package/packages/button/README.md +0 -19
- package/packages/button/fragment.graphql +0 -6
- package/packages/button/helpers/normalizeButtonTheme.js +0 -49
- package/packages/button/icons/arrow-right.svg.js +0 -1
- package/packages/button/icons/chevron-down.svg.js +0 -1
- package/packages/button/icons/download.svg.js +0 -1
- package/packages/button/icons/external-link.svg.js +0 -1
- package/packages/button/index.js +0 -86
- package/packages/button/package-lock.json +0 -18
- package/packages/button/package.json +0 -21
- package/packages/button/styles/index.css +0 -122
- package/packages/button/styles/variant-primary.css +0 -232
- package/packages/button/styles/variant-secondary.css +0 -179
- package/packages/button/styles/variant-tertiary-neutral.css +0 -65
- package/packages/button/styles/variant-tertiary.css +0 -182
- package/packages/call-to-action/LICENSE +0 -373
- package/packages/call-to-action/README.md +0 -3
- package/packages/call-to-action/index.js +0 -67
- package/packages/call-to-action/package-lock.json +0 -27
- package/packages/call-to-action/package.json +0 -21
- package/packages/call-to-action/style.css +0 -1
- package/packages/call-to-action/styles/_temp-spacing-tokens.css +0 -33
- package/packages/call-to-action/styles/common.css +0 -27
- package/packages/call-to-action/styles/index.css +0 -4
- package/packages/call-to-action/styles/variant-centered.css +0 -44
- package/packages/call-to-action/styles/variant-compact.css +0 -46
- package/packages/call-to-action/styles/variant-links.css +0 -32
- package/packages/callouts/LICENSE +0 -373
- package/packages/callouts/README.md +0 -8
- package/packages/callouts/index.js +0 -67
- package/packages/callouts/package-lock.json +0 -33
- package/packages/callouts/package.json +0 -20
- package/packages/callouts/partials/callout-item/fixtures/default.json +0 -9
- package/packages/callouts/partials/callout-item/index.js +0 -71
- package/packages/callouts/partials/callout-item/style.css +0 -76
- package/packages/callouts/style.css +0 -1
- package/packages/callouts/styles/_temp-reset.css +0 -11
- package/packages/callouts/styles/_temp-spacing-tokens.css +0 -41
- package/packages/callouts/styles/index.css +0 -124
- package/packages/case-study-slider/LICENSE +0 -373
- package/packages/case-study-slider/Logo.js +0 -6
- package/packages/case-study-slider/StatusBar.js +0 -14
- package/packages/case-study-slider/StatusBar.test.js +0 -32
- package/packages/case-study-slider/docs.mdx +0 -144
- package/packages/case-study-slider/fragment.graphql +0 -33
- package/packages/case-study-slider/index.js +0 -229
- package/packages/case-study-slider/index.test.js +0 -279
- package/packages/case-study-slider/package-lock.json +0 -72
- package/packages/case-study-slider/package.json +0 -20
- package/packages/case-study-slider/props.js +0 -182
- package/packages/case-study-slider/readme.md +0 -7
- package/packages/case-study-slider/style.css +0 -176
- package/packages/checkbox-input/LICENSE +0 -373
- package/packages/checkbox-input/index.js +0 -55
- package/packages/checkbox-input/package-lock.json +0 -13
- package/packages/checkbox-input/package.json +0 -20
- package/packages/checkbox-input/readme.md +0 -19
- package/packages/checkbox-input/style.css +0 -110
- package/packages/code-block/LICENSE +0 -373
- package/packages/code-block/README.md +0 -9
- package/packages/code-block/fragment.graphql +0 -10
- package/packages/code-block/img/clipboard.svg +0 -1
- package/packages/code-block/index.js +0 -85
- package/packages/code-block/languages/sentinel.js +0 -71
- package/packages/code-block/package-lock.json +0 -68
- package/packages/code-block/package.json +0 -22
- package/packages/code-block/style.css +0 -162
- package/packages/consent-manager/LICENSE +0 -373
- package/packages/consent-manager/banner.js +0 -39
- package/packages/consent-manager/cookies.js +0 -53
- package/packages/consent-manager/dialog.js +0 -286
- package/packages/consent-manager/icn_close.js +0 -19
- package/packages/consent-manager/index.js +0 -119
- package/packages/consent-manager/integrations.js +0 -92
- package/packages/consent-manager/load.js +0 -139
- package/packages/consent-manager/package-lock.json +0 -45
- package/packages/consent-manager/package.json +0 -24
- package/packages/consent-manager/style.css +0 -209
- package/packages/content/LICENSE +0 -373
- package/packages/content/README.md +0 -8
- package/packages/content/index.js +0 -9
- package/packages/content/package.json +0 -17
- package/packages/content/style.css +0 -322
- package/packages/content-cta/LICENSE +0 -373
- package/packages/content-cta/README.md +0 -3
- package/packages/content-cta/docs.mdx +0 -25
- package/packages/content-cta/index.js +0 -49
- package/packages/content-cta/index.test.js +0 -78
- package/packages/content-cta/package-lock.json +0 -27
- package/packages/content-cta/package.json +0 -20
- package/packages/content-cta/props.js +0 -41
- package/packages/content-cta/stories/docs.mdx +0 -0
- package/packages/content-cta/stories/examples.stories.js +0 -51
- package/packages/content-cta/stories/with-knobs.stories.js +0 -58
- package/packages/content-cta/style.css +0 -80
- package/packages/docs-page/LICENSE +0 -373
- package/packages/docs-page/README.md +0 -51
- package/packages/docs-page/components.js +0 -11
- package/packages/docs-page/docs.mdx +0 -71
- package/packages/docs-page/img/github-logo.svg +0 -1
- package/packages/docs-page/index.js +0 -75
- package/packages/docs-page/index.test.js +0 -18
- package/packages/docs-page/package-lock.json +0 -138
- package/packages/docs-page/package.json +0 -28
- package/packages/docs-page/props.js +0 -59
- package/packages/docs-page/server.js +0 -137
- package/packages/docs-page/style.css +0 -120
- package/packages/docs-page/temporary_jump-to-section.js +0 -64
- package/packages/docs-sidenav/LICENSE +0 -373
- package/packages/docs-sidenav/README.md +0 -7
- package/packages/docs-sidenav/chevron-icon.js +0 -18
- package/packages/docs-sidenav/img/external.svg +0 -7
- package/packages/docs-sidenav/index.js +0 -457
- package/packages/docs-sidenav/menu-icon.js +0 -14
- package/packages/docs-sidenav/package-lock.json +0 -26
- package/packages/docs-sidenav/package.json +0 -21
- package/packages/docs-sidenav/style.css +0 -302
- package/packages/enterprise-alert/LICENSE +0 -373
- package/packages/enterprise-alert/README.md +0 -9
- package/packages/enterprise-alert/index.js +0 -28
- package/packages/enterprise-alert/package-lock.json +0 -13
- package/packages/enterprise-alert/package.json +0 -23
- package/packages/enterprise-alert/style.css +0 -91
- package/packages/featured-slider/LICENSE +0 -373
- package/packages/featured-slider/README.md +0 -3
- package/packages/featured-slider/StatusBar.js +0 -14
- package/packages/featured-slider/docs.mdx +0 -60
- package/packages/featured-slider/index.js +0 -231
- package/packages/featured-slider/index.test.js +0 -59
- package/packages/featured-slider/package-lock.json +0 -66
- package/packages/featured-slider/package.json +0 -22
- package/packages/featured-slider/props.js +0 -82
- package/packages/featured-slider/style.css +0 -204
- package/packages/hashi-stack-menu/LICENSE +0 -373
- package/packages/hashi-stack-menu/README.md +0 -3
- package/packages/hashi-stack-menu/assets/icon-dropdown.svg +0 -1
- package/packages/hashi-stack-menu/assets/logo.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/boundary-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/consul-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/nomad-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/packer-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/terraform-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/vagrant-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/vault-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/assets/product-icons/waypoint-icon-color.svg +0 -1
- package/packages/hashi-stack-menu/browse-panel/browse-panel.module.css +0 -33
- package/packages/hashi-stack-menu/browse-panel/index.jsx +0 -9
- package/packages/hashi-stack-menu/data/index.js +0 -125
- package/packages/hashi-stack-menu/hashi-stack-menu.module.css +0 -41
- package/packages/hashi-stack-menu/index.jsx +0 -51
- package/packages/hashi-stack-menu/nav-item/index.jsx +0 -100
- package/packages/hashi-stack-menu/nav-item/nav-item.module.css +0 -64
- package/packages/hashi-stack-menu/package-lock.json +0 -18
- package/packages/hashi-stack-menu/package.json +0 -17
- package/packages/hashi-stack-menu/stack-group/index.jsx +0 -16
- package/packages/hashi-stack-menu/stack-group/stack-group.module.css +0 -29
- package/packages/hashi-stack-menu/stack-item/index.jsx +0 -35
- package/packages/hashi-stack-menu/stack-item/stack-item.module.css +0 -58
- package/packages/hashi-stack-menu/stack-menu-section/index.jsx +0 -18
- package/packages/hashi-stack-menu/stack-menu-section/stack-menu-section.module.css +0 -26
- package/packages/hashi-stack-menu/use-on-click-outside-dropdown.js +0 -22
- package/packages/head/LICENSE +0 -373
- package/packages/head/README.md +0 -236
- package/packages/head/index.d.ts +0 -107
- package/packages/head/index.js +0 -66
- package/packages/head/package.json +0 -17
- package/packages/hero/LICENSE +0 -373
- package/packages/hero/README.md +0 -31
- package/packages/hero/arrow-icon.js +0 -24
- package/packages/hero/carousel.js +0 -153
- package/packages/hero/fragment.graphql +0 -55
- package/packages/hero/heroLeadForm.js +0 -107
- package/packages/hero/index.js +0 -129
- package/packages/hero/package-lock.json +0 -273
- package/packages/hero/package.json +0 -28
- package/packages/hero/style.css +0 -501
- package/packages/image/LICENSE +0 -373
- package/packages/image/fragment.graphql +0 -5
- package/packages/image/index.js +0 -81
- package/packages/image/package-lock.json +0 -33
- package/packages/image/package.json +0 -21
- package/packages/image/readme.md +0 -27
- package/packages/inline-svg/LICENSE +0 -373
- package/packages/inline-svg/README.md +0 -9
- package/packages/inline-svg/docs.mdx +0 -15
- package/packages/inline-svg/index.js +0 -23
- package/packages/inline-svg/index.test.js +0 -50
- package/packages/inline-svg/package.json +0 -30
- package/packages/inline-svg/props.js +0 -10
- package/packages/learn-callout/LICENSE +0 -373
- package/packages/learn-callout/README.md +0 -9
- package/packages/learn-callout/docs.mdx +0 -31
- package/packages/learn-callout/index.js +0 -57
- package/packages/learn-callout/index.test.js +0 -49
- package/packages/learn-callout/props.js +0 -47
- package/packages/learn-callout/style.css +0 -207
- package/packages/link-wrap/LICENSE +0 -373
- package/packages/link-wrap/README.md +0 -44
- package/packages/link-wrap/index.js +0 -40
- package/packages/link-wrap/package-lock.json +0 -5
- package/packages/link-wrap/package.json +0 -17
- package/packages/logo-grid/LICENSE +0 -373
- package/packages/logo-grid/README.md +0 -26
- package/packages/logo-grid/fragment.graphql +0 -17
- package/packages/logo-grid/index.js +0 -157
- package/packages/logo-grid/package-lock.json +0 -111
- package/packages/logo-grid/package.json +0 -21
- package/packages/logo-grid/style.css +0 -148
- package/packages/product-downloader/LICENSE +0 -373
- package/packages/product-downloader/README.md +0 -9
- package/packages/product-downloader/index.js +0 -102
- package/packages/product-downloader/package-lock.json +0 -103
- package/packages/product-downloader/package.json +0 -18
- package/packages/product-downloader/partials/download-cards/index.jsx +0 -125
- package/packages/product-downloader/partials/download-cards/style.module.css +0 -152
- package/packages/product-downloader/partials/dropdown/index.jsx +0 -58
- package/packages/product-downloader/partials/dropdown/style.module.css +0 -28
- package/packages/product-downloader/partials/logos/fastly.svg +0 -7
- package/packages/product-downloader/partials/release-information/index.jsx +0 -148
- package/packages/product-downloader/partials/release-information/style.module.css +0 -101
- package/packages/product-downloader/style.module.css +0 -100
- package/packages/product-downloader/utils/downloader.js +0 -136
- package/packages/product-features-list/LICENSE +0 -373
- package/packages/product-features-list/README.md +0 -3
- package/packages/product-features-list/index.js +0 -30
- package/packages/product-features-list/package-lock.json +0 -42
- package/packages/product-features-list/package.json +0 -20
- package/packages/product-features-list/style.css +0 -90
- package/packages/search/LICENSE +0 -373
- package/packages/search/README.md +0 -188
- package/packages/search/hits.js +0 -196
- package/packages/search/img/return.svg.js +0 -1
- package/packages/search/img/search-legend-enter.svg.js +0 -1
- package/packages/search/img/search-legend-escape.svg.js +0 -1
- package/packages/search/img/search-legend-page.svg.js +0 -1
- package/packages/search/img/search-x.svg.js +0 -1
- package/packages/search/img/search.svg.js +0 -1
- package/packages/search/img/slash-search-toggle.js +0 -17
- package/packages/search/index.js +0 -60
- package/packages/search/legend.js +0 -32
- package/packages/search/package-lock.json +0 -931
- package/packages/search/package.json +0 -29
- package/packages/search/provider.js +0 -81
- package/packages/search/search-box.js +0 -139
- package/packages/search/style.css +0 -366
- package/packages/search/tools.js +0 -166
- package/packages/section-header/LICENSE +0 -373
- package/packages/section-header/README.md +0 -13
- package/packages/section-header/fragment.graphql +0 -5
- package/packages/section-header/index.js +0 -42
- package/packages/section-header/package-lock.json +0 -18
- package/packages/section-header/package.json +0 -20
- package/packages/section-header/style.css +0 -18
- package/packages/select-input/LICENSE +0 -373
- package/packages/select-input/README.md +0 -1
- package/packages/select-input/img/dropdown-arrow.svg +0 -1
- package/packages/select-input/index.js +0 -80
- package/packages/select-input/package-lock.json +0 -70
- package/packages/select-input/package.json +0 -19
- package/packages/select-input/style.css +0 -88
- package/packages/subnav/LICENSE +0 -373
- package/packages/subnav/README.md +0 -85
- package/packages/subnav/helpers/globalThis.js +0 -9
- package/packages/subnav/helpers/traverse/index.js +0 -34
- package/packages/subnav/helpers/useNavRef.js +0 -16
- package/packages/subnav/helpers/useOverflowRef.js +0 -76
- package/packages/subnav/helpers/useStuckRef.js +0 -43
- package/packages/subnav/icons/boundary-logo-color.svgr.js +0 -32
- package/packages/subnav/icons/chevron-down.svg.js +0 -3
- package/packages/subnav/icons/consul-logo-color.svgr.js +0 -44
- package/packages/subnav/icons/hcp-logo-black-white.svgr.js +0 -29
- package/packages/subnav/icons/nomad-logo-color.svgr.js +0 -50
- package/packages/subnav/icons/packer-logo-color.svgr.js +0 -40
- package/packages/subnav/icons/terraform-logo-color.svgr.js +0 -44
- package/packages/subnav/icons/vagrant-logo-color.svgr.js +0 -38
- package/packages/subnav/icons/vault-logo-color.svgr.js +0 -32
- package/packages/subnav/icons/waypoint-logo-color.svgr.js +0 -28
- package/packages/subnav/index.js +0 -107
- package/packages/subnav/package-lock.json +0 -56
- package/packages/subnav/package.json +0 -25
- package/packages/subnav/partials/CtaLinks/github-stars-link/formatStarCount/index.js +0 -17
- package/packages/subnav/partials/CtaLinks/github-stars-link/index.js +0 -71
- package/packages/subnav/partials/CtaLinks/github-stars-link/parseGithubUrl/index.js +0 -25
- package/packages/subnav/partials/CtaLinks/github-stars-link/style.css +0 -78
- package/packages/subnav/partials/CtaLinks/icons/github-logo.js +0 -14
- package/packages/subnav/partials/CtaLinks/icons/star.js +0 -14
- package/packages/subnav/partials/CtaLinks/index.js +0 -48
- package/packages/subnav/partials/CtaLinks/style.css +0 -32
- package/packages/subnav/partials/DropdownTrigger/index.js +0 -20
- package/packages/subnav/partials/DropdownTrigger/style.css +0 -27
- package/packages/subnav/partials/MenuItemsDefault/index.js +0 -131
- package/packages/subnav/partials/MenuItemsDefault/style.css +0 -63
- package/packages/subnav/partials/MenuItemsOverflow/index.js +0 -117
- package/packages/subnav/partials/MenuItemsOverflow/style.css +0 -38
- package/packages/subnav/partials/TitleLink/index.js +0 -40
- package/packages/subnav/partials/TitleLink/style.css +0 -21
- package/packages/subnav/style.css +0 -6
- package/packages/subnav/styles/_temp-g-svg.css +0 -22
- package/packages/subnav/styles/_temp-resets.css +0 -15
- package/packages/subnav/styles/index.css +0 -103
- package/packages/tabbed-accordion/LICENSE +0 -373
- package/packages/tabbed-accordion/README.md +0 -3
- package/packages/tabbed-accordion/fixtures/base.json +0 -44
- package/packages/tabbed-accordion/index.js +0 -27
- package/packages/tabbed-accordion/package-lock.json +0 -27
- package/packages/tabbed-accordion/package.json +0 -19
- package/packages/tabbed-accordion/style/_temp-spacing-tokens.css +0 -36
- package/packages/tabbed-accordion/style/index.css +0 -22
- package/packages/tabbed-accordion/style.css +0 -1
- package/packages/tabs/LICENSE +0 -373
- package/packages/tabs/README.md +0 -31
- package/packages/tabs/index.js +0 -41
- package/packages/tabs/package-lock.json +0 -73
- package/packages/tabs/package.json +0 -18
- package/packages/tabs/partials/TabTriggers/helpers/smoothScroll.js +0 -77
- package/packages/tabs/partials/TabTriggers/icons/chevron-right_black.svg.js +0 -1
- package/packages/tabs/partials/TabTriggers/index.js +0 -143
- package/packages/tabs/partials/TabTriggers/partials/TabTrigger/icons/tooltip.svg.js +0 -1
- package/packages/tabs/partials/TabTriggers/partials/TabTrigger/index.js +0 -37
- package/packages/tabs/partials/TabTriggers/partials/TabTrigger/style.css +0 -75
- package/packages/tabs/partials/TabTriggers/style.css +0 -152
- package/packages/tabs/style.css +0 -67
- package/packages/terminal/LICENSE +0 -373
- package/packages/terminal/README.md +0 -9
- package/packages/terminal/Terminal.module.css +0 -146
- package/packages/terminal/index.jsx +0 -46
- package/packages/terminal/package.json +0 -17
- package/packages/text-input/LICENSE +0 -373
- package/packages/text-input/README.md +0 -24
- package/packages/text-input/index.js +0 -42
- package/packages/text-input/package-lock.json +0 -13
- package/packages/text-input/package.json +0 -19
- package/packages/text-input/style.css +0 -68
- package/packages/text-split/LICENSE +0 -373
- package/packages/text-split/README.md +0 -3
- package/packages/text-split/index.js +0 -66
- package/packages/text-split/package-lock.json +0 -35
- package/packages/text-split/package.json +0 -20
- package/packages/text-split/partials/button-group/index.js +0 -40
- package/packages/text-split/partials/button-group/style.css +0 -28
- package/packages/text-split/partials/checkbox-list/icons/check-circle.svg.jsx +0 -39
- package/packages/text-split/partials/checkbox-list/index.js +0 -28
- package/packages/text-split/partials/checkbox-list/style.css +0 -59
- package/packages/text-split/style.css +0 -1
- package/packages/text-split/styles/_temp-spacing-tokens.css +0 -37
- package/packages/text-split/styles/index.css +0 -86
- package/packages/text-split-with-code/LICENSE +0 -373
- package/packages/text-split-with-code/README.md +0 -13
- package/packages/text-split-with-code/index.js +0 -29
- package/packages/text-split-with-code/package-lock.json +0 -117
- package/packages/text-split-with-code/package.json +0 -21
- package/packages/text-split-with-code/style.css +0 -42
- package/packages/text-split-with-image/LICENSE +0 -373
- package/packages/text-split-with-image/README.md +0 -12
- package/packages/text-split-with-image/index.js +0 -11
- package/packages/text-split-with-image/package-lock.json +0 -75
- package/packages/text-split-with-image/package.json +0 -17
- package/packages/text-split-with-logo-grid/LICENSE +0 -373
- package/packages/text-split-with-logo-grid/README.md +0 -8
- package/packages/text-split-with-logo-grid/index.js +0 -63
- package/packages/text-split-with-logo-grid/package-lock.json +0 -90
- package/packages/text-split-with-logo-grid/package.json +0 -18
- package/packages/text-split-with-logo-grid/style.css +0 -88
- package/packages/toggle/LICENSE +0 -373
- package/packages/toggle/index.js +0 -22
- package/packages/toggle/package-lock.json +0 -5
- package/packages/toggle/package.json +0 -17
- package/packages/toggle/readme.md +0 -7
- package/packages/toggle/style.css +0 -35
- package/packages/vertical-text-block-list/LICENSE +0 -373
- package/packages/vertical-text-block-list/README.md +0 -15
- package/packages/vertical-text-block-list/index.js +0 -54
- package/packages/vertical-text-block-list/package-lock.json +0 -60
- package/packages/vertical-text-block-list/package.json +0 -22
- package/packages/vertical-text-block-list/style.css +0 -104
- package/pages/_app.jsx +0 -5
- package/pages/global.css +0 -43
- package/pages/index.jsx +0 -16
- package/prettier.config.js +0 -4
- package/scripts/release-check-branch.sh +0 -15
- package/scripts/release-check-npm-auth.sh +0 -39
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import React, { useState, useMemo } from 'react'
|
|
2
|
-
import LinkWrap from '@hashicorp/react-link-wrap'
|
|
3
|
-
import MenuIcon from './menu-icon'
|
|
4
|
-
import ChevronIcon from './chevron-icon'
|
|
5
|
-
import fuzzysearch from 'fuzzysearch'
|
|
6
|
-
|
|
7
|
-
export default function DocsSidenav({
|
|
8
|
-
data,
|
|
9
|
-
order,
|
|
10
|
-
currentPage,
|
|
11
|
-
category,
|
|
12
|
-
Link,
|
|
13
|
-
product,
|
|
14
|
-
disableFilter = false
|
|
15
|
-
}) {
|
|
16
|
-
const [open, setOpen] = useState(false)
|
|
17
|
-
const [filterInput, setFilterInput] = useState('')
|
|
18
|
-
|
|
19
|
-
// we memoize here as the page matching is a pure, expensive calculation that
|
|
20
|
-
// does not need to re-run every render
|
|
21
|
-
const allContent = useMemo(
|
|
22
|
-
() => matchOrderToData(currentPage, order, calculatePath(data, category)),
|
|
23
|
-
[order, data, category, currentPage]
|
|
24
|
-
)
|
|
25
|
-
const [content, setContent] = useState(allContent)
|
|
26
|
-
|
|
27
|
-
// remove leading slash and base level "docs"/"api"/etc
|
|
28
|
-
const current = currentPage.split('/').slice(1 + category.split('/').length)
|
|
29
|
-
|
|
30
|
-
return (
|
|
31
|
-
<div
|
|
32
|
-
className={`g-docs-sidenav${open ? ' open' : ''}${
|
|
33
|
-
product ? ` theme-${product}` : ''
|
|
34
|
-
}`}
|
|
35
|
-
data-testid='root'
|
|
36
|
-
>
|
|
37
|
-
<div
|
|
38
|
-
className='toggle'
|
|
39
|
-
onClick={() => setOpen(!open)}
|
|
40
|
-
data-testid='mobile-menu'
|
|
41
|
-
>
|
|
42
|
-
<span>
|
|
43
|
-
<MenuIcon /> Documentation Menu
|
|
44
|
-
</span>
|
|
45
|
-
</div>
|
|
46
|
-
<ul className='nav docs-nav'>
|
|
47
|
-
<div className='mobile-close' onClick={() => setOpen(!open)}>
|
|
48
|
-
×
|
|
49
|
-
</div>
|
|
50
|
-
{!disableFilter && (
|
|
51
|
-
<input
|
|
52
|
-
className='filter'
|
|
53
|
-
placeholder='Filter...'
|
|
54
|
-
onChange={filterInputChange.bind(
|
|
55
|
-
null,
|
|
56
|
-
setFilterInput,
|
|
57
|
-
JSON.parse(JSON.stringify(allContent)), // deep clone
|
|
58
|
-
setContent
|
|
59
|
-
)}
|
|
60
|
-
value={filterInput}
|
|
61
|
-
/>
|
|
62
|
-
)}
|
|
63
|
-
{renderNavTree(category, content, current, filterInput, Link)}
|
|
64
|
-
</ul>
|
|
65
|
-
</div>
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Filter nav items
|
|
70
|
-
function filterInputChange(setFilterInput, allContent, setContent, e) {
|
|
71
|
-
setFilterInput(e.target.value)
|
|
72
|
-
setContent(findContent(allContent, e.target.value.toLowerCase()))
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function findContent(content, value) {
|
|
76
|
-
// if there's no search value we short-circuit and return everything
|
|
77
|
-
if (!value) return content
|
|
78
|
-
|
|
79
|
-
return content.reduce((acc, item) => {
|
|
80
|
-
// recurse on content, depth-first
|
|
81
|
-
if (item.content) item.content = findContent(item.content, value)
|
|
82
|
-
|
|
83
|
-
// here we check for conditions on a branch node
|
|
84
|
-
// first, if a branch has children, that means at least one of the leaf nodes has
|
|
85
|
-
// matched, so we push the branch so that the leaf is displayed
|
|
86
|
-
const hasContent = item.content && item.content.length
|
|
87
|
-
// second, we check to see if a branch's title matches against the query, if so we
|
|
88
|
-
// push the branch because it matched directly
|
|
89
|
-
const categoryTitleMatches =
|
|
90
|
-
item.indexData &&
|
|
91
|
-
fuzzysearch(value, item.indexData.page_title.toLowerCase())
|
|
92
|
-
if (hasContent || categoryTitleMatches) {
|
|
93
|
-
if (categoryTitleMatches) {
|
|
94
|
-
item.matchedFilter = true
|
|
95
|
-
}
|
|
96
|
-
acc.push(item)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// now we check against content on leaf nodes
|
|
100
|
-
if (item.page_title && fuzzysearch(value, item.page_title.toLowerCase())) {
|
|
101
|
-
item.matchedFilter = true
|
|
102
|
-
acc.push(item)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// and that's all!
|
|
106
|
-
return acc
|
|
107
|
-
}, [])
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Given a set of front matter data, adds a `path` variable formatted for correct links
|
|
111
|
-
function calculatePath(pageData, category) {
|
|
112
|
-
return pageData.map(p => {
|
|
113
|
-
p.path = p.__resourcePath
|
|
114
|
-
.split('/')
|
|
115
|
-
.slice(category.split('/').length)
|
|
116
|
-
.join('/')
|
|
117
|
-
.replace(/\.mdx$/, '')
|
|
118
|
-
return p
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Matches up user-defined navigation hierarcy with front matter from the correct pages.
|
|
123
|
-
//
|
|
124
|
-
// For context, the user-defined nav hierarchy is called "content" in this function, and
|
|
125
|
-
// the shape of its data is as such:
|
|
126
|
-
// [{
|
|
127
|
-
// category: 'foo',
|
|
128
|
-
// content: ['bar', 'baz']
|
|
129
|
-
// },
|
|
130
|
-
// '--------------',
|
|
131
|
-
// {
|
|
132
|
-
// category: 'quux'
|
|
133
|
-
// }]
|
|
134
|
-
//
|
|
135
|
-
// The front matter data is structured as such:
|
|
136
|
-
// {
|
|
137
|
-
// __resourcePath: '/docs/foo/bar.mdx',
|
|
138
|
-
// path: 'foo/bar',
|
|
139
|
-
// ...frontMatterObject
|
|
140
|
-
// }
|
|
141
|
-
function matchOrderToData(currentPage, order, pageData, stack = []) {
|
|
142
|
-
// go through each item in the user-established order
|
|
143
|
-
return order.map(item => {
|
|
144
|
-
if (typeof item === 'string') {
|
|
145
|
-
// if a string like '-----' is given, we render a divider
|
|
146
|
-
if (item.match(/^-+$/)) return item
|
|
147
|
-
|
|
148
|
-
// if we have a string, that's a terminal page. we match it with
|
|
149
|
-
// the provided page data and return the enhanced object
|
|
150
|
-
const itemData = pageData.filter(page => {
|
|
151
|
-
// break down the full path and strip the html extension
|
|
152
|
-
const pageDataPath = page.path.split('/')
|
|
153
|
-
// copy the stack and push the item as the file path
|
|
154
|
-
const contentPath = [...stack, item]
|
|
155
|
-
// match them up!
|
|
156
|
-
return pageDataPath.join('/') === contentPath.join('/')
|
|
157
|
-
})[0]
|
|
158
|
-
|
|
159
|
-
// If we don't have a match here, the user has defined a page that doesn't exist, so let's give them
|
|
160
|
-
// a very clear error message on how to resolve this situation.
|
|
161
|
-
if (!itemData) {
|
|
162
|
-
const pageCategory = currentPage.split('/')[1]
|
|
163
|
-
const missingPath = `${pageCategory}/${stack.join('/')}/${item}.mdx`
|
|
164
|
-
const cat = `${stack.join('/')}`
|
|
165
|
-
throw new Error(
|
|
166
|
-
`The page "${item}" was not found within the category "${cat}". Please double-check to ensure that "${missingPath}" exists. If this page was never intended to exist, remove the key "${item}" from the category "${cat}" in "data/${pageCategory}-navigation.js"`
|
|
167
|
-
)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return itemData
|
|
171
|
-
} else if (item.title && item.href) {
|
|
172
|
-
// this is the syntax for direct links, we can return them directly
|
|
173
|
-
return item
|
|
174
|
-
} else {
|
|
175
|
-
// catch errors where direct links are formatted incorrectly
|
|
176
|
-
if (item.title || item.href) {
|
|
177
|
-
throw new Error(
|
|
178
|
-
`Malformed direct sidebar link:\n\n ${JSON.stringify(
|
|
179
|
-
item
|
|
180
|
-
)}\n\nDirect links must have a "href" and a "title" property.`
|
|
181
|
-
)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// this method mutates the object, which causes an error on subsequent renders,
|
|
185
|
-
// so we clone it first.
|
|
186
|
-
const _item = Object.assign({}, item)
|
|
187
|
-
|
|
188
|
-
// keep track of all parent categories
|
|
189
|
-
_item.stack = stack.concat(_item.category)
|
|
190
|
-
|
|
191
|
-
// using a category without content is not allowed
|
|
192
|
-
if (_item.category && !_item.content) {
|
|
193
|
-
const topLevelCategory = currentPage.split('/')[1]
|
|
194
|
-
throw new Error(
|
|
195
|
-
`The item "${_item.stack.join(
|
|
196
|
-
'/'
|
|
197
|
-
)}" within "data/${topLevelCategory}-navigation.js" has a category but no content, indicating that there is a folder that contains only an "index.mdx" file, which is not allowed. To fix this, move and rename "pages/${topLevelCategory}/${_item.stack.join(
|
|
198
|
-
'/'
|
|
199
|
-
) + '/index.mdx'}" to "pages/${topLevelCategory}/${_item.stack.join(
|
|
200
|
-
'/'
|
|
201
|
-
) + '.mdx'}", then change the value from "{ category: '${
|
|
202
|
-
_item.category
|
|
203
|
-
}' }" to just "${item.category}"`
|
|
204
|
-
)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// grab the index page, as it can contain data about the top level link
|
|
208
|
-
pageData.some(page => {
|
|
209
|
-
const pageDataPath = page.path.split('/')
|
|
210
|
-
|
|
211
|
-
const depthLevelsMatch = _item.stack.length === pageDataPath.length - 1
|
|
212
|
-
const pathItemsMatch = _item.stack.every(
|
|
213
|
-
(s, i) => s === pageDataPath[i]
|
|
214
|
-
)
|
|
215
|
-
const isIndexFile = pageDataPath[pageDataPath.length - 1] === 'index'
|
|
216
|
-
|
|
217
|
-
if (depthLevelsMatch && pathItemsMatch && isIndexFile) {
|
|
218
|
-
_item.indexData = page
|
|
219
|
-
// now that we know its an index page, we can remove it from the path, as
|
|
220
|
-
// its not necessary for links
|
|
221
|
-
_item.indexData.path = _item.indexData.path.replace(/\/index$/, '')
|
|
222
|
-
return true
|
|
223
|
-
}
|
|
224
|
-
})
|
|
225
|
-
|
|
226
|
-
// error handling for nav nesting mistakes
|
|
227
|
-
if (!_item.indexData && !_item.name) {
|
|
228
|
-
throw new Error(
|
|
229
|
-
`An index page or "name" property is required for all categories.\nIf you would like an index page for this category, please add an index file at the path "${_item.stack.join(
|
|
230
|
-
'/'
|
|
231
|
-
)}/index.mdx".\nIf you do not want an index page for this category, please add a "name" property to the category object to specify the category's human-readable title.\n\nItem:\n${JSON.stringify(
|
|
232
|
-
_item,
|
|
233
|
-
null,
|
|
234
|
-
2
|
|
235
|
-
)}`
|
|
236
|
-
)
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// using "name" and manually adding an "overview" page is silly. let's prevent that.
|
|
240
|
-
if (_item.name && _item.content.includes('overview')) {
|
|
241
|
-
throw new Error(`The category "${_item.stack.join(
|
|
242
|
-
'/'
|
|
243
|
-
)}" is using a "name" property to indicate that it has no index, but also has a manually added "overview" page. This can be fixed with the following steps:
|
|
244
|
-
|
|
245
|
-
- Change the "overview.mdx" page to be "index.mdx"
|
|
246
|
-
- Remove the "name" property from the "${
|
|
247
|
-
_item.category
|
|
248
|
-
}" data, instead indicate the category's name using the frontmatter on the new "index.mdx" page`)
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// otherwise, it's a nested category. if the category has content, we
|
|
252
|
-
// recurse, passing in that category's content, and the matching
|
|
253
|
-
// subsection of page data from middleman
|
|
254
|
-
if (_item.content) {
|
|
255
|
-
_item.content = matchOrderToData(
|
|
256
|
-
currentPage,
|
|
257
|
-
_item.content,
|
|
258
|
-
filterData(pageData, _item.category),
|
|
259
|
-
_item.stack
|
|
260
|
-
)
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
return _item
|
|
264
|
-
}
|
|
265
|
-
})
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// Recursively renders the markup for the nested navigation
|
|
269
|
-
function renderNavTree(category, content, currentPath, filterInput, Link) {
|
|
270
|
-
return content.map((item, idx) => {
|
|
271
|
-
// dividers are the only items left as strings
|
|
272
|
-
// This array is stable, so we can use index as key
|
|
273
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
274
|
-
if (typeof item === 'string') return <hr key={idx} />
|
|
275
|
-
|
|
276
|
-
// if the link property has been set to true, we're rendering a direct link
|
|
277
|
-
// rather than a link to a docs page
|
|
278
|
-
if (item.title && item.href) {
|
|
279
|
-
return (
|
|
280
|
-
<li
|
|
281
|
-
// This array is stable, so we can use index as key
|
|
282
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
283
|
-
key={idx}
|
|
284
|
-
data-testid={item.href}
|
|
285
|
-
className={item.href.match(/^http[s]*:\/\//) ? 'external' : ''}
|
|
286
|
-
>
|
|
287
|
-
<LinkWrap
|
|
288
|
-
Link={Link}
|
|
289
|
-
href={item.href}
|
|
290
|
-
dangerouslySetInnerHTML={{ __html: item.title }}
|
|
291
|
-
/>
|
|
292
|
-
</li>
|
|
293
|
-
)
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
if (item.path) {
|
|
297
|
-
// if the item has a path, it's a leaf node so we render a link to the page
|
|
298
|
-
let className = ''
|
|
299
|
-
if (
|
|
300
|
-
fileMatch(
|
|
301
|
-
item.path.split('/').filter(x => x),
|
|
302
|
-
currentPath.filter(x => x)
|
|
303
|
-
)
|
|
304
|
-
)
|
|
305
|
-
className += 'active '
|
|
306
|
-
if (item.matchedFilter) className += 'matched'
|
|
307
|
-
|
|
308
|
-
return (
|
|
309
|
-
<li
|
|
310
|
-
// This array is stable, so we can use index as key
|
|
311
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
312
|
-
key={idx}
|
|
313
|
-
className={className}
|
|
314
|
-
data-testid={`/${category}/${item.path}`}
|
|
315
|
-
>
|
|
316
|
-
<LinkWrap
|
|
317
|
-
Link={Link}
|
|
318
|
-
href={`/${category}/${item.path}`}
|
|
319
|
-
dangerouslySetInnerHTML={{
|
|
320
|
-
__html: item.sidebar_title || item.page_title
|
|
321
|
-
}}
|
|
322
|
-
/>
|
|
323
|
-
</li>
|
|
324
|
-
)
|
|
325
|
-
} else {
|
|
326
|
-
// if not, its an index page in a folder, so we render it as an expandable category
|
|
327
|
-
// alternately its a folder with no index page, in which case we skip the "overview" link
|
|
328
|
-
|
|
329
|
-
// here we search for the sidebar title. if the category has an index page, we look on this
|
|
330
|
-
// first, preferring sidebar_title and falling back to page_title. next we look for name, which
|
|
331
|
-
// is the standard for categories without index files, and all else failing, we use the raw
|
|
332
|
-
// folder name itself
|
|
333
|
-
const title = item.indexData
|
|
334
|
-
? item.indexData.sidebar_title || item.indexData.page_title
|
|
335
|
-
: item.name || item.category
|
|
336
|
-
|
|
337
|
-
// we need to know the path of the category/folder itself, which we can get from the stack
|
|
338
|
-
const folderPath = item.stack.join('/')
|
|
339
|
-
|
|
340
|
-
// now we test whether the current url is a match for the category and the page
|
|
341
|
-
const categoryMatches = categoryMatch(folderPath.split('/'), currentPath)
|
|
342
|
-
const fileMatches = fileMatch(
|
|
343
|
-
folderPath.split('/').filter(x => x),
|
|
344
|
-
currentPath.filter(x => x)
|
|
345
|
-
)
|
|
346
|
-
? 'active'
|
|
347
|
-
: ''
|
|
348
|
-
const containsFilterMatches = findFilterMatches(item)
|
|
349
|
-
|
|
350
|
-
let className = ''
|
|
351
|
-
if (item.content) className += 'dir '
|
|
352
|
-
if (categoryMatches) className += 'open active '
|
|
353
|
-
if (containsFilterMatches) className += 'open '
|
|
354
|
-
if (item.matchedFilter && !item.content) className += 'matched'
|
|
355
|
-
|
|
356
|
-
// and finally, we can render the folder
|
|
357
|
-
return (
|
|
358
|
-
<li
|
|
359
|
-
className={className}
|
|
360
|
-
data-testid={`/${category}/${folderPath}`}
|
|
361
|
-
// This array is stable, so we can use index as key
|
|
362
|
-
// eslint-disable-next-line react/no-array-index-key
|
|
363
|
-
key={idx}
|
|
364
|
-
>
|
|
365
|
-
<span>
|
|
366
|
-
{/* Note: this is rendered as a link, but with no href. We should test to see if */}
|
|
367
|
-
{/* a button element would be more semantically appropriate for a11y. */}
|
|
368
|
-
<a
|
|
369
|
-
onClick={item.content && toggleNav}
|
|
370
|
-
data-testid={`/${category}/${folderPath} - link`}
|
|
371
|
-
>
|
|
372
|
-
{item.content ? (
|
|
373
|
-
<>
|
|
374
|
-
<ChevronIcon />{' '}
|
|
375
|
-
{
|
|
376
|
-
<span
|
|
377
|
-
dangerouslySetInnerHTML={{
|
|
378
|
-
__html: title
|
|
379
|
-
}}
|
|
380
|
-
></span>
|
|
381
|
-
}
|
|
382
|
-
</>
|
|
383
|
-
) : (
|
|
384
|
-
<span
|
|
385
|
-
dangerouslySetInnerHTML={{
|
|
386
|
-
__html: title
|
|
387
|
-
}}
|
|
388
|
-
></span>
|
|
389
|
-
)}
|
|
390
|
-
</a>
|
|
391
|
-
</span>
|
|
392
|
-
|
|
393
|
-
{/* if the item has content, we need to recurse */}
|
|
394
|
-
{item.content && (
|
|
395
|
-
<ul className='nav' key={folderPath}>
|
|
396
|
-
{!item.name && (!filterInput || item.matchedFilter) && (
|
|
397
|
-
<li
|
|
398
|
-
className={`${fileMatches ? 'active ' : ''}${
|
|
399
|
-
item.matchedFilter ? 'matched' : ''
|
|
400
|
-
}`}
|
|
401
|
-
data-testid={`/${category}/${folderPath}/index`}
|
|
402
|
-
>
|
|
403
|
-
{/* hide "overview" links if there's no overview (aka there is a name), or while searching */}
|
|
404
|
-
|
|
405
|
-
<LinkWrap Link={Link} href={`/${category}/${folderPath}`}>
|
|
406
|
-
Overview
|
|
407
|
-
</LinkWrap>
|
|
408
|
-
</li>
|
|
409
|
-
)}
|
|
410
|
-
{renderNavTree(
|
|
411
|
-
category,
|
|
412
|
-
item.content,
|
|
413
|
-
currentPath,
|
|
414
|
-
filterInput,
|
|
415
|
-
Link
|
|
416
|
-
)}
|
|
417
|
-
</ul>
|
|
418
|
-
)}
|
|
419
|
-
</li>
|
|
420
|
-
)
|
|
421
|
-
}
|
|
422
|
-
})
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// Given a single item, returns whether it or any of its children have the
|
|
426
|
-
// `matchedFilter` property.
|
|
427
|
-
function findFilterMatches(item) {
|
|
428
|
-
if (item.matchedFilter) return true
|
|
429
|
-
return (
|
|
430
|
-
item.content &&
|
|
431
|
-
item.content.map(child => findFilterMatches(child)).some(x => x)
|
|
432
|
-
)
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
// Given an array of pages, returns only pages whose paths contain the given category.
|
|
436
|
-
function filterData(data, category) {
|
|
437
|
-
return data.filter(d => d.path.split('/').indexOf(category) > -1)
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
// If the nav item category is entirely contained by the current page's path,
|
|
441
|
-
// this means we're inside that category and should mark it as open.
|
|
442
|
-
function categoryMatch(navItemPath, currentPath) {
|
|
443
|
-
return navItemPath.every((item, i) => item === currentPath[i])
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
// If the current page's path exactly matches the passed in nav item's path,
|
|
447
|
-
// we have a match and can highlight the currently active page.
|
|
448
|
-
function fileMatch(navItemPath, currentPath) {
|
|
449
|
-
if (currentPath.length !== navItemPath.length) return false
|
|
450
|
-
return currentPath.every((item, i) => item === navItemPath[i])
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// Opens and closes a given nav category, the easy way
|
|
454
|
-
function toggleNav(e) {
|
|
455
|
-
e.preventDefault()
|
|
456
|
-
e.currentTarget.parentElement.parentElement.classList.toggle('open')
|
|
457
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
|
|
3
|
-
export default function MenuIcon() {
|
|
4
|
-
return (
|
|
5
|
-
<svg width="20" height="20" fill="none" viewBox="0 0 20 20">
|
|
6
|
-
<path
|
|
7
|
-
fill="black"
|
|
8
|
-
fillRule="evenodd"
|
|
9
|
-
d="M3.08268 14.4112C3.00768 14.3362 2.91602 14.2695 2.81602 14.2278C2.66602 14.1695 2.49935 14.1528 2.33268 14.1862C2.28268 14.1945 2.22435 14.2112 2.17435 14.2278C2.12435 14.2528 2.08268 14.2778 2.03268 14.3112C1.99018 14.3362 1.94935 14.3695 1.90768 14.4112C1.83268 14.4862 1.77435 14.5778 1.72435 14.6778C1.68268 14.7862 1.66602 14.8862 1.66602 15.0028C1.66602 15.0528 1.66602 15.1112 1.68268 15.1612C1.69102 15.2195 1.70768 15.2695 1.72435 15.3195C1.74852 15.3695 1.77435 15.4195 1.80768 15.4612C1.83268 15.5112 1.87435 15.5528 1.90768 15.5862C1.94935 15.6278 1.99018 15.6612 2.03268 15.6945C2.08268 15.7195 2.12435 15.7528 2.17435 15.7695C2.22435 15.7862 2.28268 15.8028 2.33268 15.8195C2.39102 15.8278 2.44018 15.8362 2.49935 15.8362C2.60768 15.8362 2.71602 15.8112 2.81602 15.7695C2.91602 15.7278 3.00768 15.6695 3.08268 15.5862C3.12435 15.5528 3.15768 15.5112 3.19102 15.4612C3.21602 15.4195 3.24935 15.3695 3.26602 15.3195C3.29102 15.2695 3.30768 15.2195 3.31602 15.1612C3.32435 15.1112 3.33268 15.0528 3.33268 15.0028C3.33268 14.8862 3.30768 14.7862 3.26602 14.6778C3.22435 14.5778 3.16602 14.4862 3.08268 14.4112ZM3.08268 9.41118C3.00768 9.33618 2.91602 9.26951 2.81602 9.22785C2.66602 9.16951 2.49935 9.15284 2.33268 9.18618C2.28268 9.19451 2.22435 9.21118 2.17435 9.22785C2.12435 9.25284 2.08268 9.27784 2.03268 9.31118C1.99018 9.33618 1.94935 9.36951 1.90768 9.41118C1.74852 9.56951 1.66602 9.77784 1.66602 10.0028C1.66602 10.1112 1.68268 10.2195 1.72435 10.3195C1.77435 10.4195 1.83268 10.5112 1.90768 10.5862C1.94935 10.6278 1.99018 10.6612 2.03268 10.6945C2.08268 10.7195 2.12435 10.7445 2.17435 10.7695C2.22435 10.7862 2.28268 10.8028 2.33268 10.8195C2.39102 10.8278 2.44018 10.8362 2.49935 10.8362C2.60768 10.8362 2.71602 10.8112 2.81602 10.7695C2.91602 10.7278 3.00768 10.6695 3.08268 10.5862C3.16602 10.5112 3.22435 10.4195 3.26602 10.3195C3.30768 10.2195 3.33268 10.1112 3.33268 10.0028C3.33268 9.88618 3.30768 9.78618 3.26602 9.67785C3.22435 9.57785 3.16602 9.48618 3.08268 9.41118ZM3.08268 4.41128C3.00768 4.33628 2.91602 4.26961 2.81602 4.22795C2.66602 4.16128 2.49935 4.15295 2.33268 4.18628C2.28268 4.19461 2.22435 4.21128 2.17435 4.22795C2.12435 4.25295 2.08268 4.27795 2.03268 4.31128C1.99018 4.33628 1.94935 4.36961 1.90768 4.41128C1.74852 4.56961 1.66602 4.78628 1.66602 5.00295C1.66602 5.11128 1.68268 5.21961 1.72435 5.31961C1.77435 5.41961 1.83268 5.51128 1.90768 5.58628C1.94935 5.62795 1.99018 5.66128 2.03268 5.69461C2.08268 5.71961 2.12435 5.74461 2.17435 5.76961C2.22435 5.78628 2.28268 5.80295 2.33268 5.81961C2.39102 5.82795 2.44018 5.83628 2.49935 5.83628C2.60768 5.83628 2.71602 5.81128 2.81602 5.76961C2.91602 5.72795 3.00768 5.66961 3.08268 5.58628C3.16602 5.51128 3.22435 5.41961 3.26602 5.31961C3.30768 5.21961 3.33268 5.11128 3.33268 5.00295C3.33268 4.89461 3.30768 4.78628 3.26602 4.67795C3.22435 4.57795 3.16602 4.48628 3.08268 4.41128ZM17.4967 14.167H6.66341C6.20258 14.167 5.83008 14.5395 5.83008 15.0003C5.83008 15.4603 6.20258 15.8337 6.66341 15.8337H17.4967C17.9576 15.8337 18.3301 15.4603 18.3301 15.0003C18.3301 14.5395 17.9576 14.167 17.4967 14.167ZM17.4967 9.16699H6.66341C6.20258 9.16699 5.83008 9.53949 5.83008 10.0003C5.83008 10.4603 6.20258 10.8337 6.66341 10.8337H17.4967C17.9576 10.8337 18.3301 10.4603 18.3301 10.0003C18.3301 9.53949 17.9576 9.16699 17.4967 9.16699ZM18.3301 5.00033C18.3301 5.46033 17.9576 5.83366 17.4967 5.83366H6.66341C6.20258 5.83366 5.83008 5.46033 5.83008 5.00033C5.83008 4.53949 6.20258 4.16699 6.66341 4.16699H17.4967C17.9576 4.16699 18.3301 4.53949 18.3301 5.00033Z"
|
|
10
|
-
clipRule="evenodd"
|
|
11
|
-
/>
|
|
12
|
-
</svg>
|
|
13
|
-
)
|
|
14
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@hashicorp/react-docs-sidenav",
|
|
3
|
-
"version": "6.0.0",
|
|
4
|
-
"lockfileVersion": 1,
|
|
5
|
-
"requires": true,
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"@hashicorp/react-link-wrap": {
|
|
8
|
-
"version": "0.0.3",
|
|
9
|
-
"resolved": "https://registry.npmjs.org/@hashicorp/react-link-wrap/-/react-link-wrap-0.0.3.tgz",
|
|
10
|
-
"integrity": "sha512-BLH7SLMJZee8md+YU7seiOh0zpa7y8sEhEATYpK2ieFanXAQEgU58lNSC/V3ZdkSXrfyplftYuOj0E3APtE1pg==",
|
|
11
|
-
"requires": {
|
|
12
|
-
"is-absolute-url": "^3.0.3"
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"fuzzysearch": {
|
|
16
|
-
"version": "1.0.3",
|
|
17
|
-
"resolved": "https://registry.npmjs.org/fuzzysearch/-/fuzzysearch-1.0.3.tgz",
|
|
18
|
-
"integrity": "sha1-3/yA9tawQiPyImqnndGUIxCW0Ag="
|
|
19
|
-
},
|
|
20
|
-
"is-absolute-url": {
|
|
21
|
-
"version": "3.0.3",
|
|
22
|
-
"resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
|
|
23
|
-
"integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q=="
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@hashicorp/react-docs-sidenav",
|
|
3
|
-
"description": "Sidebar used for navigation HashiCorp docs",
|
|
4
|
-
"version": "6.0.0",
|
|
5
|
-
"author": "HashiCorp",
|
|
6
|
-
"contributors": [
|
|
7
|
-
"Jeff Escalante"
|
|
8
|
-
],
|
|
9
|
-
"dependencies": {
|
|
10
|
-
"@hashicorp/react-link-wrap": "^0.0.3",
|
|
11
|
-
"fuzzysearch": "1.0.3"
|
|
12
|
-
},
|
|
13
|
-
"license": "MPL-2.0",
|
|
14
|
-
"peerDependencies": {
|
|
15
|
-
"react": "^16.9.0"
|
|
16
|
-
},
|
|
17
|
-
"publishConfig": {
|
|
18
|
-
"access": "public"
|
|
19
|
-
},
|
|
20
|
-
"gitHead": "c47c50a8419f6278073505ebbe25c9fbe4faab07"
|
|
21
|
-
}
|