Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@
},
"devDependencies": {
"@octokit/rest": "^19.0.13",
"@patternfly/patternfly": "^6.5.0-prerelease.46",
"@patternfly/react-code-editor": "^6.5.0-prerelease.39",
"@patternfly/react-core": "^6.5.0-prerelease.36",
"@patternfly/react-table": "^6.5.0-prerelease.37",
"@patternfly/patternfly": "^6.5.0-prerelease.64",
"@patternfly/react-code-editor": "^6.5.0-prerelease.52",
"@patternfly/react-core": "^6.5.0-prerelease.49",
"@patternfly/react-table": "^6.5.0-prerelease.50",
"glob": "^8.1.0",
"lerna": "^9.0.5",
"monaco-editor": "0.54.0",
Expand Down Expand Up @@ -72,9 +72,9 @@
"ajv": ">=6.14.0",
"qs": ">=6.15.0",
"@isaacs/brace-expansion": ">=5.0.1",
"@patternfly/react-code-editor": "^6.5.0-prerelease.39",
"@patternfly/react-core": "^6.5.0-prerelease.36",
"@patternfly/react-table": "^6.5.0-prerelease.37",
"@patternfly/react-code-editor": "^6.5.0-prerelease.52",
"@patternfly/react-core": "^6.5.0-prerelease.49",
"@patternfly/react-table": "^6.5.0-prerelease.50",
"monaco-editor": "0.54.0"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,11 @@ export const SideNavLayout = ({ children, groupedRoutes, navOpen: navOpenProp })

const SideBar = (
<PageSidebar>
<PageSidebarBody>
<SideNav navItems={sideNavItems} groupedRoutes={groupedRoutes} />
</PageSidebarBody>
<div className="pf-v6-c-page__sidebar-main"> {/** TODO: fix with updated React components after https://redhat.atlassian.net/browse/PF-3728 merges */}
<PageSidebarBody>
<SideNav navItems={sideNavItems} groupedRoutes={groupedRoutes} />
</PageSidebarBody>
</div>
</PageSidebar>
);

Expand Down
10 changes: 5 additions & 5 deletions packages/documentation-framework/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,11 @@
"webpack-merge": "5.10.0"
},
"peerDependencies": {
"@patternfly/patternfly": "^6.5.0-prerelease.46",
"@patternfly/react-code-editor": "^6.5.0-prerelease.39",
"@patternfly/react-core": "^6.5.0-prerelease.36",
"@patternfly/react-icons": "^6.5.0-prerelease.15",
"@patternfly/react-table": "^6.5.0-prerelease.37",
"@patternfly/patternfly": "^6.5.0-prerelease.64",
"@patternfly/react-code-editor": "^6.5.0-prerelease.52",
"@patternfly/react-core": "^6.5.0-prerelease.49",
"@patternfly/react-icons": "^6.5.0-prerelease.20",
"@patternfly/react-table": "^6.5.0-prerelease.50",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const { parse } = require('@patternfly/ast-helpers');
const { capitalize } = require('../../helpers/capitalize');
const { slugger } = require('../../helpers/slugger');
const { liveCodeTypes } = require('../../helpers/liveCodeTypes');
const { stripReactTypeOnlyImports } = require('./stripReactTypeOnlyImports');

// Adapted from https://github.com/mdx-js/mdx/blob/next/packages/mdx/mdx-hast-to-jsx.js
function toJSX(node, parentNode = {}, options = {}) {
Expand Down Expand Up @@ -69,7 +70,9 @@ function serializeRoot(node, options) {

const importStatements = groups.import
.map(node => node.value)
.map(imp => imp.replace(/(['"])\./g, (_, match) => `${match}${getRelPath()}${path.posix.sep}\.`));
.map(imp => imp.replace(/(['"])\./g, (_, match) => `${match}${getRelPath()}${path.posix.sep}\.`))
.map(imp => stripReactTypeOnlyImports(imp))
.filter(Boolean);

// Build array of absolute import paths for relative imports
const relativeImportsRegex = /(import [^'"]*)['"](?:[\.\/]+(?:node_modules\/)?)(@?(?:(?!\.svg|\.jpe?g|\.png).)+)['"][;?]/gm;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
const { parse } = require('@patternfly/ast-helpers');

/**
* TypeScript-only names that @types/react declares but the `react` package does not
* export at runtime. Value-importing them breaks strict ESM linking (e.g. Rspack).
* @see https://github.com/facebook/react/issues/11503
*/
const REACT_TYPE_ONLY_EXPORTS = new Set([
'AnimationEvent',
'AriaAttributes',
'BaseSyntheticEvent',
'ChangeEvent',
'ClipboardEvent',
'ComponentClass',
'ComponentProps',
'ComponentPropsWithRef',
'ComponentPropsWithoutRef',
'ComponentType',
'CompositionEvent',
'CSSProperties',
'DetailedHTMLProps',
'Dispatch',
'DOMAttributes',
'DragEvent',
'ElementType',
'ExoticComponent',
'FC',
'FocusEvent',
'FormEvent',
'ForwardRefExoticComponent',
'FunctionComponent',
'HTMLAttributes',
'InvalidEvent',
'JSXElementConstructor',
'KeyboardEvent',
'Key',
'LazyExoticComponent',
'LegacyRef',
'MemoExoticComponent',
'MouseEvent',
'MutableRefObject',
'PointerEvent',
'PropsWithChildren',
'PropsWithoutRef',
'PropsWithRef',
'ReactChangeEvent',
'ReactChild',
'ReactElement',
'ReactFragment',
'ReactFormEvent',
'ReactKeyboardEvent',
'ReactMouseEvent',
'ReactNode',
'ReactPointerEvent',
'ReactPortal',
'ReactText',
'Ref',
'RefAttributes',
'RefCallback',
'RefObject',
'SetStateAction',
'StyleHTMLAttributes',
'SVGAttributes',
'SVGProps',
'SyntheticEvent',
'TouchEvent',
'TransitionEvent',
'UIEvent',
'VoidFunctionComponent',
'VFC',
'WheelEvent',
]);

function specifierImportedName(spec) {
if (spec.type !== 'ImportSpecifier') {
return null;
}
const id = spec.imported;
return id.type === 'Identifier' ? id.name : null;
}

function importDeclarationToSource(decl, specifiers) {
const srcLiteral = decl.source.raw || JSON.stringify(decl.source.value);
if (specifiers.length === 0) {
return '';
}

const def = specifiers.find((s) => s.type === 'ImportDefaultSpecifier');
const ns = specifiers.find((s) => s.type === 'ImportNamespaceSpecifier');
const named = specifiers.filter((s) => s.type === 'ImportSpecifier');

if (ns) {
return `import * as ${ns.local.name} from ${srcLiteral}`;
}

const formatNamed = () =>
named
.map((sp) => {
const imp = sp.imported.name;
const loc = sp.local.name;
return imp === loc ? loc : `${imp} as ${loc}`;
})
.join(', ');

if (def && named.length) {
return `import ${def.local.name}, { ${formatNamed()} } from ${srcLiteral}`;
}
if (def) {
return `import ${def.local.name} from ${srcLiteral}`;
}
return `import { ${formatNamed()} } from ${srcLiteral}`;
}

function filterReactSpecifiers(decl) {
if (decl.importKind === 'type') {
return [];
}
return decl.specifiers.filter((spec) => {
if (spec.type === 'ImportDefaultSpecifier' || spec.type === 'ImportNamespaceSpecifier') {
return true;
}
if (spec.type === 'ImportSpecifier' && spec.importKind === 'type') {
return false;
}
const name = specifierImportedName(spec);
if (!name) {
return true;
}
return !REACT_TYPE_ONLY_EXPORTS.has(name);
});
}

/**
* Removes TypeScript-only specifiers from `import … from 'react'` in MDX import blocks.
* MDX often provides many import lines in a single node; this handles multi-statement programs.
*/
function stripReactTypeOnlyImports(importSource) {
const trimmed = importSource.trim();
if (!trimmed || !trimmed.includes('react')) {
return importSource;
}

const toParse = trimmed.endsWith(';') ? trimmed : `${trimmed};`;
let ast;
try {
ast = parse(toParse);
} catch {
return importSource;
}

if (!ast.body.length) {
return importSource;
}

const pureImports = ast.body.every((stmt) => stmt.type === 'ImportDeclaration');
if (!pureImports) {
return stripSingleImportDeclaration(toParse, trimmed, importSource);
}

const parts = [];
for (const stmt of ast.body) {
if (stmt.type !== 'ImportDeclaration') {
continue;
}
const mod = stmt.source && stmt.source.value;
if (mod !== 'react') {
parts.push(toParse.slice(stmt.start, stmt.end));
continue;
}
const filtered = filterReactSpecifiers(stmt);
if (filtered.length === 0) {
continue;
}
if (filtered.length === stmt.specifiers.length) {
parts.push(toParse.slice(stmt.start, stmt.end));
continue;
}
const out = importDeclarationToSource(stmt, filtered);
if (out) {
parts.push(out.endsWith(';') ? out : `${out};`);
}
}

if (parts.length === 0) {
return '';
}

return parts.join('\n');
}

/** Previous behavior: one import statement per node. */
function stripSingleImportDeclaration(toParse, trimmed, importSource) {
if (toParse.length === 0) {
return importSource;
}
let ast;
try {
ast = parse(toParse);
} catch {
return importSource;
}
if (ast.body.length !== 1 || ast.body[0].type !== 'ImportDeclaration') {
return importSource;
}
const decl = ast.body[0];
if (decl.source.value !== 'react') {
return importSource;
}
if (decl.importKind === 'type') {
return '';
}
const filtered = filterReactSpecifiers(decl);
if (filtered.length === decl.specifiers.length) {
return importSource;
}
const out = importDeclarationToSource(decl, filtered);
if (!out) {
return '';
}
const hadSemicolon = /;\s*$/.test(trimmed);
return hadSemicolon ? `${out};` : out;
}

module.exports = {
stripReactTypeOnlyImports,
REACT_TYPE_ONLY_EXPORTS,
};
29 changes: 28 additions & 1 deletion packages/documentation-framework/versions.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,36 @@
{
"Releases": [
{
"name": "6.5.0-prerelease.49",
"date": "2026-04-06",
"latest": true,
"versions": {
"@patternfly/chatbot": "6.6.0-prerelease.6",
"@patternfly/patternfly": "6.5.0-prerelease.64",
"@patternfly/quickstarts": "6.5.0-prerelease.4",
"@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3",
"@patternfly/react-charts": "8.5.0-prerelease.18",
"@patternfly/react-code-editor": "6.5.0-prerelease.52",
"@patternfly/react-component-groups": "6.4.0-prerelease.17",
"@patternfly/react-console": "6.1.0-prerelease.3",
"@patternfly/react-core": "6.5.0-prerelease.49",
"@patternfly/react-data-view": "6.5.0-prerelease.1",
"@patternfly/react-drag-drop": "6.5.0-prerelease.50",
"@patternfly/react-icons": "6.5.0-prerelease.20",
"@patternfly/react-log-viewer": "6.4.0-prerelease.2",
"@patternfly/react-styles": "6.5.0-prerelease.15",
"@patternfly/react-table": "6.5.0-prerelease.50",
"@patternfly/react-templates": "6.5.0-prerelease.49",
"@patternfly/react-tokens": "6.5.0-prerelease.14",
"@patternfly/react-topology": "6.5.0-prerelease.4",
"@patternfly/react-user-feedback": "6.2.0-prerelease.3",
"@patternfly/react-virtualized-extension": "6.2.0"
}
},
{
"name": "6.5.0-prerelease.33",
"date": "2025-12-10",
"latest": true,
"hidden": true,
"versions": {
"@patternfly/patternfly": "6.5.0-prerelease.33",
"@patternfly/react-catalog-view-extension": "6.3.0",
Expand Down
26 changes: 13 additions & 13 deletions packages/documentation-site/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@
"screenshots": "pf-docs-framework screenshots"
},
"dependencies": {
"@patternfly/chatbot": "6.6.0-prerelease.5",
"@patternfly/design-tokens": "1.14.9",
"@patternfly/chatbot": "6.6.0-prerelease.6",
"@patternfly/design-tokens": "1.15.1",
"@patternfly/documentation-framework": "workspace:*",
"@patternfly/quickstarts": "6.4.0",
"@patternfly/react-catalog-view-extension": "6.3.0",
"@patternfly/react-charts": "8.5.0-prerelease.15",
"@patternfly/react-component-groups": "6.4.0",
"@patternfly/react-console": "6.1.0",
"@patternfly/react-data-view": "6.4.0-prerelease.14",
"@patternfly/react-docs": "7.5.0-prerelease.43",
"@patternfly/react-icons": "6.5.0-prerelease.15",
"@patternfly/react-log-viewer": "6.3.0",
"@patternfly/react-topology": "6.5.0-prerelease.3",
"@patternfly/react-user-feedback": "6.2.0",
"@patternfly/quickstarts": "6.5.0-prerelease.4",
"@patternfly/react-catalog-view-extension": "6.3.0-prerelease.3",
"@patternfly/react-charts": "8.5.0-prerelease.18",
"@patternfly/react-component-groups": "6.4.0-prerelease.17",
"@patternfly/react-console": "6.1.0-prerelease.3",
"@patternfly/react-data-view": "6.5.0-prerelease.1",
"@patternfly/react-docs": "7.5.0-prerelease.58",
"@patternfly/react-icons": "6.5.0-prerelease.20",
"@patternfly/react-log-viewer": "6.4.0-prerelease.2",
"@patternfly/react-topology": "6.5.0-prerelease.4",
"@patternfly/react-user-feedback": "6.2.0-prerelease.3",
"@patternfly/react-virtualized-extension": "6.2.0",
"@xyflow/react": "^12.10.1",
"echarts": "^5.6.0",
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading