diff --git a/netlify.toml b/netlify.toml index 4eef05d5..cb2ebf8d 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,3 +1,6 @@ [functions] external_node_modules = ["sharp"] included_files = ["node_modules/sharp/**/*", "./github.pem"] + +[[plugins]] + package = "@netlify/plugin-nextjs" \ No newline at end of file diff --git a/package.json b/package.json index 07980786..1e743415 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/probe-image-size": "^7.2.0", "@types/uuid": "^9.0.0", "@vtex/brand-ui": "^0.46.1", - "@vtexdocs/components": "https://github.com/vtexdocs/components.git#v1.2.0", + "@vtexdocs/components": "https://github.com/vtexdocs/components.git#v2.0.0", "algoliasearch": "^4.14.2", "chalk": "^5.2.0", "copy-text-to-clipboard": "^3.0.1", @@ -57,6 +57,7 @@ "react-intl": "^6.3.2", "react-markdown": "^8.0.3", "react-toastify": "^9.1.1", + "reading-time": "^1.5.0", "rehype-highlight": "^5.0.2", "rehype-img-size": "^1.0.1", "remark-gfm": "^3.0.1", @@ -72,6 +73,7 @@ "devDependencies": { "@commitlint/cli": "^16.2.1", "@commitlint/config-conventional": "^16.2.1", + "@netlify/plugin-nextjs": "^4.41.3", "@types/jsonpath": "^0.2.0", "@types/node": "17.0.21", "@types/react": "17.0.39", diff --git a/public/images/start-here.png b/public/images/start-here.png new file mode 100644 index 00000000..d3b4714a Binary files /dev/null and b/public/images/start-here.png differ diff --git a/public/navigation.json b/public/navigation.json index e6a7ab7a..dcd6ebbf 100644 --- a/public/navigation.json +++ b/public/navigation.json @@ -22,7 +22,7 @@ }, "slug": "amazon-integration-setup", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { "en": "Amazon ", "es": "Amazon", "pt": "Amazon" }, @@ -118,7 +118,7 @@ }, "slug": "mercado-libre-integration-set-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -251,7 +251,7 @@ }, "slug": "magazine-luiza-integration-set-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -318,7 +318,7 @@ }, "slug": "carrefour-integration-set-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -407,7 +407,7 @@ }, "slug": "centauro-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -474,7 +474,7 @@ }, "slug": "integration-with-facebook-business-extension", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -541,7 +541,7 @@ }, "slug": "b2w-integration-set-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -630,7 +630,7 @@ }, "slug": "via-varejo-integration-setup", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -730,7 +730,7 @@ }, "slug": "dafiti-integration-setup", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -808,7 +808,7 @@ }, "slug": "netshoes-integration-set-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -897,7 +897,7 @@ }, "slug": "wish-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -975,7 +975,7 @@ }, "slug": "integrating-with-google-shopping", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1064,7 +1064,7 @@ }, "slug": "how-to-campaign-through-google-ads", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1120,7 +1120,7 @@ }, "slug": "lengow-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1209,7 +1209,7 @@ }, "slug": "facebook-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1276,7 +1276,7 @@ }, "slug": "tiktok-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1343,7 +1343,7 @@ }, "slug": "livelo-integration", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1418,7 +1418,7 @@ "name": { "en": "Catalog", "es": "Catálogo", "pt": "Catálogo" }, "slug": "catalog-101", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1573,7 +1573,7 @@ }, "slug": "logistics-101", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1636,7 +1636,7 @@ "name": { "en": "Prices", "es": "Precios", "pt": "Preços" }, "slug": "prices-101", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1813,7 +1813,7 @@ }, "slug": "promotions", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -1887,7 +1887,7 @@ "name": { "en": "Orders", "es": "Pedidos", "pt": "Pedidos" }, "slug": "orders", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2016,7 +2016,7 @@ "name": { "en": "Payments", "es": "Pagos", "pt": "Pagamentos" }, "slug": "payments", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2105,7 +2105,7 @@ }, "slug": "transactional-emails", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2172,7 +2172,7 @@ }, "slug": "cms", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2239,7 +2239,7 @@ }, "slug": "accounts-and-permissions", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2357,7 +2357,7 @@ "name": { "en": "Go-live", "es": "Go live", "pt": "Go-live" }, "slug": "go-live-your-store", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2420,7 +2420,7 @@ }, "slug": "store-development", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2495,7 +2495,7 @@ }, "slug": "instore-getting-started-and-setting-up", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2595,7 +2595,7 @@ }, "slug": "instore-payments", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2673,7 +2673,7 @@ }, "slug": "instore-using-the-app", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2879,7 +2879,7 @@ }, "slug": "unified-commerce-strategies", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -2954,7 +2954,7 @@ }, "slug": "vtex-intelligent-search", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3189,7 +3189,7 @@ }, "slug": "extensions-hub", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3242,7 +3242,7 @@ }, "slug": "adaptador-vtex", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3321,7 +3321,7 @@ }, "slug": "customer-credit-getting-started", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3377,7 +3377,7 @@ }, "slug": "clustered-payment-conditions", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3444,7 +3444,7 @@ }, "slug": "digital-wallet-e-wallet", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3501,7 +3501,7 @@ }, "slug": "conversational-commerce-vtex", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { @@ -3568,7 +3568,7 @@ }, "slug": "suiteshare", "origin": "", - "type": "category", + "type": "track", "children": [ { "name": { diff --git a/src/components/article-pagination/index.tsx b/src/components/article-pagination/index.tsx index 2e6b7e7f..08629e13 100644 --- a/src/components/article-pagination/index.tsx +++ b/src/components/article-pagination/index.tsx @@ -4,11 +4,11 @@ interface Props { pagination: { previousDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null + name: string | null } nextDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null + name: string | null } } hidePaginationPrevious: boolean @@ -16,7 +16,6 @@ interface Props { } import styles from './styles' -import { useIntl } from 'react-intl' const ArticlePagination = ({ pagination, @@ -24,7 +23,6 @@ const ArticlePagination = ({ hidePaginationPrevious, }: Props) => { const router = useRouter() - const locale = useIntl().locale as 'en' | 'pt' | 'es' const handleClick = (e: { preventDefault: () => void }, slug: string) => { e.preventDefault() @@ -43,7 +41,7 @@ const ArticlePagination = ({ > - {pagination.previousDoc.name?.[locale]} + {pagination.previousDoc.name} « Previous @@ -58,9 +56,7 @@ const ArticlePagination = ({ }} > - - {pagination.nextDoc.name?.[locale]} - + {pagination.nextDoc.name} Next » diff --git a/src/components/documentation-card/index.tsx b/src/components/documentation-card/index.tsx index 877c7046..9233d0f0 100644 --- a/src/components/documentation-card/index.tsx +++ b/src/components/documentation-card/index.tsx @@ -26,7 +26,7 @@ const DocumentationCard = ({ - + {title} diff --git a/src/components/dropdown-menu/index.tsx b/src/components/dropdown-menu/index.tsx index a5fbcd10..94e1e44d 100644 --- a/src/components/dropdown-menu/index.tsx +++ b/src/components/dropdown-menu/index.tsx @@ -1,7 +1,11 @@ import { Box } from '@vtex/brand-ui' import DocumentationCard from 'components/documentation-card' -import { documentationData, updatesData } from 'utils/constants' +import { + menuDocumentationData, + menuSupportData, + updatesData, +} from 'utils/constants' import { useIntl } from 'react-intl' import styles from './styles' @@ -15,7 +19,19 @@ const DropdownMenu = () => { sx={styles.documentationContainer} data-cy="dropdown-menu-first-section" > - {documentationData(intl).map((card) => ( + {menuDocumentationData(intl).map((card) => ( + + ))} + + + {menuSupportData(intl).map((card) => ( + } + + return this.props.children + } +} + +export const SuspenseFallback = (branch) => { + const { asPath } = useRouter() + const logger = getLogger('Suspense Fallback') + logger.error(`Error while processing ${asPath}`) + + return +} diff --git a/src/components/footer/index.tsx b/src/components/footer/index.tsx index 275312f3..f4d65542 100644 --- a/src/components/footer/index.tsx +++ b/src/components/footer/index.tsx @@ -1,12 +1,25 @@ -import { Box, FooterLanding } from '@vtex/brand-ui' +import { Box, Flex, Link } from '@vtex/brand-ui' import styles from './styles' import { getDeveloperPortalURL, - getHelpCenterURL, + getGithubURL, getCommunityURL, getFeedbackURL, + getSiteMapURL, + getFacebookURL, + getInstagramURL, + getYoutubeURL, + getLinkedinURL, + getTwitterURL, } from 'utils/get-url' import { useIntl } from 'react-intl' +import FacebookIcon from 'components/icons/facebook-icon' +import LocaleSwitcherFooter from 'components/locale-switcher-footer' +import VtexLogoFooter from 'components/icons/vtexLogoFooter' +import InstagramIcon from 'components/icons/instagram-icon' +import LinkedinIcon from 'components/icons/linkedin-icon' +import YoutubeIcon from 'components/icons/youtube-icon' +import TwitterIcon from 'components/icons/twitter-icon' const Footer = () => { const intl = useIntl() @@ -14,15 +27,15 @@ const Footer = () => { const links = [ { message: intl.formatMessage({ - id: 'landing_page_footer_developer_portal.message', + id: 'landing_page_footer_github.message', }), - to: () => getDeveloperPortalURL(), + to: () => getGithubURL(), }, { message: intl.formatMessage({ - id: 'landing_page_footer_help_center.message', + id: 'landing_page_footer_developer_portal.message', }), - to: () => getHelpCenterURL(), + to: () => getDeveloperPortalURL(), }, { message: intl.formatMessage({ @@ -36,21 +49,54 @@ const Footer = () => { }), to: () => getFeedbackURL(), }, + { + message: intl.formatMessage({ + id: 'landing_page_footer_site_map.message', + }), + to: () => getSiteMapURL(), + }, + ] + + const socialIcons = [ + { + to: () => getFacebookURL(), + component: , + }, + { + to: () => getInstagramURL(), + component: , + }, + { + to: () => getYoutubeURL(), + component: , + }, + { + to: () => getLinkedinURL(), + component: , + }, + { + to: () => getTwitterURL(), + component: , + }, ] return ( - - + + + + {socialIcons.map((icon, index) => ( + + {icon.component} + + ))} + + {links.map((link, index) => ( - + {link.message} - + ))} - + + ) } diff --git a/src/components/footer/styles.ts b/src/components/footer/styles.ts index 4abd978b..4e91cd05 100644 --- a/src/components/footer/styles.ts +++ b/src/components/footer/styles.ts @@ -1,37 +1,53 @@ import { SxStyleProp } from '@vtex/brand-ui' -const footerLeftLinks: SxStyleProp = { - ml: ['0px', '32px'], - mb: ['24px', '0px'], - textAlign: 'left', +const outerBox: SxStyleProp = { + bg: '#142032;', + display: ['flex'], + flexDirection: ['column', 'row'], + padding: '48px 32px 48px 48px', + alignItems: ['flex-start', 'center'], + justifyContent: 'space-between', + flexWrap: 'wrap', + rowGap: '32px', + overflow: ['initial'], } -const footerRightLinks: SxStyleProp = { - ...footerLeftLinks, - textAlign: 'right', +const socialMediaIcons: SxStyleProp = { + gap: '16px', + alignItems: 'center', + paddingTop: '5px', } -const footerLinks: SxStyleProp = { - '& > footer': { - px: ['0px', '32px'], - '& > div': { - flexDirection: ['column', 'row'], - alignItems: ['flex-start', 'center'], - px: ['32px', '0px'], - py: ['32px'], - width: ['100vw', '100%'], - '& > :last-child': { - mt: ['32px', '0px'], - display: ['grid', 'flex'], - justifyItems: ['stretch', 'initial'], - justifyContent: ['space-between', 'flex-end'], - }, - }, +const textLinkItems: SxStyleProp = { + fontSize: '16px', + gap: ['48px', '30px', '45px'], + rowGap: ['45px'], + flexWrap: 'wrap', + justifyItems: 'left', + alignItems: 'center', +} + +const localeSwitchLanding: SxStyleProp = { + marginLeft: '0', + justifySelf: 'left', + positionBottom: '5px', +} + +const icon: SxStyleProp = { + size: 32, + color: '#CCCED7', + transition: 'all 0.3s ease-out', + borderRadius: '50%', + ':hover': { + color: 'white', + backgroundColor: 'rgba(204, 206, 215, 0.3)', }, } export default { - footerLinks, - footerLeftLinks, - footerRightLinks, + localeSwitchLanding, + outerBox, + socialMediaIcons, + textLinkItems, + icon, } diff --git a/src/components/header/index.tsx b/src/components/header/index.tsx index 4ee99741..43a1954d 100644 --- a/src/components/header/index.tsx +++ b/src/components/header/index.tsx @@ -132,6 +132,8 @@ const Header = () => { + {' '} + {/*TODO: mudar data-cy no teste */} @@ -149,9 +151,14 @@ const Header = () => { - + + + + + + + - ) diff --git a/src/components/header/styles.ts b/src/components/header/styles.ts index ece3593e..1cbc6e87 100644 --- a/src/components/header/styles.ts +++ b/src/components/header/styles.ts @@ -51,12 +51,21 @@ const logoSize: SxStyleProp = { } const rightLinks: SxStyleProp = { - display: ['none', 'none', 'none', 'flex !important'], - width: 'auto', + display: ['flex !important'], + width: '100%', height: '100%', + textTransform: 'none', + alignItems: 'center', } const rightLinksItem: SxStyleProp = { + display: [ + 'none !important', + 'none !important', + 'none !important', + 'flex !important', + ], + visibility: 'visible', alignItems: 'center', padding: '0 !important', margin: '0 0 0 32px !important', @@ -73,6 +82,12 @@ const rightLinksItem: SxStyleProp = { } const dropdownContainer: SxStyleProp = { + display: [ + 'none !important', + 'none !important', + 'none !important', + 'flex !important', + ], textTransform: 'none', justifyContent: 'flex-end', height: 'calc(100% + 1px)', @@ -159,8 +174,49 @@ const arrowIconActive: SxStyleProp = { color: '#D71D55', } +const localeSwitcherContainer: SxStyleProp = { + display: 'flex', + visibility: 'visible', + ml: [0, 0, 0, 0, 0], + pr: ['0px', 0], + zIndex: 1, + justifyContent: 'center', + ' & button': { + borderLeft: 'none !important', + padding: '0px', + }, +} + +const containerHamburguerLocale: SxStyleProp = { + display: 'flex', + padding: '8px', + alignItems: 'center', + height: '100%', + borderLeft: ['none', 'none', 'none', '1px solid #e7e9ed'], + marginLeft: ['0', '0', '0', '32px'], + gap: '20px', + + '& > :first-of-type': { + '& > button:first-of-type': { + borderLeft: 'none', + padding: '0px 0px 0px 0px', + width: '24px', + height: '24px', + }, + }, +} + +const splitter: SxStyleProp = { + display: ['block', 'block', 'block', 'none'], + width: '1px', + height: '36px', + background: '#E7E9EE', +} + export default { + splitter, menuContainer, + containerHamburguerLocale, cardContainer, sideMenuContainer, logoSize, @@ -181,4 +237,5 @@ export default { innerCardContainer, arrowIcon, arrowIconActive, + localeSwitcherContainer, } diff --git a/src/components/icons/facebook-icon.tsx b/src/components/icons/facebook-icon.tsx new file mode 100644 index 00000000..5afe1cdc --- /dev/null +++ b/src/components/icons/facebook-icon.tsx @@ -0,0 +1,34 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const FacebookIcon = (props: IconProps) => ( + + + + + + + + + + + +) + +export default FacebookIcon diff --git a/src/components/icons/info-icon.tsx b/src/components/icons/info-icon.tsx new file mode 100644 index 00000000..88be04ce --- /dev/null +++ b/src/components/icons/info-icon.tsx @@ -0,0 +1,35 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const InfoIcon = (props: IconProps) => ( + + + + + +) + +export default InfoIcon diff --git a/src/components/icons/instagram-icon.tsx b/src/components/icons/instagram-icon.tsx new file mode 100644 index 00000000..a439fb92 --- /dev/null +++ b/src/components/icons/instagram-icon.tsx @@ -0,0 +1,34 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const IgIcon = (props: IconProps) => ( + + + + + + + + + + + +) + +export default IgIcon diff --git a/src/components/icons/linkedin-icon.tsx b/src/components/icons/linkedin-icon.tsx new file mode 100644 index 00000000..120c9376 --- /dev/null +++ b/src/components/icons/linkedin-icon.tsx @@ -0,0 +1,34 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const LinkedinIcon = (props: IconProps) => ( + + + + + + + + + + + +) + +export default LinkedinIcon diff --git a/src/components/icons/twitter-icon.tsx b/src/components/icons/twitter-icon.tsx new file mode 100644 index 00000000..07847525 --- /dev/null +++ b/src/components/icons/twitter-icon.tsx @@ -0,0 +1,22 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const TwitterIcon = (props: IconProps) => ( + + + + +) + +export default TwitterIcon diff --git a/src/components/icons/vtexLogoFooter.tsx b/src/components/icons/vtexLogoFooter.tsx new file mode 100644 index 00000000..5733e1ce --- /dev/null +++ b/src/components/icons/vtexLogoFooter.tsx @@ -0,0 +1,34 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const VtexLogoFooter = (props: IconProps) => ( + + + + + + + +) + +export default VtexLogoFooter diff --git a/src/components/icons/youtube-icon.tsx b/src/components/icons/youtube-icon.tsx new file mode 100644 index 00000000..29b541ec --- /dev/null +++ b/src/components/icons/youtube-icon.tsx @@ -0,0 +1,38 @@ +import type { IconProps } from '@vtex/brand-ui' +import { Icon } from '@vtex/brand-ui' + +const YoutubeIcon = (props: IconProps) => ( + + + + + + + + + + + + +) + +export default YoutubeIcon diff --git a/src/components/layout.tsx b/src/components/layout.tsx index 9291c532..c9db67f7 100644 --- a/src/components/layout.tsx +++ b/src/components/layout.tsx @@ -16,7 +16,13 @@ import { LibraryContextProvider, Sidebar, } from '@vtexdocs/components' -import { documentationData, updatesData } from 'utils/constants' +import { + documentationData, + feedbackSectionData, + knownIssuesData, + menuSupportData, + updatesData, +} from 'utils/constants' import { useIntl } from 'react-intl' interface Props { @@ -51,7 +57,17 @@ export default function Layout({ return ( void +} + +export default function LocaleSwitcherFooter() { + const router = useRouter() + const options: LocaleOption[] = [ + { + label: 'EN', + value: 'en', + }, + { + label: 'PT', + value: 'pt', + }, + { + label: 'ES', + value: 'es', + }, + ] + + const handleOptionClick = (option: string) => { + const locale = option + router.push(router.pathname, router.asPath, { locale }) + disclosure.hide() + } + + const disclosure = useDisclosureState({ visible: false }) + const Option = ({ screen, option, onClick, active }: OptionProps) => { + const variant = `localeSwitcher.${screen}.option` + + return ( + + {option.label} + + ) + } + + return ( + + + + + {router.locale?.toUpperCase()} + + + + + + + {options.map((option) => ( + + + + ) +} diff --git a/src/components/locale-switcher-footer/styles.ts b/src/components/locale-switcher-footer/styles.ts new file mode 100644 index 00000000..acad5b7a --- /dev/null +++ b/src/components/locale-switcher-footer/styles.ts @@ -0,0 +1,51 @@ +import { SxStyleProp } from '@vtex/brand-ui' + +const localeLabel: SxStyleProp = { + color: 'white', + pl: 2, + display: 'block', +} + +const optionContainer: SxStyleProp = { + color: 'black', + position: 'absolute', + display: 'flex', + flexDirection: 'column', + marginRight: '10px', + top: 'auto', + right: '0', + bottom: '100%', + px: 5, + borderTop: 'none', + backgroundColor: '#ffffff', + boxShadow: '0px 20px 25px rgba(20, 32, 50, 0.1)', + zIndex: 5, +} + +const baseLocaleSwitcher: SxStyleProp = { + alignItems: 'center', + cursor: 'pointer', + bg: 'transparent', + border: 'none', + outline: 'none', +} + +const localeSwitcher: SxStyleProp = { + position: 'relative', + button: { + ...baseLocaleSwitcher, + display: 'flex', + ':hover': { + color: '#142032', + }, + height: '100%', + justifyContent: 'flex-start', + }, +} + +export default { + localeLabel, + optionContainer, + localeSwitcher, + baseLocaleSwitcher, +} diff --git a/src/components/locale-switcher/index.tsx b/src/components/locale-switcher/index.tsx index 84b19a16..270fd2f5 100644 --- a/src/components/locale-switcher/index.tsx +++ b/src/components/locale-switcher/index.tsx @@ -48,14 +48,26 @@ export default function LocaleSwitcher() { ) } + const renderGlobe = (isDiscolosureVisible: boolean) => { + if (isDiscolosureVisible) { + return + } + + return + } + return ( - + {renderGlobe(disclosure.visible)} {router.locale?.toUpperCase()} - + diff --git a/src/components/locale-switcher/styles.ts b/src/components/locale-switcher/styles.ts index c82f37ac..9b854b08 100644 --- a/src/components/locale-switcher/styles.ts +++ b/src/components/locale-switcher/styles.ts @@ -2,12 +2,16 @@ import { SxStyleProp } from '@vtex/brand-ui' const localeLabel: SxStyleProp = { pl: 2, - display: ['block', 'none', 'none', 'none', 'block'], + display: ['none', 'none', 'none', 'block'], +} + +const localeCaret: SxStyleProp = { + display: ['none', 'none', 'none', 'block'], } const optionContainer: SxStyleProp = { position: 'absolute', - display: ['none', 'none', 'none', 'flex'], + display: ['flex'], flexDirection: 'column', width: '11rem', top: 0, @@ -30,20 +34,37 @@ const baseLocaleSwitcher: SxStyleProp = { const localeSwitcher: SxStyleProp = { button: { ...baseLocaleSwitcher, - display: ['none', 'none', 'none', 'flex'], + display: ['flex'], ':hover': { color: '#142032', }, height: '100%', justifyContent: 'flex-start', - borderLeft: '1px solid #e7e9ed', - ml: '40px', + borderLeft: ['1px solid #e7e9ed'], + // ml: '40px', }, } +const iconGlobe: SxStyleProp = { + mb: ['0px', '0px', '0px', '3px'], +} + +const iconGlobeVisible: SxStyleProp = { + mb: ['0px', '0px', '0px', '3px'], + color: [ + 'var(--theme-ui-colors-primary-base, #E31C58)', + 'var(--theme-ui-colors-primary-base, #E31C58)', + 'var(--theme-ui-colors-primary-base, #E31C58)', + '#4A596B', + ], +} + export default { + iconGlobeVisible, localeLabel, + localeCaret, optionContainer, localeSwitcher, baseLocaleSwitcher, + iconGlobe, } diff --git a/src/components/whats-next-card/index.tsx b/src/components/whats-next-card/index.tsx new file mode 100644 index 00000000..911ef6ff --- /dev/null +++ b/src/components/whats-next-card/index.tsx @@ -0,0 +1,38 @@ +import { Box, Flex, IconCaret, Text, Link } from '@vtex/brand-ui' + +import type { WhatsNextDataElement } from 'utils/typings/types' + +import styles from './styles' + +const WhatsNextCard = ({ + title, + description, + linkTitle, + linkTo, +}: WhatsNextDataElement) => { + return ( + + + + {title} + + + {description} + + + + {linkTitle} + + + + + + ) +} + +export default WhatsNextCard diff --git a/src/components/whats-next-card/styles.ts b/src/components/whats-next-card/styles.ts new file mode 100644 index 00000000..db904d48 --- /dev/null +++ b/src/components/whats-next-card/styles.ts @@ -0,0 +1,55 @@ +import type { SxStyleProp } from '@vtex/brand-ui' + +const container: SxStyleProp = { + mt: '16px', + padding: '16px', + borderRadius: '4px', + border: '1px solid #E7E9EE', + width: ['100%', '49%'], + transition: 'all 0.3s ease-out', + ':hover': { + cursor: 'pointer', + }, + ':active, :hover': { + borderColor: 'muted.2', + boxShadow: '0px 0px 16px rgba(0, 0, 0, 0.1)', + transition: 'all 0.3 ease-out', + + '.title, .description': { + transition: 'all 0.3s ease-out', + color: '#000711', + }, + + '.link, .caret': { + transition: 'all 0.3s ease-out', + color: 'muted.0', + }, + }, +} + +const title: SxStyleProp = { + mb: '8px', + fontSize: '16px', + fontWeight: '400', + lineHeight: ['22px', '18px'], + color: 'muted.0', +} + +const description: SxStyleProp = { + fontSize: '12px', + fontWeight: '400', + lineHeight: '16px', + color: 'muted.0', +} + +const linkContainer: SxStyleProp = { + mt: '8px', + alignItems: 'center', +} + +const link: SxStyleProp = { + ...description, + color: 'muted.1', +} + +export default { container, title, description, linkContainer, link } diff --git a/src/messages/en.json b/src/messages/en.json index ff73bf11..0b2b0dd7 100644 --- a/src/messages/en.json +++ b/src/messages/en.json @@ -51,12 +51,13 @@ "landing_page_education_community.description": "Find solutions and share ideas in the VTEX community.", "landing_page_education_community.textLink": "Join our community", "landing_page_support.title": "Support Resources", - "landing_page_footer_developer_portal.message": "Developer Portal", - "landing_page_footer_help_center.message": "Help Center", + "landing_page_footer_developer_portal.message": "Developers Portal", + "landing_page_footer_github.message": "Github", + "landing_page_footer_site_map.message": "Site Map", "landing_page_footer_community.message": "Community", "landing_page_footer_feedback.message": "Feedback", "landing_page_header_feedback.message": "Feedback", - "landing_page_header_docs.message": "Documentation", + "landing_page_header_docs.message": "Menu", "search_input.placeholder": "Search in Help Center", "search_input.empty": "No results found. Try different search terms.", "feedback_section.question": "Was this helpful?", @@ -75,8 +76,112 @@ "announcements_page.subtitle": "Stay up-to-date with the latest news and updates from VTEX.", "api_reference_page.title": "API Reference", "api_reference_page.subtitle": "Use our API reference documentation to build custom solutions that fit your business.", - "api_guides_page.title": "API Guides", - "api_guides_page.subtitle": "Get to know our Commerce APIs to extend the VTEX platform and leverage your business.", + "start_here_page.title": "Start here", + "start_here_page.subtitle": "Learn, step by step, everything you need to know to start using VTEX.", + "start_here_page.link": "Learn more", + "start_here_page_marketplace.title": "Marketplace", + "start_here_page_marketplace.content.0.title": "Amazon Integration", + "start_here_page_marketplace.content.0.description": "Sell your products in one of the biggest marketplaces in the world through the native VTEX integration.", + "start_here_page_marketplace.content.0.link": "tracks/amazon", + "start_here_page_marketplace.content.1.title": "Magazine Luiza Integration", + "start_here_page_marketplace.content.1.description": "Sell your products in one of the biggest marketplaces in Brasil through the native VTEX integration.", + "start_here_page_marketplace.content.1.link": "tracks/magazine-luiza-marketplace", + "start_here_page_marketplace.content.2.title": "Integration with Facebook Business Extension", + "start_here_page_marketplace.content.2.description": "Advertise your products with Facebook Business Extension through VTEX.", + "start_here_page_marketplace.content.2.link": "tracks/facebook-business-extension", + "start_here_page_marketplace.content.3.title": "Integrating with Google Shopping", + "start_here_page_marketplace.content.3.description": "Advertise your products on Google's price comparison and tracking service through VTEX native integration.", + "start_here_page_marketplace.content.3.link": "tracks/google-shopping-marketplace", + "start_here_page_marketplace.content.4.title": "How to campaign through Google Shopping Ads?", + "start_here_page_marketplace.content.4.description": "Advertise on Google Shopping Ads using Google's newest feature, Smart Campaigns. Start advertising in minutes using your product catalog.", + "start_here_page_marketplace.content.4.link": "tracks/google-shopping-ads-install", + "start_here_page_marketplace.content.5.title": "Lengow Integration", + "start_here_page_marketplace.content.5.description": "Centralize, optimize and track the distribution of your product catalog using the leading e-commerce feed management platform in Europe.", + "start_here_page_marketplace.content.5.link": "tracks/what-is-lengow", + "start_here_page_marketplace.content.6.title": "Facebook Integration", + "start_here_page_marketplace.content.6.description": "Sell ​​your products on one of the largest social networks in the world through the native integration of VTEX.", + "start_here_page_marketplace.content.6.link": "tracks/facebook", + "start_here_page_marketplace.content.7.title": "TikTok Integration", + "start_here_page_marketplace.content.7.description": "Advertise your products on TikTok through VTEX.", + "start_here_page_marketplace.content.7.link": "tracks/tiktok-for-business", + "start_here_page_marketplace.content.8.title": "Livelo Integration", + "start_here_page_marketplace.content.8.description": "Sell your products on the marketplace platform with Brazil's biggest rewards program.", + "start_here_page_marketplace.content.8.link": "tracks/livelo-integration-overview", + "start_here_page_modules.title": "VTEX Modules: Getting Started", + "start_here_page_modules.content.0.title": "Catalog", + "start_here_page_modules.content.0.description": "Learn the Catalog module fundamentals.", + "start_here_page_modules.content.0.link": "tracks/catalog-concept-definition", + "start_here_page_modules.content.1.title": "Logistics", + "start_here_page_modules.content.1.description": "Learn the Inventory and Shipping module fundamentals.", + "start_here_page_modules.content.1.link": "tracks/getting-started-with-logistics", + "start_here_page_modules.content.2.title": "Prices", + "start_here_page_modules.content.2.description": "Learn the Prices module fundamentals.", + "start_here_page_modules.content.2.link": "tracks/prices-module-overview", + "start_here_page_modules.content.3.title": "Promotions", + "start_here_page_modules.content.3.description": "Learn the basics of the Promotions module.", + "start_here_page_modules.content.3.link": "tracks/how-promotions-work", + "start_here_page_modules.content.4.title": "Orders", + "start_here_page_modules.content.4.description": "Learn the basics of the Orders module.", + "start_here_page_modules.content.4.link": "tracks/o-que-e-um-pedido-na-vtex", + "start_here_page_modules.content.5.title": "Payments", + "start_here_page_modules.content.5.description": "Learn the fundamentals of the Payments modules.", + "start_here_page_modules.content.5.link": "tracks/how-the-payments-module-works", + "start_here_page_modules.content.6.title": "Transactional Emails", + "start_here_page_modules.content.6.description": "Learn the basics of the transactional emails module.", + "start_here_page_modules.content.6.link": "tracks/how-message-center-works", + "start_here_page_modules.content.7.title": "Storefront", + "start_here_page_modules.content.7.description": "Learn the basics of our Content Management System.", + "start_here_page_modules.content.7.link": "tracks/what-is-the-cms", + "start_here_page_modules.content.8.title": "Accounts & Permissions", + "start_here_page_modules.content.8.description": "Learn the basics of the Accounts & Permissions module.", + "start_here_page_modules.content.8.link": "tracks/understanding-your-account", + "start_here_page_modules.content.9.title": "Go-live", + "start_here_page_modules.content.9.description": "Make your store available for customers to access it and make purchases.", + "start_here_page_modules.content.9.link": "tracks/go-live-process", + "start_here_page_modules.content.10.title": "Store development", + "start_here_page_modules.content.10.description": "Learn the fundamentals of VTEX store development.", + "start_here_page_modules.content.10.link": "tracks/frontend", + "start_here_page_omnichannel.title": "Omnichannel", + "start_here_page_omnichannel.content.0.title": "VTEX Sales App - Getting started and setting up", + "start_here_page_omnichannel.content.0.description": "Concepts, prerequisites and instructions for you to set up VTEX Sales App..", + "start_here_page_omnichannel.content.0.link": "tracks/what-is-instore", + "start_here_page_omnichannel.content.1.title": "VTEX Sales App - Payments", + "start_here_page_omnichannel.content.1.description": "The step-by-step to set up the payment methods by each certified acquirer.", + "start_here_page_omnichannel.content.1.link": "tracks/setting-up-payment-methods-for-instore", + "start_here_page_omnichannel.content.2.title": "VTEX Sales App - Using the app", + "start_here_page_omnichannel.content.2.description": "The VTEX Sales App app features and how to use them..", + "start_here_page_omnichannel.content.2.link": "tracks/installation", + "start_here_page_omnichannel.content.3.title": "Unified Commerce Strategies", + "start_here_page_omnichannel.content.3.description": "Step-by-step guides to implement some of the main Unified Commerce strategies at VTEX.", + "start_here_page_omnichannel.content.3.link": "tracks/unified-commerce-101", + "start_here_page_vtex_io.title": "VTEX IO", + "start_here_page_vtex_io.content.0.title": "VTEX Intelligent Search", + "start_here_page_vtex_io.content.0.description": "Learn the basics of the VTEX Intelligent Search application", + "start_here_page_vtex_io.content.0.link": "tracks/overview-intelligent-search", + "start_here_page_vtex_io.content.1.title": "Extensions Hub", + "start_here_page_vtex_io.content.1.description": "Acquire and manage extensions to extend the functionality of your store. Find partners to develop custom solutions.", + "start_here_page_vtex_io.content.1.link": "extensions-hub-1", + "start_here_page_erp.title": "ERP", + "start_here_page_erp.content.0.title": "VTEX Adapter - CIASHOP", + "start_here_page_erp.content.0.description": "Learn the basics of Adapter to migrate the integration between your ERP and CIASHOP to VTEX.", + "start_here_page_erp.content.0.link": "tracks/como-funciona-o-adaptador-vtex", + "start_here_page_payment.title": "Payment solutions", + "start_here_page_payment.content.0.title": "Customer Credit - Getting Started", + "start_here_page_payment.content.0.description": "Enable a new form of payment for your store by learning step-by-step how to install and configure Customer Credit.", + "start_here_page_payment.content.0.link": "tracks/installing-customer-credit", + "start_here_page_payment.content.1.title": "Clustered Payment Conditions", + "start_here_page_payment.content.1.description": "Get to know and enable the new payment customization for Customer Credit.", + "start_here_page_payment.content.1.link": "tracks/what-are-clustered-payment-conditions", + "start_here_page_payment.content.2.title": "Digital wallet (ewallet)", + "start_here_page_payment.content.2.description": "A digital wallet (also known as an ewallet) is a secure environment where bank and credit card information can be stored.", + "start_here_page_payment.content.2.link": "tracks/google-pay", + "start_here_page_conversational.title": "Conversational Commerce", + "start_here_page_conversational.content.0.title": "Conversational Commerce VTEX", + "start_here_page_conversational.content.0.description": "Learn how to diversify sales channels, with faster and more personalized purchases through automation.", + "start_here_page_conversational.content.0.link": "tracks/what-is-conversational-commerce-vtex", + "start_here_page_conversational.content.1.title": "VTEX Assisted Sales (SuiteShare)", + "start_here_page_conversational.content.1.description": "Learn solutions to attract more customers, organize your team's services, capture customer data, close sales, and measure results.", + "start_here_page_conversational.content.1.link": "tracks/what-is-suiteshare", "storefront_development_page.title": "Storefront Development", "storefront_development_page.subtitle": "Express your brand identity creating unique storefronts.", "vtex_io_apps_page.title": "VTEX IO Apps", @@ -112,5 +217,17 @@ "support_plans.title": "Support plans", "support_plans.description": "See details of support plans available for each commercial plan.", "announcement_bar.headline": "📢 We want to know more about you and how you use our docs. ", - "announcement_bar.button": "Fill in our survey! It takes less than 5 minutes." + "announcement_bar.button": "Fill in our survey! It takes less than 5 minutes.", + "documentation_reading_time.text": "{minutes} min read", + "sidebar_known_issues.description": "Access content and find solutions to all your questions about the platform.", + "sidebar_support_rules.description": "See details of the support plans available for each business plan.", + "updates_announcements_notes.description": "Stay informed about the main news from VTEX.", + "updates_info_notes.description": "Find answers to your key questions quickly and conveniently.", + "menu_health_check.description": "Check the detailed real-time status.", + "menu_status.description": "Follow the plataform's historical record.", + "sidebar_support_rules.title": "Support Rules", + "sidebar_known_issues.title": "Known Issues", + "menu_status.title": "Status", + "menu_health_check.title": "Health Check", + "updates_announcements_notes.title": "Announcements" } diff --git a/src/messages/es.json b/src/messages/es.json index 4fcf648c..7623bbec 100644 --- a/src/messages/es.json +++ b/src/messages/es.json @@ -9,7 +9,7 @@ "documentation_start_here.description": "Aprenda, passo a passo, tudo que precisa saber para começar a usar os principais módulos da VTEX.", "documentation_tutorials.title": "Tutoriais & Soluções", "documentation_tutorials.description": "Acesse a documentação de todos os módulos da plataforma e tire suas dúvidas.", - "documentation_developers_portal.title": "Developers Portal", + "documentation_developers_portal.title": "Portal del Desarrollador", "documentation_developers_portal.description": "Visite nosso portal de desenvolvedores e encontre informações técnicas sobre integrações, APIs e recursos de desenvolvimento.", "landing_page_faq.title": "Preguntas frecuentes", "landing_page_faq.description": "Encuentre respuestas a preguntas frecuentes de manera rápida y práctica", @@ -51,12 +51,13 @@ "landing_page_education_community.description": "Encuentra solucciones y comparte ideas en la comunidad de VTEX.", "landing_page_education_community.textLink": "Únete a nuestra comunidad", "landing_page_support.title": "Recursos de soporte", - "landing_page_footer_developer_portal.message": "Developer Portal", - "landing_page_footer_help_center.message": "Help Center", + "landing_page_footer_developer_portal.message": "Developers Portal", + "landing_page_footer_github.message": "Github", + "landing_page_footer_site_map.message": "Mapa del Sitio", "landing_page_footer_community.message": "Community", "landing_page_footer_feedback.message": "Feedback", "landing_page_header_feedback.message": "Feedback", - "landing_page_header_docs.message": "Documentation", + "landing_page_header_docs.message": "Menu", "search_input.placeholder": "Búsqueda en el Help Center", "search_input.empty": "No results found. Try different search terms.", "feedback_section.question": "¿Te ha resultado útil esta información?", @@ -75,8 +76,118 @@ "announcements_page.subtitle": "Manténgase al día con las últimas noticias y actualizaciones de VTEX.", "api_reference_page.title": "API Reference", "api_reference_page.subtitle": "Use our API reference documentation to build custom solutions that fit your business.", - "api_guides_page.title": "API Guides", - "api_guides_page.subtitle": "Get to know our Commerce APIs to extend the VTEX platform and leverage your business.", + "start_here_page.title": "Comience aquí", + "start_here_page.subtitle": "Aprende, paso a paso, todo lo que necesitas saber para empezar a usar VTEX.", + "start_here_page.link": "Saber más", + "start_here_page_marketplace.title": "Marketplace", + "start_here_page_marketplace.content_0.title": "Integración de Amazon", + "start_here_page_marketplace.content_0.description": "Venta sus productos en uno de los mayores marketplaces del mundo a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_0.link": "tracks/amazon", + "start_here_page_marketplace.content_1.title": "Integración con Mercado Libre", + "start_here_page_marketplace.content_1.description": "Venda sus productos en uno de los marketplaces más grandes de América Latina a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_1.link": "tracks/mercado-libre-marketplace", + "start_here_page_marketplace.content_2.title": "Integración de Magazine Luiza", + "start_here_page_marketplace.content_2.description": "Venta sus productos en uno de los marketplaces más grandes de Brasil a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_2.link": "tracks/magazine-luiza-marketplace", + "start_here_page_marketplace.content_3.title": "Integración con Facebook Business Extension", + "start_here_page_marketplace.content_3.description": "Anuncie seus produtos pela plataforma Facebook Business Extension através da VTEX.", + "start_here_page_marketplace.content_3.link": "tracks/facebook-business-extension", + "start_here_page_marketplace.content_4.title": "Integración de Dafiti", + "start_here_page_marketplace.content_4.description": "Venta de sus productos en uno de los mayores marketplaces de moda a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_4.link": "tracks/dafiti-marketplace", + "start_here_page_marketplace.content_5.title": "Integración con Wish", + "start_here_page_marketplace.content_5.description": "Venda sus productos en Wish a través de nuestra integración nativa.", + "start_here_page_marketplace.content_5.link": "tracks/what-to-configure-in-wish-prior-to-the-integration", + "start_here_page_marketplace.content_6.title": "Integración con Google Shopping", + "start_here_page_marketplace.content_6.description": "Anuncie sus productos en un servicio de comparación y seguimiento de precios de Google a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_6.link": "tracks/google-shopping-marketplace", + "start_here_page_marketplace.content_7.title": "¿Cómo hacer campañas a través de Google Shopping Ads?", + "start_here_page_marketplace.content_7.description": "Anuncie en Google Shopping Ads usando la nueva característica de Google, las Campañas Inteligentes. Comience a anunciar en minutos usando su catálogo de productos.", + "start_here_page_marketplace.content_7.link": "tracks/google-shopping-ads-install", + "start_here_page_marketplace.content_8.title": "Integración de Facebook", + "start_here_page_marketplace.content_8.description": "Venda sus productos en una de las redes sociales más grandes del mundo a través de la integración nativa de VTEX.", + "start_here_page_marketplace.content_8.link": "tracks/facebook", + "start_here_page_marketplace.content_9.title": "Integración de TikTok", + "start_here_page_marketplace.content_9.description": "Anuncia tus productos en TikTok a través de VTEX.", + "start_here_page_marketplace.content_9.link": "tracks/tiktok-for-business", + "start_here_page_marketplace.content_10.title": "Integración de Livelo", + "start_here_page_marketplace.content_10.description": "Venda sus productos en lo marketplace con el mayor programa de recompensas de Brasil.", + "start_here_page_marketplace.content_10.link": "tracks/livelo-integration-overview", + "start_here_page_modules.title": "Módulos VTEX: Primeros pasos", + "start_here_page_modules.content.0.title": "Catálogo", + "start_here_page_modules.content.0.description": "Aprenda los fundamentos del módulo Catálogo.", + "start_here_page_modules.content.0.link": "tracks/catalog-concept-definition", + "start_here_page_modules.content.1.title": "Logística", + "start_here_page_modules.content.1.description": "Aprenda los fundamentos del módulo de Inventario y envío.", + "start_here_page_modules.content.1.link": "tracks/getting-started-with-logistics", + "start_here_page_modules.content.2.title": "Precios", + "start_here_page_modules.content.2.description": "Aprenda los fundamentos del módulo de Precios.", + "start_here_page_modules.content.2.link": "tracks/prices-module-overview", + "start_here_page_modules.content.3.title": "Promociones", + "start_here_page_modules.content.3.description": "Aprenda los fundamentos del módulo de promociones.", + "start_here_page_modules.content.3.link": "tracks/how-promotions-work", + "start_here_page_modules.content.4.title": "Pedidos", + "start_here_page_modules.content.4.description": "Aprenda los conceptos y features básicos del módulo de pedido.", + "start_here_page_modules.content.4.link": "tracks/o-que-e-um-pedido-na-vtex", + "start_here_page_modules.content.5.title": "Pagos", + "start_here_page_modules.content.5.description": "Aprenda los fundamentos del módulo de Pagos.", + "start_here_page_modules.content.5.link": "tracks/how-the-payments-module-works", + "start_here_page_modules.content.6.title": "E-mails Transaccionales", + "start_here_page_modules.content.6.description": "Aprenda los fundamentos del módulo de emails transaccionales.", + "start_here_page_modules.content.6.link": "tracks/how-message-center-works", + "start_here_page_modules.content.7.title": "Storefront", + "start_here_page_modules.content.7.description": "Aprenda los fundamentos de nuestro Content Management System.", + "start_here_page_modules.content.7.link": "tracks/what-is-the-cms", + "start_here_page_modules.content.8.title": "Cuentas y Permisos", + "start_here_page_modules.content.8.description": "Aprenda los fundamentos del módulo de Cuentas y Permisos.", + "start_here_page_modules.content.8.link": "tracks/understanding-your-account", + "start_here_page_modules.content.9.title": "Go-live", + "start_here_page_modules.content.9.description": "Haz que tu tienda esté disponible para que los clientes accedan a ella y realicen compras.", + "start_here_page_modules.content.9.link": "tracks/go-live-process", + "start_here_page_modules.content.10.title": "Desarrollo de la tienda", + "start_here_page_modules.content.10.description": "Conozca los fundamentos del desarrollo de tiendas VTEX.", + "start_here_page_modules.content.10.link": "tracks/frontend", + "start_here_page_omnichannel.title": "Omnichannel", + "start_here_page_omnichannel.content_0.title": "VTEX Sales App - Primeros pasos y configuración", + "start_here_page_omnichannel.content_0.description": "Conceptos, requisitos previos y instrucciones para configurar el VTEX Sales App.", + "start_here_page_omnichannel.content_0.link": "tracks/what-is-instore", + "start_here_page_omnichannel.content_1.title": "VTEX Sales App - Pagos", + "start_here_page_omnichannel.content_1.description": "El paso a paso para configurar los métodos de pago por cada adquirente homologado.", + "start_here_page_omnichannel.content_1.link": "tracks/setting-up-payment-methods-for-instore", + "start_here_page_omnichannel.content_2.title": "VTEX Sales App - Usando el app", + "start_here_page_omnichannel.content_2.description": "Las características de la aplicación del VTEX Sales App y cómo usarlas.", + "start_here_page_omnichannel.content_2.link": "tracks/installation", + "start_here_page_omnichannel.content_3.title": "Estrategias de Comercio Unificado", + "start_here_page_omnichannel.content_3.description": "Guías paso a paso para implementar algunas de las principales estrategias de Comercio Unificado en VTEX.", + "start_here_page_omnichannel.content_3.link": "tracks/unified-commerce-101", + "start_here_page_vtex_io.title": "VTEX IO", + "start_here_page_vtex_io.content.0.title": "VTEX Intelligent Search", + "start_here_page_vtex_io.content.0.description": "Aprenda los fundamentos de la aplicación VTEX Intelligent Search.", + "start_here_page_vtex_io.content.0.link": "tracks/overview-intelligent-search", + "start_here_page_vtex_io.content.1.title": "Hub de extensiones", + "start_here_page_vtex_io.content.1.description": "Compre y administre extensiones para ampliar la funcionalidad de su tienda. Encuentre socios para desarrollar soluciones personalizadas.", + "start_here_page_vtex_io.content.1.link": "extensions-hub-1", + "start_here_page_erp.title": "ERP", + "start_here_page_erp.content.0.title": "Adaptador VTEX - CIASHOP", + "start_here_page_erp.content.0.description": "Aprenda los conceptos básicos de Adaptador para migrar la integración entre su ERP y CIASHOP a VTEX.", + "start_here_page_erp.content.0.link": "tracks/como-funciona-o-adaptador-vtex", + "start_here_page_payment.title": "Soluciones de pago", + "start_here_page_payment.content.0.title": "Customer Credit - Cómo Empezar", + "start_here_page_payment.content.0.description": "Habilite una nueva forma de pago para su tienda al aprender el paso a paso de cómo instalar y configurar el Customer Credit.", + "start_here_page_payment.content.0.link": "tracks/installing-customer-credit", + "start_here_page_payment.content.1.title": "Condiciones de Pago Clusterizadas", + "start_here_page_payment.content.1.description": "Conozca y habilite la nueva forma de personalización de pago para el Customer Credit.", + "start_here_page_payment.content.1.link": "tracks/what-are-clustered-payment-conditions", + "start_here_page_payment.content.2.title": "Cartera digital (ewallet)", + "start_here_page_payment.content.2.description": "Una cartera digital (también llamada ewallet) es un entorno seguro en el que se pueden almacenar datos bancarios y de tarjetas de crédito.", + "start_here_page_payment.content.2.link": "tracks/google-pay", + "start_here_page_conversational.title": "Conversational Commerce", + "start_here_page_conversational.content.0.title": "Conversational Commerce VTEX", + "start_here_page_conversational.content.0.description": "Aprenda a diversificar los canales de venta, con compras más rápidas y personalizadas gracias a la automatización.", + "start_here_page_conversational.content.0.link": "tracks/what-is-conversational-commerce-vtex", + "start_here_page_conversational.content.1.title": "VTEX Assisted Sales (SuiteShare)", + "start_here_page_conversational.content.1.description": "Aprenda soluciones para atraer más clientes, organizar los servicios de su equipo, captar datos de clientes, cerrar ventas y medir resultados.", + "start_here_page_conversational.content.1.link": "tracks/what-is-suiteshare", "storefront_development_page.title": "Storefront Development", "storefront_development_page.subtitle": "Express your brand identity creating unique storefronts.", "vtex_io_apps_page.title": "VTEX IO Apps", @@ -112,5 +223,17 @@ "support_plans.title": "Planes de soporte", "support_plans.description": "Consulte los detalles de los planes de soporte disponibles para cada plan comercial.", "announcement_bar.headline": "📢 Queremos saber más sobre ti y cómo utilizas nuestra documentación. ", - "announcement_bar.button": "¡Complete nuestra encuesta! Toma menos de 5 minutos." + "announcement_bar.button": "¡Complete nuestra encuesta! Toma menos de 5 minutos.", + "documentation_reading_time.text": "{minutes} min de lectura", + "sidebar_known_issues.description": "Accede a contenido y encuentra soluciones a todas tus preguntas sobre la plataforma.", + "sidebar_support_rules.description": "Vea los detalles de los planes de soporte disponibles para cada plan comercial.", + "updates_announcements_notes.description": "Mantente al tanto de las principales noticias de VTEX.", + "updates_info_notes.description": "Encuentra respuestas a tus preguntas clave de manera rápida y práctica.", + "menu_health_check.description": "Verifique el estado detallado en tiempo real.", + "menu_status.description": "Seguir el registro histórico de la plataforma.", + "sidebar_support_rules.title": "Directrices de Soporte", + "sidebar_known_issues.title": "Problemas Conocidos", + "menu_status.title": "Status", + "menu_health_check.title": "Verificación de Estado", + "updates_announcements_notes.title": "Comunicados" } diff --git a/src/messages/pt.json b/src/messages/pt.json index 75997e09..c9f30cea 100644 --- a/src/messages/pt.json +++ b/src/messages/pt.json @@ -9,7 +9,7 @@ "documentation_start_here.description": "Aprenda, passo a passo, tudo que precisa saber para começar a usar os principais módulos da VTEX.", "documentation_tutorials.title": "Tutoriais & Soluções", "documentation_tutorials.description": "Acesse a documentação de todos os módulos da plataforma e tire suas dúvidas.", - "documentation_developers_portal.title": "Developers Portal", + "documentation_developers_portal.title": "Portal do Desenvolvedor", "documentation_developers_portal.description": "Visite nosso portal de desenvolvedores e encontre informações técnicas sobre integrações, APIs e recursos de desenvolvimento.", "landing_page_faq.title": "Perguntas frequentes", "landing_page_faq.description": "Encontre respostas para dúvidas mais frequentes de forma rápida e prática.", @@ -50,13 +50,14 @@ "landing_page_education_community.title": "Pergunte a comunidade", "landing_page_education_community.description": "Encontre soluções e compartilhe ideias na comunidade VTEX.", "landing_page_education_community.textLink": "Junte-se à nossa comunidade", - "landing_page_support.title": "Recursos de suporte", - "landing_page_footer_developer_portal.message": "Developer Portal", - "landing_page_footer_help_center.message": "Help Center", + "landing_page_support.title": "Recursos adicionais", + "landing_page_footer_developer_portal.message": "Developers Portal", + "landing_page_footer_site_map.message": "Mapa do site", + "landing_page_footer_github.message": "Github", "landing_page_footer_community.message": "Comunidade", "landing_page_footer_feedback.message": "Feedback", "landing_page_header_feedback.message": "Feedback", - "landing_page_header_docs.message": "Documentação", + "landing_page_header_docs.message": "Menu", "search_input.placeholder": "Pesquise no Help Center", "search_input.empty": "No results found. Try different search terms.", "feedback_section.question": "Isso foi útil?", @@ -75,8 +76,133 @@ "announcements_page.subtitle": "Mantenha-se atualizado com as últimas notícias e atualizações da VTEX.", "api_reference_page.title": "API Reference", "api_reference_page.subtitle": "Use our API reference documentation to build custom solutions that fit your business.", - "api_guides_page.title": "API Guides", - "api_guides_page.subtitle": "Get to know our Commerce APIs to extend the VTEX platform and leverage your business.", + "start_here_page.title": "Comece aqui", + "start_here_page.subtitle": "Aprenda, passo a passo, tudo que precisa saber para começar a usar a VTEX.", + "start_here_page.link": "Veja mais", + "start_here_page_marketplace.title": "Marketplace", + "start_here_page_marketplace.content.0.title": "Integração com a Amazon", + "start_here_page_marketplace.content.0.description": "Venda seus produtos em um dos maiores varejistas do mundo através da integração nativa da VTEX.", + "start_here_page_marketplace.content.0.link": "tracks/amazon", + "start_here_page_marketplace.content.1.title": "Integração com o Mercado Livre", + "start_here_page_marketplace.content.1.description": "Venda seus produtos em um dos maiores marketplaces da América Latina através da integração nativa da VTEX.", + "start_here_page_marketplace.content.1.link": "tracks/mercado-libre-marketplace", + "start_here_page_marketplace.content.2.title": "Integração com o Magazine Luiza", + "start_here_page_marketplace.content.2.description": "Venda seus produtos em um dos maiores marketplaces do Brasil através da integração nativa da VTEX.", + "start_here_page_marketplace.content.2.link": "tracks/magazine-luiza-marketplace", + "start_here_page_marketplace.content.3.title": "Integração com o Carrefour", + "start_here_page_marketplace.content.3.description": "Venda em um dos mercados mais tradicionais do mundo através da integração da VTEX.", + "start_here_page_marketplace.content.3.link": "tracks/carrefour-marketplace", + "start_here_page_marketplace.content.4.title": "Integração com a Centauro", + "start_here_page_marketplace.content.4.description": "Venda seus produtos na maior rede de lojas esportivas da América Latina com a integração nativa da VTEX!", + "start_here_page_marketplace.content.4.link": "tracks/centauro-marketplace", + "start_here_page_marketplace.content.5.title": "Integração com o Facebook Business Extension", + "start_here_page_marketplace.content.5.description": "Anuncie seus produtos pela plataforma Facebook Business Extension através da VTEX.", + "start_here_page_marketplace.content.5.link": "tracks/facebook-business-extension", + "start_here_page_marketplace.content.6.title": "Integração com SkyHub/B2W", + "start_here_page_marketplace.content.6.description": "Venda seus produtos em um dos maiores marketplaces do Brasil, em sites como Submarino, Lojas Americanas e Shoptime, através da integração nativa da VTEX.", + "start_here_page_marketplace.content.6.link": "tracks/integration-overview-b2w", + "start_here_page_marketplace.content.7.title": "Integração com a Via Marketplace", + "start_here_page_marketplace.content.7.description": "Venda seus produtos em lojas como Casas Bahia e Ponto Frio, marketplaces referência de móveis e eletrodomésticos do Brasil através da integração nativa da VTEX.", + "start_here_page_marketplace.content.7.link": "tracks/via-varejo-marketplace", + "start_here_page_marketplace.content.8.title": "Integração com a Dafiti", + "start_here_page_marketplace.content.8.description": "Venda seus produtos em um dos maiores marketplaces de moda através da integração nativa da VTEX.", + "start_here_page_marketplace.content.8.link": "tracks/dafiti-marketplace", + "start_here_page_marketplace.content.9.title": "Integração com a Netshoes", + "start_here_page_marketplace.content.9.description": "Venda seus produtos em um dos maiores marketplaces de artigos esportivos através da integração nativa da VTEX.", + "start_here_page_marketplace.content.9.link": "tracks/netshoes-marketplace", + "start_here_page_marketplace.content.10.title": "Integração com a Wish", + "start_here_page_marketplace.content.10.description": "Venda seus produtos na Wish usando nossa integração nativa.", + "start_here_page_marketplace.content.10.link": "tracks/what-to-configure-in-wish-prior-to-the-integration", + "start_here_page_marketplace.content.11.title": "Integração com o Google Shopping", + "start_here_page_marketplace.content.11.description": "Anuncie seus produtos na plataforma de listagem e rastreamento de produtos do Google através da integração nativa da VTEX.", + "start_here_page_marketplace.content.11.link": "tracks/google-shopping-marketplace", + "start_here_page_marketplace.content.12.title": "Como fazer campanhas através do Google Shopping Ads?", + "start_here_page_marketplace.content.12.description": "Anuncie no Google Shopping Ads usando o mais novo recurso do Google, as Campanhas Inteligentes. Comece a anunciar em minutos usando seu catálogo de produtos.", + "start_here_page_marketplace.content.12.link": "tracks/google-shopping-ads-install", + "start_here_page_marketplace.content.13.title": "Integração com o Facebook", + "start_here_page_marketplace.content.13.description": "Venda seus produtos em uma das maiores redes sociais do mundo através da integração nativa da VTEX.", + "start_here_page_marketplace.content.13.link": "tracks/facebook", + "start_here_page_marketplace.content.14.title": "Integração com o TikTok", + "start_here_page_marketplace.content.14.description": "Anuncie seus produtos no TikTok através da VTEX.", + "start_here_page_marketplace.content.14.link": "tracks/tiktok-for-business", + "start_here_page_marketplace.content.15.title": "Integração Livelo", + "start_here_page_marketplace.content.15.description": "Venda seus produtos na plataforma de marketplace com o maior programa de recompensas do Brasil.", + "start_here_page_marketplace.content.15.link": "tracks/livelo-integration-overview", + "start_here_page_modules.title": "Módulos VTEX: Primeiros passos", + "start_here_page_modules.content.0.title": "Catálogo", + "start_here_page_modules.content.0.description": "Aprenda os fundamentos do módulo de Catálogo.", + "start_here_page_modules.content.0.link": "tracks/catalog-concept-definition", + "start_here_page_modules.content.1.title": "Logística", + "start_here_page_modules.content.1.description": "Aprenda os fundamentos do módulo de Estoque e Entrega.", + "start_here_page_modules.content.1.link": "tracks/getting-started-with-logistics", + "start_here_page_modules.content.2.title": "Preços", + "start_here_page_modules.content.2.description": "Aprenda os fundamentos do módulo de Preços.", + "start_here_page_modules.content.2.link": "tracks/prices-module-overview", + "start_here_page_modules.content.3.title": "Promoções", + "start_here_page_modules.content.3.description": "Aprenda os fundamentos do módulo de promoções.", + "start_here_page_modules.content.3.link": "tracks/how-promotions-work", + "start_here_page_modules.content.4.title": "Pedidos", + "start_here_page_modules.content.4.description": "Aprenda os fundamentos do módulo de Pedidos.", + "start_here_page_modules.content.4.link": "tracks/o-que-e-um-pedido-na-vtex", + "start_here_page_modules.content.5.title": "Pagamentos", + "start_here_page_modules.content.5.description": "Aprenda os fundamentos do módulo de Pagamentos.", + "start_here_page_modules.content.5.link": "tracks/how-the-payments-module-works", + "start_here_page_modules.content.6.title": "E-mails Transacionais", + "start_here_page_modules.content.6.description": "Aprenda os fundamentos do módulo de e-mails transacionais.", + "start_here_page_modules.content.6.link": "tracks/how-message-center-works", + "start_here_page_modules.content.7.title": "Storefront", + "start_here_page_modules.content.7.description": "Aprenda os fundamentos do nosso Content Management System.", + "start_here_page_modules.content.7.link": "tracks/what-is-the-cms", + "start_here_page_modules.content.8.title": "Contas e Permissões", + "start_here_page_modules.content.8.description": "Aprenda os fundamentos do módulo de Contas e Permissões.", + "start_here_page_modules.content.8.link": "tracks/understanding-your-account", + "start_here_page_modules.content.9.title": "Go-live", + "start_here_page_modules.content.9.description": "Disponibilize sua loja para que clientes a acessem e façam compras.", + "start_here_page_modules.content.9.link": "tracks/go-live-process", + "start_here_page_modules.content.10.title": "Desenvolvimento de Loja", + "start_here_page_modules.content.10.description": "Aprenda os fundamentos de desenvolvimento de loja na VTEX.", + "start_here_page_modules.content.10.link": "tracks/frontend", + "start_here_page_omnichannel.title": "Omnichannel", + "start_here_page_omnichannel.content.0.title": "VTEX Sales App - Primeiros passos e configurações", + "start_here_page_omnichannel.content.0.description": "Conceitos, pré-requisitos e instruções para configurar o VTEX Sales App.", + "start_here_page_omnichannel.content.0.link": "tracks/what-is-instore", + "start_here_page_omnichannel.content.1.title": "VTEX Sales App - Pagamentos", + "start_here_page_omnichannel.content.1.description": "O passo a passo para configurar os métodos de pagamento por adquirente homologado.", + "start_here_page_omnichannel.content.1.link": "tracks/setting-up-payment-methods-for-instore", + "start_here_page_omnichannel.content.2.title": "VTEX Sales App - Usando o app", + "start_here_page_omnichannel.content.2.description": "As funcionalidades do aplicativo do VTEX Sales App e como usá-las.", + "start_here_page_omnichannel.content.2.link": "tracks/installation", + "start_here_page_omnichannel.content.3.title": "Estratégias de Comércio Unificado", + "start_here_page_omnichannel.content.3.description": "Guias com o passo a passo para implementar algumas das principais estratégias de Comércio Unificado na VTEX.", + "start_here_page_omnichannel.content.3.link": "tracks/unified-commerce-101", + "start_here_page_vtex_io.title": "VTEX IO", + "start_here_page_vtex_io.content.0.title": "VTEX Intelligent Search", + "start_here_page_vtex_io.content.0.description": "Aprenda os fundamentos do aplicativo VTEX Intelligent Search", + "start_here_page_vtex_io.content.0.link": "tracks/overview-intelligent-search", + "start_here_page_vtex_io.content.1.title": "Hub de Extensões", + "start_here_page_vtex_io.content.1.description": "Adquira e gerencie extensões para estender a funcionalidade da sua loja. Encontre parceiros para desenvolver soluções personalizadas.", + "start_here_page_vtex_io.content.1.link": "extensions-hub-1", + "start_here_page_erp.title": "ERP", + "start_here_page_erp.content.0.title": "Adaptador VTEX - CIASHOP", + "start_here_page_erp.content.0.description": "Aprenda os fundamentos do Adaptador para migrar a integração entre seu ERP e a CIASHOP para a VTEX.", + "start_here_page_erp.content.0.link": "tracks/como-funciona-o-adaptador-vtex", + "start_here_page_payment.title": "Soluções de pagamento", + "start_here_page_payment.content.0.title": "Customer Credit - Como Começar", + "start_here_page_payment.content.0.description": "Habilite uma nova forma de pagamento para a sua loja ao aprender o passo a passo de como instalar e configurar o Customer Credit.", + "start_here_page_payment.content.0.link": "tracks/installing-customer-credit", + "start_here_page_payment.content.1.title": "Condições de Pagamento Clusterizadas", + "start_here_page_payment.content.1.description": "Conheça e habilite a nova customização de pagamento para o Customer Credit.", + "start_here_page_payment.content.1.link": "tracks/what-are-clustered-payment-conditions", + "start_here_page_payment.content.2.title": "Carteira digital (ewallet)", + "start_here_page_payment.content.2.description": "Uma carteira digital (também chamada de ewallet) é um ambiente seguro onde podem ser armazenados dados bancários e de cartão de crédito.", + "start_here_page_payment.content.2.link": "tracks/google-pay", + "start_here_page_conversational.title": "Conversational Commerce", + "start_here_page_conversational.content.0.title": "Conversational Commerce VTEX", + "start_here_page_conversational.content.0.description": "Aprenda a diversificar canais de venda, com compras mais rápidas e mais personalizadas por meio da automação.", + "start_here_page_conversational.content.0.link": "tracks/what-is-conversational-commerce-vtex", + "start_here_page_conversational.content.1.title": "VTEX Assisted Sales (SuiteShare)", + "start_here_page_conversational.content.1.description": "Aprenda soluções para atrair mais clientes, organizar os atendimentos do seu time, capturar dados dos clientes, fechar vendas e mensurar resultados.", + "start_here_page_conversational.content.1.link": "tracks/what-is-suiteshare", "storefront_development_page.title": "Storefront Development", "storefront_development_page.subtitle": "Express your brand identity creating unique storefronts.", "vtex_io_apps_page.title": "VTEX IO Apps", @@ -112,5 +238,17 @@ "support_plans.title": "Planos de suporte", "support_plans.description": "Veja detalhes dos planos de suporte disponíveis para cada plano comercial.", "announcement_bar.headline": "📢 Queremos saber mais sobre você e como você utiliza a nossa documentação. ", - "announcement_bar.button": "Participe de nossa pesquisa! Leva menos de 5 minutos." + "announcement_bar.button": "Participe de nossa pesquisa! Leva menos de 5 minutos.", + "documentation_reading_time.text": "{minutes} min de leitura", + "sidebar_known_issues.description": "Acesse conteúdo e encontre soluções para todas as suas dúvidas sobre a plataforma.", + "sidebar_support_rules.description": "Veja detalhes dos planos de suporte disponíveis para cada plano comercial.", + "updates_announcements_notes.description": "Fique por dentro das principais notícias da VTEX.", + "updates_info_notes.description": "Encontre respostas para suas principais dúvidas de forma rápida e prática.", + "menu_health_check.description": "Verifique o status detalhado em tempo real.", + "menu_status.description": "Acompanhe o registro do histórico de plataforma.", + "sidebar_support_rules.title": "Diretivas de suporte", + "sidebar_known_issues.title": "Problemas Conhecidos", + "menu_status.title": "Status", + "menu_health_check.title": "Verificação de Integridade", + "updates_announcements_notes.title": "Comunicados" } diff --git a/src/pages/500.tsx b/src/pages/500.tsx index a31b0cb6..6044e884 100644 --- a/src/pages/500.tsx +++ b/src/pages/500.tsx @@ -13,7 +13,7 @@ interface Props { branch: string } -const fiveHundredPage: Page = ({ branch }) => { +const FiveHundredPage: Page = ({ branch }) => { const { setBranchPreview } = useContext(PreviewContext) setBranchPreview(branch) @@ -73,4 +73,4 @@ export const getStaticProps: GetStaticProps = async ({ } } -export default fiveHundredPage +export default FiveHundredPage diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index eb24a606..9f2878a4 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -14,6 +14,8 @@ import Layout from 'components/layout' type Props = AppProps & { Component: Page } +import { ErrorBoundary, SuspenseFallback } from 'components/error-boundary' +import { Suspense } from 'react' import TrackerProvider from 'utils/contexts/trackerContext' import PreviewContextProvider from 'utils/contexts/preview' @@ -40,7 +42,13 @@ function MyApp({ Component, pageProps }: Props) { sectionSelected={pageProps.sectionSelected} parentsArray={pageProps.parentsArray} > - + + } + > + + + diff --git a/src/pages/api/docs.ts b/src/pages/api/docs.ts index 61c1e584..b03f2c17 100644 --- a/src/pages/api/docs.ts +++ b/src/pages/api/docs.ts @@ -1,6 +1,6 @@ -import getDocsPaths from 'utils/getDocsPaths' +import { getAllDocsPaths } from 'utils/getDocsPaths' //eslint-disable-next-line @typescript-eslint/no-explicit-any export default async function handler(req: any, res: any) { req = req - res.status(200).json(await getDocsPaths()) + res.status(200).json(await getAllDocsPaths()) } diff --git a/src/pages/api/revalidate.ts b/src/pages/api/revalidate.ts new file mode 100644 index 00000000..be6d9481 --- /dev/null +++ b/src/pages/api/revalidate.ts @@ -0,0 +1,15 @@ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default async function handler(req: any, res: any) { + if (req.query.secret !== process.env.REVALIDATE_SECRET) { + return res.status(401).json({ message: 'Invalid token' }) + } + + try { + if (req.query.url) { + await res.revalidate(req.query.url) + return res.json({ revalidated: true }) + } + } catch (err) { + return res.status(500).send('Error revalidating') + } +} diff --git a/src/pages/docs/tracks/[slug].tsx b/src/pages/docs/tracks/[slug].tsx index 66087cbf..475cc138 100644 --- a/src/pages/docs/tracks/[slug].tsx +++ b/src/pages/docs/tracks/[slug].tsx @@ -1,5 +1,5 @@ import Head from 'next/head' -import { useEffect, useState, useContext } from 'react' +import { useEffect, useState, useContext, useRef } from 'react' import { GetStaticPaths, GetStaticProps, NextPage } from 'next' import { PHASE_PRODUCTION_BUILD } from 'next/constants' import jp from 'jsonpath' @@ -26,17 +26,15 @@ import Breadcrumb from 'components/breadcrumb' import getHeadings from 'utils/getHeadings' import getNavigation from 'utils/getNavigation' -import getGithubFile from 'utils/getGithubFile' -import getDocsPaths from 'utils/getDocsPaths' +// import getGithubFile from 'utils/getGithubFile' +import { getDocsPaths as getTracksPaths } from 'utils/getDocsPaths' import replaceMagicBlocks from 'utils/replaceMagicBlocks' import escapeCurlyBraces from 'utils/escapeCurlyBraces' import replaceHTMLBlocks from 'utils/replaceHTMLBlocks' import { PreviewContext } from 'utils/contexts/preview' import styles from 'styles/documentation-page' -import getFileContributors, { - ContributorsType, -} from 'utils/getFileContributors' +import { ContributorsType } from 'utils/getFileContributors' import { getLogger } from 'utils/logging/log-util' import { @@ -46,8 +44,11 @@ import { localeType, } from 'utils/navigation-utils' import { MarkdownRenderer } from '@vtexdocs/components' +// import { ParsedUrlQuery } from 'querystring' +import { useIntl } from 'react-intl' +import { remarkReadingTime } from 'utils/remark_plugins/remarkReadingTime' -const docsPathsGLOBAL = await getDocsPaths() +const docsPathsGLOBAL = await getTracksPaths('tracks') interface Props { sectionSelected: string @@ -67,11 +68,11 @@ interface Props { pagination: { previousDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null | null + name: string | null } nextDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null | null + name: string | null } } isListed: boolean @@ -94,12 +95,16 @@ const TrackPage: NextPage = ({ }) => { const [headings, setHeadings] = useState([]) const { setBranchPreview } = useContext(PreviewContext) + const intl = useIntl() setBranchPreview(branch) const { setActiveSidebarElement } = useContext(LibraryContext) + const articleRef = useRef(null) + useEffect(() => { setActiveSidebarElement(slug) setHeadings(headingList) }, [serialized.frontmatter]) + return ( <> @@ -119,9 +124,20 @@ const TrackPage: NextPage = ({ -
+
- + + + + {intl.formatMessage( + { + id: 'documentation_reading_time.text', + defaultMessage: '', + }, + { minutes: serialized.frontmatter?.readingTime } + )} + + {serialized.frontmatter?.title} @@ -167,17 +183,23 @@ const TrackPage: NextPage = ({ } export const getStaticPaths: GetStaticPaths = async () => { - //const slugs = Object.keys(await getDocsPaths()) - //const paths = slugs.map((slug) => ({ - // params: { slug }, - //})) - const paths = [ - { - params: { slug: 'about-the-community-support-plan' }, - }, - ] + // const slugs: { [slug: string]: { locale: string; path: string }[] } = + // await getTracksPaths('tracks') + + // const paths: ( + // | string + // | { + // params: ParsedUrlQuery + // locale?: string | undefined + // } + // )[] = [] + // Object.entries(slugs).forEach(([slug, locales]) => { + // locales.forEach(({ locale }) => { + // paths.push({ params: { slug }, locale }) + // }) + // }) return { - paths, + paths: [], fallback: 'blocking', } } @@ -200,30 +222,71 @@ export const getStaticProps: GetStaticProps = async ({ const docsPaths = process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD ? docsPathsGLOBAL - : await getDocsPaths(branch, currentLocale) + : await getTracksPaths('tracks', branch) const logger = getLogger('Start here') - const path = docsPaths[slug] + const path = docsPaths[slug].find((e) => e.locale === locale)?.path + if (!path) { return { notFound: true, } } - let documentationContent = await getGithubFile( - 'vtexdocs', - 'help-center-content', - branch, - path - ) + // let documentationContent = await getGithubFile( + // 'vtexdocs', + // 'help-center-content', + // branch, + // path + // ) + let documentationContent = + (await fetch( + `https://raw.githubusercontent.com/vtexdocs/help-center-content/${branch}/${path}` + ) + .then((res) => res.text()) + .catch((err) => console.log(err))) || '' - const contributors = await getFileContributors( - 'vtexdocs', - 'help-center-content', - branch, - path - ) + const contributors = + (await fetch( + `https://github.com/vtexdocs/help-center-content/file-contributors/${branch}/${path}`, + { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + }, + } + ) + .then((res) => res.json()) + .then(({ users }) => { + const result: ContributorsType[] = [] + // eslint-disable-next-line @typescript-eslint/no-explicit-any + for (let i = 0; i < users.length; i++) { + const user = users[i] + if (user.id === '41898282') continue + result.push({ + name: user.login, + login: user.login, + avatar: user.primaryAvatarUrl, + userPage: `https://github.com${user.profileLink}`, + }) + } + + return result + }) + .catch((err) => console.log(err))) || [] + + // const contributors = [] + // const contributors = + // (await getFileContributors( + // 'vtexdocs', + // 'help-center-content', + // branch, + // path + // ).catch((err) => { + // console.log(err) + // })) || [] let format: 'md' | 'mdx' = 'mdx' try { @@ -247,6 +310,7 @@ export const getStaticProps: GetStaticProps = async ({ remarkImages, [getHeadings, { headingList }], remarkBlockquote, + remarkReadingTime, ], rehypePlugins: [ [rehypeHighlight, { languages: { hljsCurl }, ignoreMissing: true }], @@ -269,15 +333,25 @@ export const getStaticProps: GetStaticProps = async ({ : [] await Promise.all( seeAlsoUrls.map(async (seeAlsoUrl: string) => { - const seeAlsoPath = docsPaths[seeAlsoUrl.split('/')[3]] + const seeAlsoPath = docsPaths[seeAlsoUrl.split('/')[3]].find( + (e) => e.locale === locale + )?.path if (seeAlsoPath) { try { - const documentationContent = await getGithubFile( - 'vtexdocs', - 'help-center-content', - 'main', - seeAlsoPath - ) + const documentationContent = + (await fetch( + `https://raw.githubusercontent.com/vtexdocs/help-center-content/main/${seeAlsoPath}` + ) + .then((res) => res.text()) + .catch((err) => console.log(err))) || '' + + // const documentationContent = await getGithubFile( + // 'vtexdocs', + // 'help-center-content',W + // 'main', + // seeAlsoPath + // ) + const serialized = await serialize(documentationContent, { parseFrontmatter: true, }) @@ -309,6 +383,10 @@ export const getStaticProps: GetStaticProps = async ({ sidebarfallback, `$..[?(@.type=='markdown')]..name` ) + const docsListType = jp.query( + sidebarfallback, + `$..[?(@.type=='markdown')]..type` + ) const indexOfSlug = docsListSlug.indexOf(slug) const pagination = { previousDoc: { @@ -316,7 +394,7 @@ export const getStaticProps: GetStaticProps = async ({ ? docsListSlug[indexOfSlug - 1] : null, name: docsListName[indexOfSlug - 1] - ? docsListName[indexOfSlug - 1] + ? docsListName[indexOfSlug - 1][locale || 'en'] : null, }, nextDoc: { @@ -324,7 +402,7 @@ export const getStaticProps: GetStaticProps = async ({ ? docsListSlug[indexOfSlug + 1] : null, name: docsListName[indexOfSlug + 1] - ? docsListName[indexOfSlug + 1] + ? docsListName[indexOfSlug + 1][locale || 'en'] : null, }, } @@ -349,6 +427,7 @@ export const getStaticProps: GetStaticProps = async ({ currentLocale, parentsArrayName ) + parentsArrayName.push(docsListName[indexOfSlug][currentLocale]) getParents( keyPath, 'type', @@ -356,6 +435,13 @@ export const getStaticProps: GetStaticProps = async ({ currentLocale, parentsArrayType ) + parentsArrayType.push(docsListType[indexOfSlug]) + + if (serialized.frontmatter) { + serialized.frontmatter.title = `${ + docsListName[indexOfSlug][currentLocale].split(' ')[0] + } ${serialized.frontmatter.title}` + } } const breadcrumbList: { slug: string; name: string; type: string }[] = [] @@ -367,8 +453,6 @@ export const getStaticProps: GetStaticProps = async ({ }) }) - console.log(breadcrumbList) - return { props: { sectionSelected, @@ -385,6 +469,7 @@ export const getStaticProps: GetStaticProps = async ({ breadcrumbList, branch, }, + revalidate: 600, } } catch (error) { logger.error(`Error while processing ${path}\n${error}`) diff --git a/src/pages/docs/tracks/index.tsx b/src/pages/docs/tracks/index.tsx index ebdc0bf0..8dace40b 100644 --- a/src/pages/docs/tracks/index.tsx +++ b/src/pages/docs/tracks/index.tsx @@ -1,19 +1,15 @@ -import Image from 'next/image' import { Fragment, useContext } from 'react' -import { Box, Text, Grid, Flex, Link } from '@vtex/brand-ui' -import Tooltip from 'components/tooltip' +import { Box, Flex, Text } from '@vtex/brand-ui' import { GetStaticProps, NextPage } from 'next' import getNavigation from 'utils/getNavigation' import { DocumentationTitle, UpdatesTitle } from 'utils/typings/unionTypes' -import imgStyles from '../../../styles/core-services-styles' import PageHeader from 'components/page-header' -import image from '../../../../public/images/api-guides.png' -import imageData from '../../../../public/images/data-orchestration.png' -import imagePlatform from '../../../../public/images/platform.png' +import startHereImage from '../../../../public/images/start-here.png' import styles from 'styles/documentation-landing-page' import Head from 'next/head' import { PreviewContext } from 'utils/contexts/preview' import { useIntl } from 'react-intl' +import WhatsNextCard from 'components/whats-next-card' interface Props { sidebarfallback: any //eslint-disable-line @@ -21,145 +17,41 @@ interface Props { branch: string } -const Image2 = () => ( - - - Merchant channels - - - CDN - - Web Store - PWA - Live Shopping - Conversational - Marketplace Out - Personal Shopper - - - - - Mobile App - IOT - - - - +const ContentSection = ({ id, length }: { id: string; length: number }) => { + const intl = useIntl() - - - VTEX Core services - - - - - Catalog - - - - - Checkout - - - - - Promotions - - - - - Pricing - - - - - Payment Hub - - - - - Intelligent Search - - - - - Account management - - - DaaS - Master Data - OMS - Subscriptions - Ratings and reviews - CMS - Search - Messages - Logistics/ Inventory - Customers - - - VTEX IO Apps (PaaS) - - Custom Admin - Custom store component - - Custom backend service (API) - - VTEX App - - - - - - 3rd party optional - - Search - Personalization - Ratings and Reviews - Loyalty - Analytics and Reporting - DXP - Customer Payments - ADA - - - - - Integration Layer - - - Merchant back office - - ERP - OMS - WMS - PIM - CRM - Data Lake - - - -) + return ( + <> + + {intl.formatMessage({ id: `${id}.title` })} + + + {Array(length) + .fill('') + .map((_, index) => { + if (!intl.messages[`${id}.content.${index}.title`]) return <> + return ( + + ) + })} + + + ) +} const TracksPage: NextPage = ({ branch }) => { const { setBranchPreview } = useContext(PreviewContext) @@ -170,13 +62,13 @@ const TracksPage: NextPage = ({ branch }) => { {intl.formatMessage({ - id: 'api_guides_page.title', + id: 'start_here_page.title', })} @@ -184,62 +76,24 @@ const TracksPage: NextPage = ({ branch }) => { - Get started - - Our core commerce capabilities, provided by over 70 shared - microservices, are available for flexible customization through our - REST APIs. This enables our clients to integrate third-party - solutions into a single platform for all experiences.{' '} - - Platform overview - - Using our REST APIs with our serverless development platform (VTEX - IO) and scalable data service (Master Data), you can expand the VTEX - platform to address your unique business needs. - - - Data orchestration - - Our platform orchestrates data through multiple channels and sources - to remove barriers and enable more possibilities. E-commerce, - Brick-and-mortar, Marketplace, B2B... You name it, we enable it. - That is why we are a unified commerce platform for unified - businesses. - - Data orchestration - - Core services - - Get to know our core microsservices and leverage your business with - our Headless architecture. Our API Guides and Reference cover VTEX - Core Services, as illustrated in the image below. - - + + + + + + + diff --git a/src/pages/docs/tutorial/[slug].tsx b/src/pages/docs/tutorial/[slug].tsx index 72fb53a8..c8e7803c 100644 --- a/src/pages/docs/tutorial/[slug].tsx +++ b/src/pages/docs/tutorial/[slug].tsx @@ -27,17 +27,15 @@ import Breadcrumb from 'components/breadcrumb' import getHeadings from 'utils/getHeadings' import getNavigation from 'utils/getNavigation' -import getGithubFile from 'utils/getGithubFile' -import getDocsPaths from 'utils/getDocsPaths' +// import getGithubFile from 'utils/getGithubFile' +import { getDocsPaths as getTutorialsPaths } from 'utils/getDocsPaths' import replaceMagicBlocks from 'utils/replaceMagicBlocks' import escapeCurlyBraces from 'utils/escapeCurlyBraces' import replaceHTMLBlocks from 'utils/replaceHTMLBlocks' import { PreviewContext } from 'utils/contexts/preview' import styles from 'styles/documentation-page' -import getFileContributors, { - ContributorsType, -} from 'utils/getFileContributors' +import { ContributorsType } from 'utils/getFileContributors' import { getLogger } from 'utils/logging/log-util' import { @@ -46,8 +44,9 @@ import { getParents, localeType, } from 'utils/navigation-utils' +// import { ParsedUrlQuery } from 'querystring' -const docsPathsGLOBAL = await getDocsPaths() +const docsPathsGLOBAL = await getTutorialsPaths('tutorials') interface Props { sectionSelected: string @@ -67,11 +66,11 @@ interface Props { pagination: { previousDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null | null + name: string | null } nextDoc: { slug: string | null - name: { en: string; pt: string; es: string } | null | null + name: string | null } } isListed: boolean @@ -167,17 +166,23 @@ const TutorialPage: NextPage = ({ } export const getStaticPaths: GetStaticPaths = async () => { - //const slugs = Object.keys(await getDocsPaths()) - //const paths = slugs.map((slug) => ({ - // params: { slug }, - //})) - const paths = [ - { - params: { slug: 'about-the-community-support-plan' }, - }, - ] + // const slugs: { [slug: string]: { locale: string; path: string }[] } = + // await getTutorialsPaths('tutorials') + + // const paths: ( + // | string + // | { + // params: ParsedUrlQuery + // locale?: string | undefined + // } + // )[] = [] + // Object.entries(slugs).forEach(([slug, locales]) => { + // locales.forEach(({ locale }) => { + // paths.push({ params: { slug }, locale }) + // }) + // }) return { - paths, + paths: [], fallback: 'blocking', } } @@ -200,30 +205,70 @@ export const getStaticProps: GetStaticProps = async ({ const docsPaths = process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD ? docsPathsGLOBAL - : await getDocsPaths(branch, currentLocale) + : await getTutorialsPaths('tutorials', branch) const logger = getLogger('Tutorials & Solutions') + const path = docsPaths[slug].find((e) => e.locale === locale)?.path - const path = docsPaths[slug] if (!path) { return { notFound: true, } } - let documentationContent = await getGithubFile( - 'vtexdocs', - 'help-center-content', - branch, - path - ) + // let documentationContent = await getGithubFile( + // 'vtexdocs', + // 'help-center-content', + // branch, + // pathcontribut + // ) - const contributors = await getFileContributors( - 'vtexdocs', - 'help-center-content', - branch, - path - ) + let documentationContent = + (await fetch( + `https://raw.githubusercontent.com/vtexdocs/help-center-content/${branch}/${path}` + ) + .then((res) => res.text()) + .catch((err) => console.log(err))) || '' + + // const contributors = + // (await getFileContributors( + // 'vtexdocs', + // 'help-center-content', + // branch, + // path + // ).catch((err) => { + // console.log(err) + // })) || [] + + const contributors = + (await fetch( + `https://github.com/vtexdocs/help-center-content/file-contributors/${branch}/${path}`, + { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + }, + } + ) + .then((res) => res.json()) + .then(({ users }) => { + const result: ContributorsType[] = [] + // eslint-disable-next-line @typescript-eslint/no-explicit-any + for (let i = 0; i < users.length; i++) { + const user = users[i] + if (user.id === '41898282') continue + result.push({ + name: user.login, + login: user.login, + avatar: user.primaryAvatarUrl, + userPage: `https://github.com${user.profileLink}`, + }) + } + + return result + }) + .catch((err) => console.log(err))) || [] let format: 'md' | 'mdx' = 'mdx' try { @@ -269,15 +314,23 @@ export const getStaticProps: GetStaticProps = async ({ : [] await Promise.all( seeAlsoUrls.map(async (seeAlsoUrl: string) => { - const seeAlsoPath = docsPaths[seeAlsoUrl.split('/')[3]] + const seeAlsoPath = docsPaths[seeAlsoUrl.split('/')[3]].find( + (e) => e.locale === locale + )?.path if (seeAlsoPath) { try { - const documentationContent = await getGithubFile( - 'vtexdocs', - 'help-center-content', - 'main', - seeAlsoPath - ) + const documentationContent = + (await fetch( + `https://raw.githubusercontent.com/vtexdocs/help-center-content/main/${seeAlsoPath}` + ) + .then((res) => res.text()) + .catch((err) => console.log(err))) || '' + // const documentationContent = await getGithubFile( + // 'vtexdocs', + // 'help-center-content', + // 'main', + // seeAlsoPath + // ) const serialized = await serialize(documentationContent, { parseFrontmatter: true, }) @@ -316,7 +369,7 @@ export const getStaticProps: GetStaticProps = async ({ ? docsListSlug[indexOfSlug - 1] : null, name: docsListName[indexOfSlug - 1] - ? docsListName[indexOfSlug - 1] + ? docsListName[indexOfSlug - 1][locale || 'en'] : null, }, nextDoc: { @@ -324,7 +377,7 @@ export const getStaticProps: GetStaticProps = async ({ ? docsListSlug[indexOfSlug + 1] : null, name: docsListName[indexOfSlug + 1] - ? docsListName[indexOfSlug + 1] + ? docsListName[indexOfSlug + 1][locale || 'en'] : null, }, } @@ -383,6 +436,7 @@ export const getStaticProps: GetStaticProps = async ({ breadcrumbList, branch, }, + revalidate: 600, } } catch (error) { logger.error(`Error while processing ${path}\n${error}`) diff --git a/src/pages/docs/tutorial/index.tsx b/src/pages/docs/tutorial/index.tsx index b0a6ea7b..b92b1a11 100644 --- a/src/pages/docs/tutorial/index.tsx +++ b/src/pages/docs/tutorial/index.tsx @@ -170,13 +170,13 @@ const TutorialsPage: NextPage = ({ branch }) => { {intl.formatMessage({ - id: 'api_guides_page.title', + id: 'start_here_page.title', })} @@ -184,10 +184,10 @@ const TutorialsPage: NextPage = ({ branch }) => { = ({ serialized, branch }) => { } export const getStaticPaths: GetStaticPaths = async () => { - const paths = [ - { - params: { slug: 'access-googles-pagespeed-insights-in-your-vtex-admin' }, - }, - ] + // const slugs: { [slug: string]: { locale: string; path: string }[] } = + // await getNewsPaths('announcements') + + // const paths: ( + // | string + // | { + // params: ParsedUrlQuery + // locale?: string | undefined + // } + // )[] = [] + // Object.entries(slugs).forEach(([slug, locales]) => { + // locales.forEach(({ locale }) => { + // paths.push({ params: { slug }, locale }) + // }) + // }) + return { - paths, + paths: [], fallback: 'blocking', } } @@ -154,22 +166,30 @@ export const getStaticProps: GetStaticProps = async ({ const docsPaths = process.env.NEXT_PHASE === PHASE_PRODUCTION_BUILD ? docsPathsGLOBAL - : await getReleasePaths(branch, currentLocale) + : await getNewsPaths('announcements', branch) - const path = docsPaths[slug] + const path = docsPaths[slug].find((e) => e.locale === locale)?.path if (!path) { return { notFound: true, } } - let documentationContent = await getGithubFile( - 'vtexdocs', - 'help-center-content', - branch, - path - ) - const logger = getLogger('Release-Notes') + // let documentationContent = await getGithubFile( + // 'vtexdocs', + // 'help-center-content', + // branch, + // path + // ) + + let documentationContent = + (await fetch( + `https://raw.githubusercontent.com/vtexdocs/help-center-content/${branch}/${path}` + ) + .then((res) => res.text()) + .catch((err) => console.log(err))) || '' + + const logger = getLogger('News') try { if (path.endsWith('.md')) { diff --git a/src/styles/documentation-page.ts b/src/styles/documentation-page.ts index c0e36191..b8f6f7ca 100644 --- a/src/styles/documentation-page.ts +++ b/src/styles/documentation-page.ts @@ -12,7 +12,7 @@ const mainContainer: SxStyleProp = { const innerContainer: SxStyleProp = { justifyContent: 'center', - pt: '64px', + pt: ['28px', '64px'], mx: 'auto', px: ['auto', '5em', '7em', '7em', '7em', '7em', '20em'], } @@ -113,6 +113,19 @@ const divider: SxStyleProp = { borderBottom: '1px solid #E7E9EE', } +const readingTime: SxStyleProp = { + color: '#6b7785', + mb: '24px', + lineHeight: '18px', + ml: 'auto', +} + +const flexContainer: SxStyleProp = { + justifyContent: ['center', 'space-between'], + flexWrap: 'wrap-reverse', + columnGap: '16px', +} + export default { container, mainContainer, @@ -126,4 +139,6 @@ export default { documentationExcerpt, innerContainer, divider, + readingTime, + flexContainer, } diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 611da77a..bcf8258c 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,17 +1,14 @@ -import AnnouncementIcon from 'components/icons/announcement-icon' - import { getMessages } from 'utils/get-messages' import { getCommunityURL, getLearningCenterURL, getDeveloperPortalURL, - getHelpCenterURL, getSupportURL, + getFeedbackURL, } from 'utils/get-url' import { DocDataElement, - UpdatesDataElement, WhatsNextDataElement, ResourceDataElement, FaqDataElement, @@ -25,6 +22,9 @@ import PaperIcon from 'components/icons/paper-icon' import WarningIcon from 'components/icons/warning-icon' import GraphIcon from 'components/icons/graph-icon' import SignalIcon from 'components/icons/signal-icon' +import MegaphoneIcon from 'components/icons/megaphone-icon' +import InfoIcon from 'components/icons/info-icon' +import LongArrowIcon from 'components/icons/long-arrow-icon' libraryConfig export const messages = getMessages() @@ -32,6 +32,35 @@ export const messages = getMessages() export const documentationData = (intl: IntlShape) => { const data: DocDataElement[] = [ { + id: 'Start here', + Icon: StartHereIcon, + title: intl.formatMessage({ + id: 'documentation_start_here.title', + }), + description: intl.formatMessage({ + id: 'documentation_start_here.description', + }), + link: '/docs/tracks', + }, + { + id: 'Tutorials & Solutions', + Icon: TutorialsIcon, + title: intl.formatMessage({ + id: 'documentation_tutorials.title', + }), + description: intl.formatMessage({ + id: 'documentation_tutorials.description', + }), + link: '/docs/tutorial', + }, + ] + return data +} + +export const menuDocumentationData = (intl: IntlShape) => { + const data: DocDataElement[] = [ + { + id: 'Start here', Icon: StartHereIcon, title: intl.formatMessage({ id: 'documentation_start_here.title', @@ -42,6 +71,7 @@ export const documentationData = (intl: IntlShape) => { link: '/docs/tracks', }, { + id: 'Tutorials & Solutions', Icon: TutorialsIcon, title: intl.formatMessage({ id: 'documentation_tutorials.title', @@ -52,6 +82,7 @@ export const documentationData = (intl: IntlShape) => { link: '/docs/tutorial', }, { + id: 'Developers Portal', Icon: DeveloperPortalIcon, title: intl.formatMessage({ id: 'documentation_developers_portal.title', @@ -67,19 +98,127 @@ export const documentationData = (intl: IntlShape) => { } export const updatesData = (intl: IntlShape) => { - const data: UpdatesDataElement[] = [ + const data: DocDataElement[] = [ { - Icon: AnnouncementIcon, - title: 'News', + id: 'FAQ', + Icon: InfoIcon, + title: 'FAQ', + description: intl.formatMessage({ + id: 'updates_info_notes.description', + }), + link: '/updates/announcements', //TODO: mudar rota + }, + { + id: 'Announcements', + Icon: MegaphoneIcon, + title: intl.formatMessage({ + id: 'updates_announcements_notes.title', + }), description: intl.formatMessage({ - id: 'updates_release_notes.description', + id: 'updates_announcements_notes.description', }), - link: '/updates/announcements', + link: '/updates/announcements', //TODO: verificar rota }, ] return data } +export const feedbackSectionData = (intl: IntlShape) => { + const data: DocDataElement[] = [ + { + id: 'Feedback', + Icon: LongArrowIcon, + title: intl.formatMessage({ + id: 'landing_page_header_feedback.message', + }), + description: '', + link: getFeedbackURL(), + }, + ] + + return data +} + +export const knownIssuesData = (intl: IntlShape) => { + const data: DocDataElement[] = [ + { + id: 'Known Issues', + Icon: WarningIcon, + title: intl.formatMessage({ + id: 'sidebar_known_issues.title', + }), + description: intl.formatMessage({ + id: 'sidebar_known_issues.description', + }), + link: '#', //TODO: Trocar rota + }, + { + id: 'Support Rules', + Icon: PaperIcon, + title: intl.formatMessage({ + id: 'sidebar_support_rules.title', + }), + description: intl.formatMessage({ + id: 'sidebar_support_rules.description', + }), + link: '#', //TODO: trocar rota + }, + ] + + return data +} + +export const menuSupportData = (intl: IntlShape) => { + const data: DocDataElement[] = [ + { + id: 'Known Issues', + Icon: WarningIcon, + title: intl.formatMessage({ + id: 'sidebar_known_issues.title', + }), + description: intl.formatMessage({ + id: 'sidebar_known_issues.description', + }), + link: '#', //TODO: Trocar rota + }, + { + id: 'Status', + Icon: GraphIcon, + title: intl.formatMessage({ + id: 'menu_status.title', + }), + description: intl.formatMessage({ + id: 'menu_status.description', + }), + link: '#', // TODO: trocar rota + }, + { + id: 'Health Check', + Icon: SignalIcon, + title: intl.formatMessage({ + id: 'menu_health_check.title', + }), + description: intl.formatMessage({ + id: 'menu_health_check.description', + }), + link: '#', // TODO: trocar rota + }, + { + id: 'Support Rules', + Icon: PaperIcon, + title: intl.formatMessage({ + id: 'sidebar_support_rules.title', + }), + description: intl.formatMessage({ + id: 'sidebar_support_rules.description', + }), + link: '#', //TODO: trocar rota + }, + ] + + return data +} + export const faqData = (intl: IntlShape) => { const data: FaqDataElement[] = [ { @@ -141,6 +280,7 @@ export const faqData = (intl: IntlShape) => { export const supportData = (intl: IntlShape) => { const data: DocDataElement[] = [ { + id: 'Known Issues', Icon: WarningIcon, title: intl.formatMessage({ id: 'support_known_issues.title', @@ -151,6 +291,7 @@ export const supportData = (intl: IntlShape) => { link: '/known-issues', }, { + id: 'Support Plans', Icon: PaperIcon, title: intl.formatMessage({ id: 'support_plans.title', @@ -161,6 +302,7 @@ export const supportData = (intl: IntlShape) => { link: '/support-plans', }, { + id: 'Health Check', Icon: SignalIcon, title: intl.formatMessage({ id: 'support_health_check.title', @@ -172,6 +314,7 @@ export const supportData = (intl: IntlShape) => { link: 'http://healthcheck.vtex.com/', }, { + id: 'Status', Icon: GraphIcon, title: intl.formatMessage({ id: 'support_status.title', @@ -271,13 +414,6 @@ export const resources = (intl: IntlShape) => { }), link: getDeveloperPortalURL(), }, - { - title: 'Help Center', - description: intl.formatMessage({ - id: 'app_development_page_other_resources_help_center.description', - }), - link: getHelpCenterURL(), - }, { title: 'Support', description: intl.formatMessage({ diff --git a/src/utils/enumerate-navigation.ts b/src/utils/enumerate-navigation.ts new file mode 100644 index 00000000..e76c7ea8 --- /dev/null +++ b/src/utils/enumerate-navigation.ts @@ -0,0 +1,55 @@ +interface NavbarItem { + documentantion: string + slugPrefix: string + categories: Document[] +} + +interface Document { + name: { en: string; es: string; pt: string } + type: string + children: Document[] +} + +const ENUMERABLE_SECTIONS_SLUGS = ['docs/tracks'] +const ENUMERATION_TYPE = 'track' + +export const enumerateNavigation = (navbar: NavbarItem[]) => { + return navbar.map((item) => { + if (!ENUMERABLE_SECTIONS_SLUGS.includes(item.slugPrefix)) return item + item.categories = item.categories.map((category) => { + category.children = enumerateChildren( + category, + category.type === ENUMERATION_TYPE + ) + return category + }) + return item + }) +} + +const enumerateChildren = ( + document: Document, + enumerate: boolean +): Document[] => { + const children = document.children.map((currDoc, index) => { + if (enumerate) currDoc.name = enumerateName(currDoc.name, index + 1) + currDoc.children = enumerateChildren( + currDoc, + ENUMERATION_TYPE === currDoc.type + ) + return currDoc + }) + + return children +} + +const enumerateName = ( + name: { en: string; es: string; pt: string }, + id: number +) => { + name.en = id + '. ' + name.en + name.es = id + '. ' + name.es + name.pt = id + '. ' + name.pt + + return name +} diff --git a/src/utils/get-url.tsx b/src/utils/get-url.tsx index 0330a341..7a5cf1d1 100644 --- a/src/utils/get-url.tsx +++ b/src/utils/get-url.tsx @@ -6,8 +6,8 @@ export const getDeveloperPortalURL = () => { return `https://developers.vtex.com/` } -export const getHelpCenterURL = () => { - return `https://help.vtex.com/` +export const getGithubURL = () => { + return `https://github.com/vtexdocs/helpcenter` } export const getCommunityURL = () => { @@ -21,3 +21,27 @@ export const getLearningCenterURL = () => { export const getSupportURL = () => { return 'https://help.vtex.com/en/support' } + +export const getSiteMapURL = () => { + return 'https://help.vtex.com/sitemap' +} + +export const getLinkedinURL = () => { + return 'https://linkedin.com/company/vtex' +} + +export const getFacebookURL = () => { + return 'https://www.facebook.com/vtexcommerce/' +} + +export const getInstagramURL = () => { + return 'https://www.instagram.com/vtexbrasil/' +} + +export const getYoutubeURL = () => { + return 'https://www.youtube.com/c/VTEX-Commerce/featured' +} + +export const getTwitterURL = () => { + return 'https://twitter.com/vtexonline' +} diff --git a/src/utils/getDocsPaths.ts b/src/utils/getDocsPaths.ts index 8906a964..81821a8b 100644 --- a/src/utils/getDocsPaths.ts +++ b/src/utils/getDocsPaths.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment */ -const docsPaths: { [slug: string]: string } = {} +const docsPaths: { [slug: string]: { locale: string; path: string }[] } = {} import octokit from 'utils/octokitConfig' @@ -18,7 +18,7 @@ async function getGithubTree(org: string, repo: string, ref: string) { //https://api.github.com/repos/vtexdocs/devportal/commits?path=README.md -export default async function getDocsPaths(branch = 'main', locale = 'en') { +export async function getAllDocsPaths(branch = 'main') { const repoTree = await getGithubTree( 'vtexdocs', 'help-center-content', @@ -27,18 +27,50 @@ export default async function getDocsPaths(branch = 'main', locale = 'en') { // @ts-ignore repoTree.tree.map((node: any) => { const path = node.path - const re = /^(?.+\/)*(?.+)\.(?.+)$/ - if ( - path.startsWith(`docs/tracks/${locale}`) || - path.startsWith(`docs/faq/${locale}`) || - path.startsWith(`docs/known-issues/${locale}`) || - path.startsWith(`docs/tutorials/${locale}`) - ) { + const re = + /^(?.+\/)*(?pt|es|en+)\/(?.+\/)*(?.+)\.(?.+)$/ + if (path.startsWith(`docs/`)) { const match = path.match(re) const filename = match?.groups?.filename ? match?.groups?.filename : '' const filetype = match?.groups?.filetype ? match?.groups?.filetype : '' + const fileLocale = match?.groups?.locale ? match?.groups?.locale : '' if (filetype === 'md' || filetype === 'mdx') { - ;(docsPaths as any)[filename] = path + if (!docsPaths[filename]) docsPaths[filename] = [] + docsPaths[filename].push({ + locale: fileLocale, + path, + }) + } + } + }) + return docsPaths +} + +export async function getDocsPaths( + category: 'tracks' | 'tutorials' | 'announcements' | 'faq', + branch = 'main' +) { + const repoTree = await getGithubTree( + 'vtexdocs', + 'help-center-content', + branch + ) + // @ts-ignore + repoTree.tree.map((node: any) => { + const path = node.path + const re = + /^(?.+\/)*(?pt|es|en+)\/(?.+\/)*(?.+)\.(?.+)$/ + if (path.startsWith(`docs/${category}`)) { + const match = path.match(re) + const filename = match?.groups?.filename ? match?.groups?.filename : '' + const filetype = match?.groups?.filetype ? match?.groups?.filetype : '' + const fileLocale = match?.groups?.locale ? match?.groups?.locale : '' + if (filetype === 'md' || filetype === 'mdx') { + if (!docsPaths[filename]) docsPaths[filename] = [] + docsPaths[filename].push({ + locale: fileLocale, + path, + }) } } }) diff --git a/src/utils/getFileContributors.ts b/src/utils/getFileContributors.ts index 9dfe1305..e5e58dd8 100644 --- a/src/utils/getFileContributors.ts +++ b/src/utils/getFileContributors.ts @@ -15,23 +15,27 @@ export default async function getFileContributors( path: string ): Promise { const contributors: ContributorsType[] = [] - const response = await octokit.rest.repos.listCommits({ - owner, - repo, - sha: ref, - path, - }) + try { + const response = await octokit.rest.repos.listCommits({ + owner, + repo, + sha: ref, + path, + }) - response.data.forEach((commitData: any) => { - if (!contributors.find((e) => e.login === commitData.author.login)) { - contributors.push({ - name: commitData.commit.author.name, - login: commitData.author.login, - avatar: commitData.author.avatar_url, - userPage: commitData.author.html_url, - }) - } - }) + response.data.forEach((commitData: any) => { + if (!contributors.find((e) => e.login === commitData.author.login)) { + contributors.push({ + name: commitData.commit.author.name, + login: commitData.author.login, + avatar: commitData.author.avatar_url, + userPage: commitData.author.html_url, + }) + } + }) + } catch (e: any) { + console.error(e.response.data.message) + } return contributors } diff --git a/src/utils/getNavigation.ts b/src/utils/getNavigation.ts index dc732a19..6c25a75c 100644 --- a/src/utils/getNavigation.ts +++ b/src/utils/getNavigation.ts @@ -1,7 +1,9 @@ +import { enumerateNavigation } from './enumerate-navigation' + export default async function getNavigation() { const navigationJsonUrl = process.env.navigationJsonUrl const result = await fetch(navigationJsonUrl as string) .then((res) => res.json()) - .then((res) => res.navbar) + .then((res) => enumerateNavigation(res.navbar)) return result } diff --git a/src/utils/octokitConfig.ts b/src/utils/octokitConfig.ts index 4b6b9076..903a83e7 100644 --- a/src/utils/octokitConfig.ts +++ b/src/utils/octokitConfig.ts @@ -14,6 +14,7 @@ const octokitConfig = { installationId: config.GITHUB_INSTALLATIONID, }, throttle: { + enabled: false, onRateLimit: (retryAfter: any, options: any, octokit: any) => { octokit.log.warn( `Request quota exhausted for request ${options.method} ${options.url}` diff --git a/src/utils/remark_plugins/remarkReadingTime.ts b/src/utils/remark_plugins/remarkReadingTime.ts new file mode 100644 index 00000000..9ec4b026 --- /dev/null +++ b/src/utils/remark_plugins/remarkReadingTime.ts @@ -0,0 +1,11 @@ +import getReadingTime from 'reading-time' +import { toString } from 'mdast-util-to-string' + +export function remarkReadingTime() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return function (tree: Node, file: any) { + const textOnPage = toString(tree) + const readingTime = getReadingTime(textOnPage) + file.data.matter['readingTime'] = Math.ceil(readingTime.minutes) + } +} diff --git a/src/utils/typings/types.ts b/src/utils/typings/types.ts index 7c4d34d6..b0b87276 100644 --- a/src/utils/typings/types.ts +++ b/src/utils/typings/types.ts @@ -19,6 +19,7 @@ export type DataElement = { description: string } export interface DocDataElement extends DataElement { + id: string title: string isExternalLink?: boolean } @@ -32,6 +33,10 @@ export interface UpdatesDataElement extends DataElement { title: UpdatesTitle } +export interface ExternalLinkDataElement extends DataElement { + title: string +} + export type UpdateElement = { slug: string title: string diff --git a/src/utils/typings/unionTypes.ts b/src/utils/typings/unionTypes.ts index 1243882e..356291fe 100644 --- a/src/utils/typings/unionTypes.ts +++ b/src/utils/typings/unionTypes.ts @@ -5,7 +5,7 @@ export type DocumentationTitle = | 'Tutorials & Solutions' | 'Developers Portal' -export type UpdatesTitle = 'News' | 'Documentation Updates' +export type UpdatesTitle = 'Announcement' | 'FAQ' export type SlugPrefix = 'tutorial' diff --git a/tsconfig.json b/tsconfig.json index 7657bfca..bb2488ad 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -37,7 +37,8 @@ "next-env.d.ts", "**/*.ts", "**/*.tsx", - "src/tests/cypress/support/commands.js" + "src/tests/cypress/support/commands.js", + "src/components/error-boundary/index.jsx" ], "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 9a896e11..2bbd9e0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1400,6 +1400,11 @@ resolved "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0.tgz" integrity sha512-2cyupPIZI69HQxEAPllLXBjQp4njDKkOjYRCYxvMZe3/LY9pp9fBM3Tb1wiFAdP6Emo4v3OEbCLGj6u73Q5KLw== +"@fastify/accept-negotiator@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" + integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== + "@formatjs/ecma402-abstract@1.18.0": version "1.18.0" resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz#e2120e7101020140661b58430a7ff4262705a2f2" @@ -1494,6 +1499,11 @@ resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== +"@ioredis/commands@^1.1.1": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" + integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" @@ -1611,6 +1621,211 @@ resolved "https://registry.yarnpkg.com/@medv/finder/-/finder-3.0.0.tgz#141b81504f71c25ca860716451b8bcb2d8ef4783" integrity sha512-GhTmdnzIm+EMCSAF6QL1JunVN/9r4GUbYBWbhX7zOCtNqhsA/Bo9ltr+Cl5p5U4F9PTEwnF7pWmSPWC3H3MUQQ== +"@netlify/blobs@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@netlify/blobs/-/blobs-2.2.0.tgz#bf634e6f1a43df3fab2088b5093c9e8eda01b393" + integrity sha512-j2C0+IvWj9CLNGPoiA7ETquMFDExZTrv4CarjfE6Au0eY3zlinnnTVae7DE+VQFK+U0CDM/O0VvelNy1QbsdwQ== + +"@netlify/esbuild-android-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz#7bd30aba94a92351d2c5e25e178ceb824f3c2f99" + integrity sha512-azq+lsvjRsKLap8ubIwSJXGyknUACqYu5h98Fvyoh40Qk4QXIVKl16JIJ4s+B7jy2k9qblEc5c4nxdDA3aGbVA== + +"@netlify/esbuild-android-arm64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz#0b3e11efaa9379792592173152eba2c9f8b933b0" + integrity sha512-WhIP7ePq4qMC1sxoaeB9SsJqSW6uzW7XDj/IuWl1l9r94nwxywU1sYdVLaF2mZr15njviazYjVr8x1d+ipwL3w== + +"@netlify/esbuild-darwin-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz#bb4a3a244723351dabd3cd0553425d087901c408" + integrity sha512-eF4GvLYiDxtcyjFT55+h+8c8A2HltjeMezCqkt3AQSgOdu1nhlvwbBhIdg2dyM6gKEaEm5hBtTbicEDSwsLodA== + +"@netlify/esbuild-darwin-arm64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz#48e5abd7d32cdefe4db30026e21c5173afae3c8d" + integrity sha512-b7rtnX/VtYwNbUCxs3eulrCWJ+u2YvqDcXiIV1ka+od+N0fTx+4RrVkVp1lha9L0wEJYK9J7UWZOMLMyd1ynRg== + +"@netlify/esbuild-freebsd-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz#d9650ba7ac0df826ad8928cc3b02e16d00c259b0" + integrity sha512-XtusxDJt2hUKUdggbTFolMx0kJL2zEa4STI7YwpB+ukEWoW5rODZjiLZbqqYLcjDH8k4YwHaMxs103L8eButEQ== + +"@netlify/esbuild-freebsd-arm64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz#4e1401e44f79e007dc43b6edac737d010685f9f0" + integrity sha512-A9XZKai+k6kfndCtN6Dh2usT28V0+OGxzFdZsANONPQiEUTrGZCgwcHWiVlVn7SeAwPR1tKZreTnvrfj8cj7hA== + +"@netlify/esbuild-linux-32@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz#fb017e160d8caa72efa36cf9a2748cd01165a463" + integrity sha512-ZQnqk/82YRvINY+aF+LlGfRZ19c5mH0jaxsO046GpIOPx6PcXHG8JJ2lg+vLJVe4zFPohxzabcYpwFuT4cg/GA== + +"@netlify/esbuild-linux-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz#d89f1aed0f3607b092ca2f57556725af3ceb8252" + integrity sha512-IQtswVw7GAKNX/3yV390wSfSXvMWy0d5cw8csAffwBk9gupftY2lzepK4Cn6uD/aqLt3Iku33FbHop/2nPGfQA== + +"@netlify/esbuild-linux-arm64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz#faf6e1e2587045df193d4893e4c30237e2cb84e9" + integrity sha512-4Jie4QV6pWWuGN7TAshNMGbdTA9+VbRkv3rPIxhgK5gBfmsAV1yRKsumE4Y77J0AZNRiOriyoec4zc1qkmI3zg== + +"@netlify/esbuild-linux-arm@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz#bd43359c9e00caebf9bd8f47b8fc7606f5433618" + integrity sha512-QdOzQniOed0Bz1cTC9TMMwvtAqKayYv66H4edJlbvElC81yJZF/c9XhmYWJ6P5g4nkChZubQ5RcQwTLmrFGexg== + +"@netlify/esbuild-linux-mips64le@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz#0d69730b40175406e943bbf519a4de85750e1ed3" + integrity sha512-Htozxr95tw4tSd86YNbCLs1eoYQzNu/cHpzFIkuJoztZueUhl8XpRvBdob7n3kEjW1gitLWAIn8XUwSt+aJ1Tg== + +"@netlify/esbuild-linux-ppc64le@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz#18fd4c7190496382501bb95c3f015f7ec1b0acb2" + integrity sha512-tFy0ufWIdjeuk1rPHee00TZlhr9OSF00Ufb4ROFyt2ArKuMSkWRJuDgx6MtZcAnCIN4cybo/xWl3MKTM+scnww== + +"@netlify/esbuild-linux-riscv64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz#c9dc6af7e999ead24e2d68443c8c630094908930" + integrity sha512-ZzfKvwIxL7wQnYbVFpyNW0wotnLoKageUEM57RbjekesJoNQnqUR6Usm+LDZoB8iRsI58VX1IxnstP0cX8vOHw== + +"@netlify/esbuild-linux-s390x@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz#8b87c0a09397b014e9f4fb3873c891ea0d81df40" + integrity sha512-yjC0mFwnuMRoh0WcF0h71MF71ytZBFEQQTRdgiGT0+gbC4UApBqnTkJdLx32RscBKi9skbMChiJ748hDJou6FA== + +"@netlify/esbuild-netbsd-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz#3f049e25a6d00f17519220ab2f5e15f027edadae" + integrity sha512-mIq4znOoz3YfTVdv3sIWfR4Zx5JgMnT4srlhC5KYVHibhxvyDdin5txldYXmR4Zv4dZd6DSuWFsn441aUegHeA== + +"@netlify/esbuild-openbsd-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz#02396cf8e8ca01484df58a191d301adc587397c9" + integrity sha512-+t6QdzJCngH19hV7ClpFAeFDI2ko/HNcFbiNwaXTMVLB3hWi1sJtn+fzZck5HfzN4qsajAVqZq4nwX69SSt25A== + +"@netlify/esbuild-sunos-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz#97c3152aa7ceaf51247998c836f94773975e716e" + integrity sha512-HLfXG6i2p3wyyyWHeeP4ShGDJ1zRMnf9YLJLe2ezv2KqvcKw/Un/m/FBuDW1p13oSUO7ShISMzgc1dw1GGBEOQ== + +"@netlify/esbuild-windows-32@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz#ccb2a234954714662a4cd1a573d5b271f5288273" + integrity sha512-ZpSQcKbVSCU3ln7mHpsL/5dWsUqCNdTnC5YAArnaOwdrlIunrsbo5j4MOZRRcGExb2uvTc/rb+D3mlGb8j1rkA== + +"@netlify/esbuild-windows-64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz#477c22c04a3299599924e9e4c909c0dec5612f56" + integrity sha512-I3gCdO8+6IDhT4Y1ZmV4o2Gg0oELv7N4kCcE4kqclz10fWHNjf19HQNHyBJe0AWnFV5ZfT154VVD31dqgwpgFw== + +"@netlify/esbuild-windows-arm64@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz#10446d91ca603fa28067541cfa1526081c6ee09b" + integrity sha512-WX52W8U1lsfWcz6NWoSpDs57lgiiMHN23seq8G2bvxzGS/tvYD3dxVLLW5UPoKSnFDyVQT7b6Zkt6AkBten1yQ== + +"@netlify/esbuild@0.14.39": + version "0.14.39" + resolved "https://registry.yarnpkg.com/@netlify/esbuild/-/esbuild-0.14.39.tgz#66897af6d26336e5960b5ba74f1642f1d02a9c6a" + integrity sha512-C3xpwdT2xw6SnSb+hLQoxjtikAKiz6BjQjzlIaysHDpGbmIcmUHZ/X+dyLtCqAvf15WNK5GSBZYOlpgcOE0WZA== + optionalDependencies: + "@netlify/esbuild-android-64" "0.14.39" + "@netlify/esbuild-android-arm64" "0.14.39" + "@netlify/esbuild-darwin-64" "0.14.39" + "@netlify/esbuild-darwin-arm64" "0.14.39" + "@netlify/esbuild-freebsd-64" "0.14.39" + "@netlify/esbuild-freebsd-arm64" "0.14.39" + "@netlify/esbuild-linux-32" "0.14.39" + "@netlify/esbuild-linux-64" "0.14.39" + "@netlify/esbuild-linux-arm" "0.14.39" + "@netlify/esbuild-linux-arm64" "0.14.39" + "@netlify/esbuild-linux-mips64le" "0.14.39" + "@netlify/esbuild-linux-ppc64le" "0.14.39" + "@netlify/esbuild-linux-riscv64" "0.14.39" + "@netlify/esbuild-linux-s390x" "0.14.39" + "@netlify/esbuild-netbsd-64" "0.14.39" + "@netlify/esbuild-openbsd-64" "0.14.39" + "@netlify/esbuild-sunos-64" "0.14.39" + "@netlify/esbuild-windows-32" "0.14.39" + "@netlify/esbuild-windows-64" "0.14.39" + "@netlify/esbuild-windows-arm64" "0.14.39" + +"@netlify/functions@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-1.6.0.tgz#c373423e6fef0e6f7422ac0345e8bbf2cb692366" + integrity sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ== + dependencies: + is-promise "^4.0.0" + +"@netlify/functions@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-2.4.1.tgz#93bc87313474285993b4de7cde6335ada0665870" + integrity sha512-sRFYBaz6dJP1MdUtk/5QNmshhg5UDmB+DUssmH6v9WUG85MrwyExEfGfJA5eClXATjXm0coTvO5nLAlyCpK7QQ== + dependencies: + "@netlify/serverless-functions-api" "1.12.3" + is-promise "^4.0.0" + +"@netlify/ipx@^1.4.6": + version "1.4.6" + resolved "https://registry.yarnpkg.com/@netlify/ipx/-/ipx-1.4.6.tgz#0bd308d70a1d2e1928e66cb49e36294f66f7b8b2" + integrity sha512-rnKR2LXhtnflitPX9CQIv+XSrNlYIqGsV54xrXifhbtHHjCjCw/lixsi8qwAXqEIgZBC9b4Y7prhHqRtC4oIjw== + dependencies: + "@netlify/functions" "^2.4.0" + etag "^1.8.1" + fs-extra "^11.0.0" + ipx "^1.3.1" + micromatch "^4.0.5" + mkdirp "^3.0.0" + murmurhash "^2.0.0" + node-fetch "^2.0.0" + ufo "^1.0.0" + unstorage "1.9.0" + +"@netlify/node-cookies@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@netlify/node-cookies/-/node-cookies-0.1.0.tgz#dda912ba618527695cf519fafa221c5e6777c612" + integrity sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g== + +"@netlify/plugin-nextjs@^4.41.3": + version "4.41.3" + resolved "https://registry.yarnpkg.com/@netlify/plugin-nextjs/-/plugin-nextjs-4.41.3.tgz#f8274526147f652438cc6790b6819ca15d441dd3" + integrity sha512-l8TB61u7A1ZF22QpoyZtresSUsHOJGP9DatECnqlNab3lG8id1kz9Pso+nZVOznWOm98o7w51k2+TIf52x+DBQ== + dependencies: + "@netlify/blobs" "^2.2.0" + "@netlify/esbuild" "0.14.39" + "@netlify/functions" "^1.6.0" + "@netlify/ipx" "^1.4.6" + "@vercel/node-bridge" "^2.1.0" + chalk "^4.1.2" + chokidar "^3.5.3" + destr "^1.1.1" + execa "^5.1.1" + follow-redirects "^1.15.2" + fs-extra "^10.0.0" + globby "^11.0.4" + merge-stream "^2.0.0" + moize "^6.1.0" + node-fetch "^2.6.6" + node-stream-zip "^1.15.0" + outdent "^0.8.0" + p-limit "^3.1.0" + pathe "^0.3.0" + pretty-bytes "^5.6.0" + regexp-tree "^0.1.24" + semver "^7.3.5" + slash "^3.0.0" + tiny-glob "^0.2.9" + +"@netlify/serverless-functions-api@1.12.3": + version "1.12.3" + resolved "https://registry.yarnpkg.com/@netlify/serverless-functions-api/-/serverless-functions-api-1.12.3.tgz#cf1abc7ca2c9d3f920fea458c44bdda4d3e614e4" + integrity sha512-g1AZ78pCvMnalZtbnViVLGfG5ufjKyKoi3plLSUtZqh0wVuMR7ZGegeZHhOoY4wRfkkETVvWfhgfcpLMbGM5Lg== + dependencies: + "@netlify/node-cookies" "^0.1.0" + urlpattern-polyfill "8.0.2" + "@next/env@13.0.5": version "13.0.5" resolved "https://registry.npmjs.org/@next/env/-/env-13.0.5.tgz" @@ -1954,6 +2169,98 @@ "@medv/finder" "^3.0.0" error-stack-parser "^2.0.6" +"@parcel/watcher-android-arm64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz#d82e74bb564ebd4d8a88791d273a3d2bd61e27ab" + integrity sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA== + +"@parcel/watcher-darwin-arm64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz#c9cd03f8f233d512fcfc873d5b4e23f1569a82ad" + integrity sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw== + +"@parcel/watcher-darwin-x64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz#83c902994a2a49b9e1ab5050dba24876fdc2c219" + integrity sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow== + +"@parcel/watcher-freebsd-x64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz#7a0f4593a887e2752b706aff2dae509aef430cf6" + integrity sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw== + +"@parcel/watcher-linux-arm-glibc@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz#3fc90c3ebe67de3648ed2f138068722f9b1d47da" + integrity sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ== + +"@parcel/watcher-linux-arm64-glibc@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz#f7bbbf2497d85fd11e4c9e9c26ace8f10ea9bcbc" + integrity sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA== + +"@parcel/watcher-linux-arm64-musl@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz#de131a9fcbe1fa0854e9cbf4c55bed3b35bcff43" + integrity sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw== + +"@parcel/watcher-linux-x64-glibc@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz#193dd1c798003cdb5a1e59470ff26300f418a943" + integrity sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow== + +"@parcel/watcher-linux-x64-musl@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz#6dbdb86d96e955ab0fe4a4b60734ec0025a689dd" + integrity sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g== + +"@parcel/watcher-wasm@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.3.0.tgz#73b66c6fbd2a3326ae86a1ec77eab7139d0dd725" + integrity sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA== + dependencies: + is-glob "^4.0.3" + micromatch "^4.0.5" + napi-wasm "^1.1.0" + +"@parcel/watcher-win32-arm64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz#59da26a431da946e6c74fa6b0f30b120ea6650b6" + integrity sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw== + +"@parcel/watcher-win32-ia32@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz#3ee6a18b08929cd3b788e8cc9547fd9a540c013a" + integrity sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow== + +"@parcel/watcher-win32-x64@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz#14e7246289861acc589fd608de39fe5d8b4bb0a7" + integrity sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA== + +"@parcel/watcher@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.3.0.tgz#803517abbc3981a1a1221791d9f59dc0590d50f9" + integrity sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.3.0" + "@parcel/watcher-darwin-arm64" "2.3.0" + "@parcel/watcher-darwin-x64" "2.3.0" + "@parcel/watcher-freebsd-x64" "2.3.0" + "@parcel/watcher-linux-arm-glibc" "2.3.0" + "@parcel/watcher-linux-arm64-glibc" "2.3.0" + "@parcel/watcher-linux-arm64-musl" "2.3.0" + "@parcel/watcher-linux-x64-glibc" "2.3.0" + "@parcel/watcher-linux-x64-musl" "2.3.0" + "@parcel/watcher-win32-arm64" "2.3.0" + "@parcel/watcher-win32-ia32" "2.3.0" + "@parcel/watcher-win32-x64" "2.3.0" + "@pkgr/utils@^2.3.1": version "2.3.1" resolved "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz" @@ -2749,6 +3056,11 @@ "@typescript-eslint/types" "5.45.1" eslint-visitor-keys "^3.3.0" +"@vercel/node-bridge@^2.1.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@vercel/node-bridge/-/node-bridge-2.2.2.tgz#f63466ab6a2588afdc6262c2d060289bfe8baa6b" + integrity sha512-haGBC8noyA5BfjCRXRH+VIkHCDVW5iD5UX24P2nOdilwUxI4qWsattS/co8QBGq64XsNLRAMdM5pQUE3zxkF9Q== + "@vtex/brand-ui@^0.46.1": version "0.46.1" resolved "https://registry.npmjs.org/@vtex/brand-ui/-/brand-ui-0.46.1.tgz" @@ -2779,9 +3091,9 @@ resolved "https://registry.npmjs.org/@vtex/tsconfig/-/tsconfig-0.6.0.tgz" integrity sha512-SVQBxaSdEVdpJFja1aVTIiZBgpQKePyYOUWGzcYq6LYkSWqSbz2LoC7TuLUsmfweYmVkv8+4eVuxcDpQVEpq1A== -"@vtexdocs/components@https://github.com/vtexdocs/components.git#v1.2.0": - version "1.2.0" - resolved "https://github.com/vtexdocs/components.git#6d0937897665f590eb696a13f9d2c64029f73773" +"@vtexdocs/components@https://github.com/vtexdocs/components.git#v1.4.0": + version "1.4.0" + resolved "https://github.com/vtexdocs/components.git#8e2715b6df1538279cb23302a05f9d7f8719d40b" dependencies: "@code-hike/mdx" "^0.9.0" "@vtex/brand-ui" "^0.46.1" @@ -2982,6 +3294,11 @@ acorn@^8.0.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.7.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz" integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== +acorn@^8.10.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + acorn@^8.8.2: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" @@ -3130,6 +3447,14 @@ ansi-styles@^6.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== +anymatch@^3.1.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + arch@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" @@ -3393,6 +3718,11 @@ axobject-query@^3.2.1: dependencies: dequal "^2.0.3" +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + babel-plugin-emotion@^10.0.27: version "10.2.2" resolved "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz" @@ -3500,6 +3830,11 @@ bignumber.js@^9.0.0: resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bl@^4.0.3: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" @@ -3542,7 +3877,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3723,6 +4058,21 @@ check-more-types@^2.24.0: resolved "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" @@ -3738,6 +4088,13 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== +citty@^0.1.4, citty@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" + integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== + dependencies: + consola "^3.2.3" + classnames@^2.2.5, classnames@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz" @@ -3843,6 +4200,11 @@ clsx@^1.1.1: resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +cluster-key-slot@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + code-error-fragment@0.0.230: version "0.0.230" resolved "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz" @@ -3915,7 +4277,7 @@ commander@7: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^2.20.0: +commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4007,6 +4369,11 @@ confusing-browser-globals@^1.0.10: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12: version "5.0.13" resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" @@ -4208,6 +4575,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +cookie-es@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.0.0.tgz#4759684af168dfc54365b2c2dda0a8d7ee1e4865" + integrity sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== + cookie@~0.4.1: version "0.4.2" resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" @@ -4310,6 +4682,11 @@ css-selector-parser@^1.4.1: resolved "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz" integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + cssom@^0.4.4: version "0.4.4" resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" @@ -4886,6 +5263,11 @@ define-properties@^1.2.0, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +defu@^6.1.2, defu@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.3.tgz#6d7f56bc61668e844f9f593ace66fd67ef1205fd" + integrity sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ== + delaunator@5: version "5.0.0" resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" @@ -4898,6 +5280,11 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" @@ -4913,6 +5300,16 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +destr@^1.1.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/destr/-/destr-1.2.2.tgz#7ba9befcafb645a50e76b260449c63927b51e22f" + integrity sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA== + +destr@^2.0.1, destr@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.2.tgz#8d3c0ee4ec0a76df54bc8b819bca215592a8c218" + integrity sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" @@ -4923,11 +5320,21 @@ detect-indent@6.0.0, detect-indent@^6.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz" integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-libc@^2.0.0, detect-libc@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== +detect-libc@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" @@ -5808,6 +6215,11 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + event-emitter@^0.3.5: version "0.3.5" resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" @@ -5927,6 +6339,16 @@ fast-diff@^1.1.2: resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-equals@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f" + integrity sha512-NCe8qxnZFARSHGztGMZOO/PC1qa5MIFB5Hp66WdzbCRAz8U8US3bx1UTgLS49efBQPcUtO9gf5oVEY8o7y/7Kg== + +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + fast-glob@^3.2.11: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" @@ -6119,6 +6541,11 @@ follow-redirects@^1.0.0: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.2: + version "1.15.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -6209,6 +6636,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.0.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" @@ -6224,6 +6660,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -6330,6 +6771,11 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" +get-port-please@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.1.tgz#2556623cddb4801d823c0a6a15eec038abb483be" + integrity sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA== + get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -6408,7 +6854,7 @@ github-from-package@0.0.0: resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6605,6 +7051,20 @@ gtoken@^6.1.0: google-p12-pem "^4.0.0" jws "^4.0.0" +h3@^1.7.1, h3@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.10.0.tgz#55ac36deb6e250ada5ff1940b6324bc6acc4085f" + integrity sha512-Tw1kcIC+AeimwRmviiObaD5EB430Yt+lTgOxLJxNr96Vd/fGRu04EF7aKfOAcpwKCI+U2JlbxOLhycD86p3Ciw== + dependencies: + cookie-es "^1.0.0" + defu "^6.1.3" + destr "^2.0.2" + iron-webcrypto "^1.0.0" + radix3 "^1.1.0" + ufo "^1.3.2" + uncrypto "^0.1.3" + unenv "^1.8.0" + handlebars@^4.7.7: version "4.7.7" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" @@ -6817,6 +7277,11 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-shutdown@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" + integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" @@ -6893,6 +7358,11 @@ ignore@^5.1.8, ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +image-meta@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/image-meta/-/image-meta-0.1.1.tgz#a84dc7d5f61c7d60e85ec0c3ac81beee8646039b" + integrity sha512-+oXiHwOEPr1IE5zY0tcBLED/CYcre15J4nwL50x3o0jxWqEkyjrusiKP3YSU+tr9fvJp33ZcP5Gpj2295g3aEw== + image-size@1.0.2, image-size@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" @@ -7003,6 +7473,44 @@ intl-messageformat@10.5.8: "@formatjs/icu-messageformat-parser" "2.7.3" tslib "^2.4.0" +ioredis@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" + integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== + dependencies: + "@ioredis/commands" "^1.1.1" + cluster-key-slot "^1.1.0" + debug "^4.3.4" + denque "^2.1.0" + lodash.defaults "^4.2.0" + lodash.isarguments "^3.1.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^2.1.0" + +ipx@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/ipx/-/ipx-1.3.1.tgz#2ff4aa9bc5be74f63cccd80d1df430fcc5e715b6" + integrity sha512-hWRLXdMDOz2q81T2x9lowFtAGO3E5b2HtC8xOOBTrlnxygHNaVrZqJ5c1P3T7tDkC3oCocYRRz0VBffvJKeQlw== + dependencies: + "@fastify/accept-negotiator" "^1.1.0" + consola "^3.2.3" + defu "^6.1.2" + destr "^2.0.1" + etag "^1.8.1" + image-meta "^0.1.1" + listhen "^1.5.5" + node-fetch-native "^1.4.0" + pathe "^1.1.1" + sharp "^0.32.6" + ufo "^1.3.1" + xss "^1.0.14" + +iron-webcrypto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz#e3b689c0c61b434a0a4cb82d0aeabbc8b672a867" + integrity sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg== + is-alphabetical@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" @@ -7049,6 +7557,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" @@ -7151,7 +7666,7 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -7235,6 +7750,11 @@ is-promise@^2.2.2: resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + is-reference@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz" @@ -7392,6 +7912,11 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +jiti@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + js-cookie@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -7555,7 +8080,7 @@ json5@^2.1.2, json5@^2.2.1: resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== -jsonc-parser@3.2.0: +jsonc-parser@3.2.0, jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== @@ -7782,6 +8307,29 @@ lint-staged@^12.3.5: supports-color "^9.2.1" yaml "^1.10.2" +listhen@^1.2.2, listhen@^1.5.5: + version "1.5.5" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.5.5.tgz#58915512af70f770aa3e9fb19367adf479bb58c4" + integrity sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA== + dependencies: + "@parcel/watcher" "^2.3.0" + "@parcel/watcher-wasm" "2.3.0" + citty "^0.1.4" + clipboardy "^3.0.0" + consola "^3.2.3" + defu "^6.1.2" + get-port-please "^3.1.1" + h3 "^1.8.1" + http-shutdown "^1.2.2" + jiti "^1.20.0" + mlly "^1.4.2" + node-forge "^1.3.1" + pathe "^1.1.1" + std-env "^3.4.3" + ufo "^1.3.0" + untun "^0.1.2" + uqr "^0.1.2" + listr2@^3.8.3: version "3.14.0" resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz" @@ -7903,11 +8451,21 @@ lodash.debounce@^4.0.8: resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== + lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" @@ -8007,6 +8565,11 @@ lowlight@^2.0.0: fault "^2.0.0" highlight.js "~11.6.0" +lru-cache@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -8333,6 +8896,11 @@ mermaid@^10.1.0: uuid "^9.0.0" web-worker "^1.2.0" +micro-memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/micro-memoize/-/micro-memoize-4.1.2.tgz#ce719c1ba1e41592f1cd91c64c5f41dcbf135f36" + integrity sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g== + micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: version "1.0.6" resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz" @@ -8706,6 +9274,14 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" @@ -8718,6 +9294,11 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: dependencies: mime-db "1.52.0" +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" @@ -8774,12 +9355,35 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mlly@^1.2.0, mlly@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.2.tgz#7cf406aa319ff6563d25da6b36610a93f2a8007e" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + dependencies: + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" + modify-values@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -mri@^1.1.0: +moize@^6.1.0: + version "6.1.6" + resolved "https://registry.yarnpkg.com/moize/-/moize-6.1.6.tgz#ac2e723e74b951875fe2c0c3433405c2b098c3e6" + integrity sha512-vSKdIUO61iCmTqhdoIDrqyrtp87nWZUmBPniNjO0fX49wEYmyDO4lvlnFXiGcaH1JLE/s/9HbiK4LSHsbiUY6Q== + dependencies: + fast-equals "^3.0.1" + micro-memoize "^4.1.2" + +mri@^1.1.0, mri@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== @@ -8794,6 +9398,11 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +murmurhash@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/murmurhash/-/murmurhash-2.0.1.tgz#4097720e08cf978872194ad84ea5be2dec9b610f" + integrity sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew== + mustache@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" @@ -8814,6 +9423,11 @@ napi-build-utils@^1.0.1: resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +napi-wasm@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/napi-wasm/-/napi-wasm-1.1.0.tgz#bbe617823765ae9c1bc12ff5942370eae7b2ba4e" + integrity sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -8908,6 +9522,16 @@ node-addon-api@^5.0.0: resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz" integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.0.0.tgz#8136add2f510997b3b94814f4af1cce0b0e3962e" + integrity sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA== + node-cache@5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz" @@ -8927,6 +9551,11 @@ node-fetch-h2@^2.3.0: dependencies: http2-client "^1.2.5" +node-fetch-native@^1.2.0, node-fetch-native@^1.4.0, node-fetch-native@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.1.tgz#f95c74917d3cebc794cdae0cd2a9c7594aad0cb4" + integrity sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw== + node-fetch@2.6.7, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" @@ -8934,7 +9563,7 @@ node-fetch@2.6.7, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.0.0, node-fetch@^2.6.9: +node-fetch@^2.0.0, node-fetch@^2.6.6, node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -8974,6 +9603,11 @@ node-releases@^2.0.6: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-stream-zip@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" + integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== + non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" @@ -8999,7 +9633,7 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -9229,6 +9863,15 @@ octokit@^2.0.7: "@octokit/plugin-throttling" "^4.0.1" "@octokit/types" "^8.0.0" +ofetch@^1.1.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.3.3.tgz#588cb806a28e5c66c2c47dd8994f9059a036d8c0" + integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== + dependencies: + destr "^2.0.1" + node-fetch-native "^1.4.0" + ufo "^1.3.0" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -9298,6 +9941,11 @@ ospath@^1.2.2: resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= +outdent@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.8.0.tgz#2ebc3e77bf49912543f1008100ff8e7f44428eb0" + integrity sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" @@ -9312,7 +9960,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -9467,6 +10115,16 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^0.3.0: + version "0.3.9" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.3.9.tgz#4baff768f37f03e3d9341502865fb93116f65191" + integrity sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g== + +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + pend@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" @@ -9490,7 +10148,7 @@ picocolors@^1.0.0: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -9522,6 +10180,15 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" @@ -9699,6 +10366,11 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + queue@6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" @@ -9711,6 +10383,11 @@ quick-lru@^4.0.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +radix3@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.0.tgz#9745df67a49c522e94a33d0a93cf743f104b6e0d" + integrity sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -9959,6 +10636,18 @@ readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + reakit-system@^0.14.3: version "0.14.5" resolved "https://registry.npmjs.org/reakit-system/-/reakit-system-0.14.5.tgz" @@ -9997,6 +10686,18 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== + +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== + dependencies: + redis-errors "^1.0.0" + reflect.getprototypeof@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" @@ -10043,6 +10744,11 @@ regenerator-transform@^0.15.0: dependencies: "@babel/runtime" "^7.8.4" +regexp-tree@^0.1.24: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" @@ -10429,6 +11135,13 @@ semver@^7.3.7, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -10476,6 +11189,20 @@ sharp@^0.31.2: tar-fs "^2.1.1" tunnel-agent "^0.6.0" +sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.4" + simple-get "^4.0.1" + tar-fs "^3.0.4" + tunnel-agent "^0.6.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -10701,6 +11428,11 @@ stackframe@^1.3.4: resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== +standard-as-callback@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== + standard-version@^9.3.2: version "9.3.2" resolved "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz" @@ -10749,6 +11481,11 @@ static-eval@2.0.2: dependencies: escodegen "^1.8.1" +std-env@^3.4.3: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + stream-parser@~0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz" @@ -10756,6 +11493,14 @@ stream-parser@~0.3.1: dependencies: debug "2" +streamx@^2.15.0: + version "2.15.6" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887" + integrity sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + string-argv@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" @@ -11118,6 +11863,15 @@ tar-fs@^2.0.0, tar-fs@^2.1.1: pump "^3.0.0" tar-stream "^2.1.4" +tar-fs@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + tar-stream@^2.1.4: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" @@ -11129,6 +11883,15 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + terser-webpack-plugin@^5.1.3: version "5.3.6" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz" @@ -11480,6 +12243,11 @@ typescript@^4.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +ufo@^1.0.0, ufo@^1.2.0, ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.3.2.tgz#c7d719d0628a1c80c006d2240e0d169f6e3c0496" + integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + uglify-js@^3.1.4: version "3.15.3" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz" @@ -11505,11 +12273,27 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + underscore@1.12.1: version "1.12.1" resolved "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== +unenv@^1.8.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.9.0.tgz#469502ae85be1bd3a6aa60f810972b1a904ca312" + integrity sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== + dependencies: + consola "^3.2.3" + defu "^6.1.3" + mime "^3.0.0" + node-fetch-native "^1.6.1" + pathe "^1.1.1" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" @@ -11670,11 +12454,37 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unstorage@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.9.0.tgz#0c1977f4e769a48344339ac97ec3f2feea94d43d" + integrity sha512-VpD8ZEYc/le8DZCrny3bnqKE4ZjioQxBRnWE+j5sGNvziPjeDlaS1NaFFHzl/kkXaO3r7UaF8MGQrs14+1B4pQ== + dependencies: + anymatch "^3.1.3" + chokidar "^3.5.3" + destr "^2.0.1" + h3 "^1.7.1" + ioredis "^5.3.2" + listhen "^1.2.2" + lru-cache "^10.0.0" + mri "^1.2.0" + node-fetch-native "^1.2.0" + ofetch "^1.1.1" + ufo "^1.2.0" + untildify@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +untun@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" + integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + pathe "^1.1.1" + update-browserslist-db@^1.0.9: version "1.0.10" resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" @@ -11683,6 +12493,11 @@ update-browserslist-db@^1.0.9: escalade "^3.1.1" picocolors "^1.0.0" +uqr@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" + integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -11711,6 +12526,11 @@ url@~0.11.0: punycode "1.3.2" querystring "0.2.0" +urlpattern-polyfill@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" + integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== + use-yarn@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/use-yarn/-/use-yarn-2.4.0.tgz" @@ -12063,6 +12883,14 @@ xmlchars@^2.2.0: resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xss@^1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" + integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + xtend@~4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"