diff --git a/www/docs/docusaurus.config.js b/www/docs/docusaurus.config.js index 724b733417..55db151320 100644 --- a/www/docs/docusaurus.config.js +++ b/www/docs/docusaurus.config.js @@ -1,3 +1,4 @@ +require('dotenv').config(); const path = require("path") const fs = require("fs") const docsPath = path.join(__dirname, "../../docs/content") @@ -16,18 +17,11 @@ const config = { url: "https://docs.medusajs.com", baseUrl: "/", onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", + onBrokenMarkdownLinks: "throw", favicon: "img/favicon.ico", organizationName: "medusajs", projectName: "medusajs/www", plugins: [ - [ - "docusaurus2-dotenv", - { - path: "./.env", // The path to your environment variables. - systemvars: true, // Set to true if you would rather load all system variables as well (useful for CI purposes) - }, - ], [ "docusaurus-plugin-segment", { diff --git a/www/docs/package.json b/www/docs/package.json index 70ecb285ca..2a2bdba430 100644 --- a/www/docs/package.json +++ b/www/docs/package.json @@ -21,11 +21,11 @@ "@docusaurus/preset-classic": "latest", "@docusaurus/remark-plugin-npm2yarn": "latest", "@svgr/webpack": "6.2.1", - "algoliasearch-helper": "^3.8.2", + "algoliasearch-helper": "^3.11.3", "clsx": "^1.1.1", "docusaurus-plugin-image-zoom": "^0.1.1", "docusaurus-plugin-segment": "^1.0.3", - "docusaurus2-dotenv": "^1.4.0", + "dotenv": "^16.0.3", "file-loader": "^6.2.0", "lodash": "^4.17.21", "prism-react-renderer": "^1.3.1", diff --git a/www/docs/src/theme/Tabs/index.js b/www/docs/src/theme/Tabs/index.js index 4c3edb4df0..7ec11e0944 100644 --- a/www/docs/src/theme/Tabs/index.js +++ b/www/docs/src/theme/Tabs/index.js @@ -1,105 +1,33 @@ -import React, {cloneElement, isValidElement, useEffect, useState} from 'react'; +import React, {cloneElement, useEffect} from 'react'; +import clsx from 'clsx'; import { useScrollPositionBlocker, - useTabGroupChoice, + useTabs, } from '@docusaurus/theme-common/internal'; - -import clsx from 'clsx'; -import {duplicates} from '@docusaurus/theme-common'; -import styles from './styles.module.css'; import useIsBrowser from '@docusaurus/useIsBrowser'; +import styles from './styles.module.css'; -// A very rough duck type, but good enough to guard against mistakes while -// allowing customization -function isTabItem(comp) { - return 'value' in comp.props; -} -function TabsComponent(props) { - const { - lazy, - block, - defaultValue: defaultValueProp, - values: valuesProp, - groupId, - className, - isCodeTabs = false, - codeTitle - } = props; - const children = React.Children.map(props.children, (child) => { - if (isValidElement(child) && isTabItem(child)) { - return child; - } - // child.type.name will give non-sensical values in prod because of - // minification, but we assume it won't throw in prod. - throw new Error( - `Docusaurus error: Bad child <${ - // @ts-expect-error: guarding against unexpected cases - typeof child.type === 'string' ? child.type : child.type.name - }>: all children of the component should be , and every should have a unique "value" prop.`, - ); - }); - const values = - valuesProp ?? - // Only pick keys that we recognize. MDX would inject some keys by default - children.map(({props: {value, label, attributes}}) => ({ - value, - label, - attributes, - })); - const dup = duplicates(values, (a, b) => a.value === b.value); - if (dup.length > 0) { - throw new Error( - `Docusaurus error: Duplicate values "${dup - .map((a) => a.value) - .join(', ')}" found in . Every value needs to be unique.`, - ); - } - // When defaultValueProp is null, don't show a default tab - const defaultValue = - defaultValueProp === null - ? defaultValueProp - : defaultValueProp ?? - children.find((child) => child.props.default)?.props.value ?? - children[0].props.value; - if (defaultValue !== null && !values.some((a) => a.value === defaultValue)) { - throw new Error( - `Docusaurus error: The has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${values - .map((a) => a.value) - .join( - ', ', - )}. If you intend to show no default tab, use defaultValue={null} instead.`, - ); - } - const {tabGroupChoices, setTabGroupChoices} = useTabGroupChoice(); - const [selectedValue, setSelectedValue] = useState(defaultValue); +//ADDED: isCodeTabs and codeTitle props +function TabList({className, block, selectedValue, selectValue, tabValues, isCodeTabs = false, codeTitle}) { const tabRefs = []; const {blockElementScrollPositionUntilNextRender} = useScrollPositionBlocker(); - if (groupId != null) { - const relevantTabGroupChoice = tabGroupChoices[groupId]; - if ( - relevantTabGroupChoice != null && - relevantTabGroupChoice !== selectedValue && - values.some((value) => value.value === relevantTabGroupChoice) - ) { - setSelectedValue(relevantTabGroupChoice); - } - } const handleTabChange = (event) => { const newTab = event.currentTarget; const newTabIndex = tabRefs.indexOf(newTab); - const newTabValue = values[newTabIndex].value; + const newTabValue = tabValues[newTabIndex].value; if (newTabValue !== selectedValue) { blockElementScrollPositionUntilNextRender(newTab); - setSelectedValue(newTabValue); - if (groupId != null) { - setTabGroupChoices(groupId, String(newTabValue)); - } + selectValue(newTabValue); } }; const handleKeydown = (event) => { let focusElement = null; switch (event.key) { + case 'Enter': { + handleTabChange(event); + break; + } case 'ArrowRight': { const nextTab = tabRefs.indexOf(event.currentTarget) + 1; focusElement = tabRefs[nextTab] ?? tabRefs[0]; @@ -115,65 +43,77 @@ function TabsComponent(props) { } focusElement?.focus(); }; - return ( -
-
- {isCodeTabs && {codeTitle}} -
    - {values.map(({value, label, attributes}) => ( -
  • tabRefs.push(tabControl)} - onKeyDown={handleKeydown} - onFocus={handleTabChange} - onClick={handleTabChange} - {...attributes} - className={clsx( - 'tabs__item', - styles.tabItem, - attributes?.className, - { - 'tabs__item--active': selectedValue === value, - }, - )}> - {label ?? value} -
  • - ))} -
-
- {lazy ? ( - cloneElement( - children.filter( - (tabItem) => tabItem.props.value === selectedValue, - )[0], - ) - ) : ( -
- {children.map((tabItem, i) => - cloneElement(tabItem, { - key: i, - hidden: tabItem.props.value !== selectedValue, - }), - )} -
+ //ADDED: div wrapper to ul + //ADDED: span with code-title class + return ( +
+ {isCodeTabs && {codeTitle}} +
    + {tabValues.map(({value, label, attributes}) => ( +
  • tabRefs.push(tabControl)} + onKeyDown={handleKeydown} + onClick={handleTabChange} + {...attributes} + className={clsx('tabs__item', styles.tabItem, attributes?.className, { + 'tabs__item--active': selectedValue === value, + })}> + {label ?? value} +
  • + ))} +
+
+ ); +} + +//CHANGED: Removed margin-top--md class +function TabContent({lazy, children, selectedValue}) { + if (lazy) { + const selectedTabItem = children.find( + (tabItem) => tabItem.props.value === selectedValue, + ); + if (!selectedTabItem) { + // fail-safe or fail-fast? not sure what's best here + return null; + } + return cloneElement(selectedTabItem); + } + return ( +
+ {children.map((tabItem, i) => + cloneElement(tabItem, { + key: i, + hidden: tabItem.props.value !== selectedValue, + }), )}
); } +function TabsComponent(props) { + const tabs = useTabs(props); + return ( +
+ + +
+ ); +} export default function Tabs(props) { const isBrowser = useIsBrowser(); @@ -182,8 +122,9 @@ export default function Tabs(props) { //set the default window.localStorage.setItem('docusaurus.tab.npm2yarn', 'yarn') } - }, []) + }, []); + // ADDED: wrapper div + isCodeTabs prop return (
= 3.1 < 6" + checksum: 544b6b73eaa4788d9082b2760b15c1e5ad59f1174eecf1535ea074bf3c4b019f5234c37cd1659ee6704fac46d681ebf9754259d66a40944fa5a33ee2db0a8182 + languageName: node + linkType: hard + "algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.13.1": version: 4.14.2 resolution: "algoliasearch@npm:4.14.2" @@ -5532,11 +5561,11 @@ __metadata: "@docusaurus/preset-classic": latest "@docusaurus/remark-plugin-npm2yarn": latest "@svgr/webpack": 6.2.1 - algoliasearch-helper: ^3.8.2 + algoliasearch-helper: ^3.11.3 clsx: ^1.1.1 docusaurus-plugin-image-zoom: ^0.1.1 docusaurus-plugin-segment: ^1.0.3 - docusaurus2-dotenv: ^1.4.0 + dotenv: ^16.0.3 file-loader: ^6.2.0 lodash: ^4.17.21 prettier: ^2.3.2 @@ -5598,15 +5627,6 @@ __metadata: languageName: node linkType: hard -"docusaurus2-dotenv@npm:^1.4.0": - version: 1.4.0 - resolution: "docusaurus2-dotenv@npm:1.4.0" - dependencies: - dotenv-webpack: 1.7.0 - checksum: 694b88296685673f85b3a6864c3ce9dd19041bdfcfd2cc48d1099ca3fd3303160ae31d0bcedc41f67cb2f2eaa9837845236ed7922d7cc6a9b857bf3fd71d21ef - languageName: node - linkType: hard - "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -5721,30 +5741,10 @@ __metadata: languageName: node linkType: hard -"dotenv-defaults@npm:^1.0.2": - version: 1.1.1 - resolution: "dotenv-defaults@npm:1.1.1" - dependencies: - dotenv: ^6.2.0 - checksum: c1304b7c83cbc310b0fa2a9256cf60caa0221d8b240b9e520f59bcdf3dfcfcf6a6d322250e787b6b770e21a17e7fdf56b6371e0b9a515d58d1159e7042a7caef - languageName: node - linkType: hard - -"dotenv-webpack@npm:1.7.0": - version: 1.7.0 - resolution: "dotenv-webpack@npm:1.7.0" - dependencies: - dotenv-defaults: ^1.0.2 - peerDependencies: - webpack: ^1 || ^2 || ^3 || ^4 - checksum: 65ec0ccf2f8ab8db43040d66765a264d8fea2c779402495f01870cf93b73a31d01d7cfc3632341706e8e3a300553c4f84251b0319df01adaba9d2539406c9a2e - languageName: node - linkType: hard - -"dotenv@npm:^6.2.0": - version: 6.2.0 - resolution: "dotenv@npm:6.2.0" - checksum: 56886938622c34255c89ec24d584460668a5ca035afe37da7b16bfbac36f8b352d20a6dde51000b30db04fa5cac7b03caf165919fe5e9bd8c91a2735fd61c649 +"dotenv@npm:^16.0.3": + version: 16.0.3 + resolution: "dotenv@npm:16.0.3" + checksum: 109457ac5f9e930ca8066ea33887b6f839ab24d647a7a8b49ddcd1f32662e2c35591c5e5b9819063e430148a664d0927f0cbe60cf9575d89bc524f47ff7e78f0 languageName: node linkType: hard @@ -11745,6 +11745,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: ac4814e5592524f242921157e791b022efe36e451fe0d4fd4d204322d5433a4fc300d63b0ade5185f8e0735ded044c70bcf6d2352db0f74d097a238cebd2da02 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2"