From 62a64c4f31c0ae0c268145b61ad479106d04834d Mon Sep 17 00:00:00 2001 From: nicolethoen Date: Mon, 6 Apr 2026 09:27:56 -0400 Subject: [PATCH] feat: bump preleases and update screenshots --- package.json | 14 +- .../layouts/sideNavLayout/sideNavLayout.js | 8 +- packages/documentation-framework/package.json | 10 +- .../scripts/md/mdx-hast-to-jsx.js | 5 +- .../scripts/md/stripReactTypeOnlyImports.js | 227 +++++++++++++ .../documentation-framework/versions.json | 29 +- packages/documentation-site/package.json | 26 +- .../compass/html-demos/card-view.png | Bin 217603 -> 139302 bytes .../compass/html-demos/dashboard.png | Bin 231425 -> 430623 bytes .../compass/html-demos/docked.png | Bin 56239 -> 53928 bytes .../compass/html-demos/multiple-sections.png | Bin 239134 -> 169644 bytes .../compass/html-demos/with-drawer.png | Bin 181063 -> 116317 bytes .../org-demos/card-and-data-view-layout.png | Bin 167791 -> 163859 bytes .../compass/org-demos/dashboard-layout.png | Bin 211980 -> 270650 bytes .../compass/react-demos/compass-layout.png | Bin 22926 -> 19851 bytes .../compass/react-demos/docked-nav-demo.png | Bin 10492 -> 9053 bytes .../about-modal/html-demos/basic.png | Bin 43957 -> 44317 bytes .../inline-alert-in-horizontal-form.png | Bin 28486 -> 28607 bytes .../inline-alert-in-stacked-form.png | Bin 30152 -> 30265 bytes .../components/alert/html-demos/toast.png | Bin 33086 -> 33782 bytes .../alert/html/toast-alert-group.png | Bin 18847 -> 18969 bytes ...t-group-toast-with-notification-drawer.png | Bin 38755 -> 38759 bytes .../back-to-top/html-demos/basic.png | Bin 53112 -> 55320 bytes .../react-demos/using-name-selector.png | Bin 200574 -> 200773 bytes .../components/banner/html-demos/basic.png | Bin 54801 -> 57123 bytes .../banner/html-demos/topbottom.png | Bin 55424 -> 57658 bytes .../react-demos/basic-sticky-banner.png | Bin 44006 -> 45473 bytes .../react-demos/top-and-bottom-banner.png | Bin 47462 -> 48842 bytes .../data-list/html-demos/actionable.png | Bin 37174 -> 37309 bytes .../components/data-list/html-demos/basic.png | Bin 40656 -> 40758 bytes .../data-list/html-demos/expandable-demo.png | Bin 54777 -> 54960 bytes .../html-demos/static-bottom-pagination.png | Bin 42500 -> 42694 bytes .../data-list/react-demos/actionable.png | Bin 21403 -> 21406 bytes .../data-list/react-demos/basic.png | Bin 39051 -> 39040 bytes .../expandable-control-in-toolbar.png | Bin 42189 -> 42247 bytes .../react-demos/static-bottom-pagination.png | Bin 48089 -> 48092 bytes .../description-list/html-demos/basic.png | Bin 23415 -> 23587 bytes .../html-demos/complex-content.png | Bin 31356 -> 31415 bytes .../description-list/html-demos/in-drawer.png | Bin 46285 -> 46773 bytes .../description-list/react-demos/basic.png | Bin 23797 -> 23931 bytes .../react-demos/in-drawer.png | Bin 47464 -> 48955 bytes .../collapsed-drawer-with-jump-links.png | Bin 156027 -> 156007 bytes .../drawer/html-demos/collapsed.png | Bin 21199 -> 21577 bytes .../drawer/html-demos/expanded-bottom.png | Bin 22157 -> 22527 bytes .../expanded-drawer-with-jump-links.png | Bin 125965 -> 125924 bytes .../components/drawer/html-demos/expanded.png | Bin 21238 -> 21636 bytes .../html-demos/horizontal-jump-links.png | Bin 147907 -> 147989 bytes .../html-demos/jump-links-in-drawer.png | Bin 156027 -> 156007 bytes .../jump-links-in-expanded-drawer.png | Bin 125965 -> 125924 bytes ...ertical-jump-links-collapsed-on-mobile.png | Bin 158950 -> 159011 bytes ...vertical-jump-links-expanded-on-mobile.png | Bin 158950 -> 159011 bytes ...tical-jump-links-toggle-text-on-mobile.png | Bin 158950 -> 159011 bytes .../scrollspy-with-subsections.png | Bin 118372 -> 118386 bytes .../jump-links/react-demos/with-drawer.png | Bin 139325 -> 139338 bytes .../components/login-page/html/invalid.png | Bin 32246 -> 32225 bytes .../html/with-language-selector.png | Bin 31075 -> 31113 bytes ...advanced-integration-with-menu-options.png | Bin 21199 -> 21577 bytes .../components/masthead/html-demos/basic.png | Bin 20847 -> 21275 bytes .../masthead/html-demos/horizontal-nav.png | Bin 21205 -> 21139 bytes .../with-context-selector-and-dropdown.png | Bin 22218 -> 22771 bytes .../with-expandable-search-collapsed.png | Bin 20915 -> 21328 bytes .../with-expandable-search-expanded.png | Bin 21319 -> 21729 bytes .../with-toggle-group-and-filters.png | Bin 22062 -> 22580 bytes ...ers-expandable-content-expanded-mobile.png | Bin 20146 -> 20598 bytes .../html-demos/with-toolbar-filters.png | Bin 22062 -> 22580 bytes .../masthead/react-demos/horizontal-nav.png | Bin 23430 -> 23896 bytes .../utilities-and-user-dropdown-menu.png | Bin 22128 -> 22656 bytes .../components/modal/html-demos/basic.png | Bin 31931 -> 32087 bytes .../components/modal/html-demos/large.png | Bin 38154 -> 38309 bytes .../components/modal/html-demos/medium.png | Bin 36355 -> 36510 bytes .../modal/html-demos/modal-with-form.png | Bin 29613 -> 29836 bytes .../modal/html-demos/scrollable-content.png | Bin 80233 -> 80536 bytes .../modal/html-demos/top-aligned.png | Bin 31088 -> 31200 bytes .../generated/components/modal/html/icon.png | Bin 6800 -> 6687 bytes .../modal/html/with-help-button.png | Bin 20241 -> 20208 bytes .../navigation/html-demos/default-nav.png | Bin 21199 -> 21577 bytes .../docked-nav---expanded-on-mobile.png | Bin 0 -> 17091 bytes ...nav-text-expanded---expanded-on-mobile.png | Bin 0 -> 19542 bytes .../html-demos/docked-nav-text-expanded.png | Bin 0 -> 19522 bytes .../navigation/html-demos/docked-nav.png | Bin 16375 -> 17079 bytes .../navigation/html-demos/expandable-nav.png | Bin 23535 -> 24000 bytes .../navigation/html-demos/grouped-nav.png | Bin 24302 -> 24741 bytes .../horizontal-nav-with-horizontal-subnav.png | Bin 23622 -> 23703 bytes .../navigation/html-demos/horizontal-nav.png | Bin 21205 -> 21139 bytes .../html-demos/horizontal-subnav.png | Bin 23238 -> 24018 bytes .../navigation/react-demos/default-nav.png | Bin 25811 -> 26216 bytes .../navigation/react-demos/drilldown-nav.png | Bin 9538 -> 9502 bytes .../navigation/react-demos/expandable-nav.png | Bin 28186 -> 28595 bytes .../navigation/react-demos/flyout-nav.png | Bin 10823 -> 10824 bytes .../navigation/react-demos/grouped-nav.png | Bin 21030 -> 20978 bytes .../horizontal-nav-with-horizontal-subnav.png | Bin 34468 -> 34934 bytes .../navigation/react-demos/horizontal-nav.png | Bin 25209 -> 25635 bytes .../react-demos/horizontal-subnav.png | Bin 33097 -> 33455 bytes .../navigation/react-demos/manual-nav.png | Bin 23357 -> 23798 bytes .../html-demos/collapsed.png | Bin 21573 -> 21889 bytes .../html-demos/expanded-attention.png | Bin 72000 -> 72714 bytes .../html-demos/expanded-read.png | Bin 68438 -> 68883 bytes .../html-demos/expanded-unread.png | Bin 69525 -> 69878 bytes .../html-demos/expanded-with-groups.png | Bin 67410 -> 68161 bytes .../notification-drawer/react-demos/basic.png | Bin 19144 -> 19191 bytes .../react-demos/grouped.png | Bin 19144 -> 19191 bytes .../components/page/html-demos/basic.png | Bin 21199 -> 21577 bytes .../page/html-demos/centered-section.png | Bin 30839 -> 31444 bytes .../context-selector-expanded-in-sidebar.png | Bin 22782 -> 23862 bytes .../context-selector-in-sidebar.png | Bin 22045 -> 22573 bytes .../multiple-sidebar-body-elements.png | Bin 24252 -> 24741 bytes .../html-demos/no-sidebar-or-masthead.png | Bin 14292 -> 14869 bytes .../components/page/html-demos/no-sidebar.png | Bin 17567 -> 18046 bytes .../page/html-demos/overflow-scroll.png | Bin 59048 -> 61094 bytes .../page/html-demos/sidebar-collapsed.png | Bin 17567 -> 18911 bytes .../page/html-demos/sidebar-expanded.png | Bin 21199 -> 21577 bytes .../sticky-breadcrumb-on-medium.png | Bin 51280 -> 53496 bytes .../page/html-demos/sticky-breadcrumb.png | Bin 51280 -> 53496 bytes .../html-demos/sticky-horizontal-subnav.png | Bin 50625 -> 52785 bytes .../page/html-demos/sticky-section-bottom.png | Bin 58996 -> 61016 bytes .../page/html-demos/sticky-section-group.png | Bin 51883 -> 53991 bytes ...electorperspective-switcher-in-sidebar.png | Bin 53361 -> 55446 bytes .../page/react-demos/docked-nav.png | Bin 17352 -> 17391 bytes ...ky-section-breadcrumb-with-breakpoints.png | Bin 52094 -> 54310 bytes .../sticky-section-group-alternate-syntax.png | Bin 52696 -> 54791 bytes .../page/react-demos/sticky-section-group.png | Bin 52696 -> 54791 bytes .../components/pagination/react/sticky.png | Bin 58538 -> 61271 bytes .../components/popover/html/bottom-left.png | Bin 6181 -> 6234 bytes .../components/popover/html/bottom-right.png | Bin 6154 -> 6221 bytes .../components/popover/html/bottom.png | Bin 6862 -> 6907 bytes .../popover/html/custom-alert-popover.png | Bin 7194 -> 7288 bytes .../popover/html/danger-alert-popover.png | Bin 7355 -> 7473 bytes .../popover/html/info-alert-popover.png | Bin 7183 -> 7305 bytes .../components/popover/html/left-bottom.png | Bin 6034 -> 6104 bytes .../components/popover/html/left-top.png | Bin 6075 -> 6125 bytes .../components/popover/html/left.png | Bin 6821 -> 6900 bytes .../components/popover/html/no-padding.png | Bin 7964 -> 7976 bytes .../html/popover-with-icon-in-the-title.png | Bin 7269 -> 7349 bytes .../components/popover/html/right.png | Bin 6872 -> 6962 bytes .../popover/html/success-alert-popover.png | Bin 7363 -> 7477 bytes .../generated/components/popover/html/top.png | Bin 6901 -> 7008 bytes .../popover/html/warning-alert-popover.png | Bin 7380 -> 7494 bytes .../components/popover/html/width-auto.png | Bin 5100 -> 5158 bytes .../popover/html/without-headerfooter.png | Bin 5305 -> 5374 bytes .../skeleton/html-demos/skeleton-card.png | Bin 23476 -> 23696 bytes .../skeleton/react-demos/skeleton-card.png | Bin 23920 -> 24118 bytes .../components/table/html-demos/basic.png | Bin 39229 -> 39243 bytes .../html-demos/cell-with-image-alignment.png | Bin 27924 -> 27986 bytes .../html-demos/column-management-modal.png | Bin 45118 -> 45161 bytes .../components/table/html-demos/compact.png | Bin 34164 -> 34207 bytes .../table/html-demos/compound-expansion.png | Bin 40799 -> 40853 bytes .../container-query-with-drawer.png | Bin 60634 -> 60701 bytes .../table/html-demos/empty-state.png | Bin 23147 -> 23208 bytes .../table/html-demos/expandable.png | Bin 45661 -> 45721 bytes .../table/html-demos/loading-state-demo.png | Bin 17436 -> 17502 bytes .../components/table/html-demos/sortable.png | Bin 40598 -> 40771 bytes .../html-demos/static-bottom-pagination.png | Bin 38678 -> 38707 bytes .../table/html-demos/sticky-first-column.png | Bin 57203 -> 57329 bytes .../sticky-header-and-last-column.png | Bin 56673 -> 56782 bytes .../sticky-header-and-multiple-columns.png | Bin 57738 -> 57848 bytes .../table/html-demos/sticky-header.png | Bin 38691 -> 38719 bytes .../html-demos/sticky-multiple-columns.png | Bin 57681 -> 57795 bytes .../table/react-demos/bulk-select.png | Bin 29922 -> 29931 bytes .../column-management-with-draggable.png | Bin 55216 -> 55220 bytes .../table/react-demos/column-management.png | Bin 55216 -> 55220 bytes .../components/table/react-demos/compact.png | Bin 52184 -> 52194 bytes .../table/react-demos/compound-expansion.png | Bin 36382 -> 36390 bytes .../components/table/react-demos/empty.png | Bin 23044 -> 23049 bytes .../components/table/react-demos/error.png | Bin 22762 -> 22740 bytes .../table/react-demos/expandcollapse-all.png | Bin 29325 -> 29472 bytes .../components/table/react-demos/loading.png | Bin 18146 -> 18160 bytes .../react-demos/sortable---responsive.png | Bin 78768 -> 78772 bytes .../static-bottom-pagination-on-mobile.png | Bin 54260 -> 54270 bytes .../table/react-demos/sticky-first-column.png | Bin 70007 -> 70018 bytes .../table/react-demos/sticky-header.png | Bin 64087 -> 64101 bytes .../components/tabs/html-demos/modal-tabs.png | Bin 36625 -> 36807 bytes .../tabs/html-demos/nested-tabs.png | Bin 39860 -> 39965 bytes .../html-demos/nested-unindented-tabs.png | Bin 36298 -> 36613 bytes .../open-tabs-with-secondary-tabs.png | Bin 30055 -> 30144 bytes .../components/tabs/html-demos/open-tabs.png | Bin 33355 -> 33432 bytes .../tabs/html-demos/tables-and-tabs.png | Bin 48516 -> 48514 bytes .../tabs/react-demos/modal-tabs.png | Bin 39039 -> 39381 bytes .../tabs/react-demos/nested-tabs.png | Bin 40487 -> 40593 bytes .../react-demos/nested-unindented-tabs.png | Bin 36695 -> 36868 bytes .../open-tabs-with-secondary-tabs.png | Bin 39170 -> 39184 bytes .../components/tabs/react-demos/open-tabs.png | Bin 37962 -> 37986 bytes .../tabs/react-demos/tables-and-tabs.png | Bin 46675 -> 46693 bytes ...oolbar-pagination-management-on-mobile.png | Bin 36191 -> 36222 bytes .../toolbar-with-validation-on-desktop.png | Bin 40017 -> 39911 bytes .../console-log-viewer-toolbar-demo.png | Bin 17750 -> 17762 bytes .../components/wizard/html-demos/basic.png | Bin 34424 -> 34837 bytes .../in-page-nav-expanded-mobile.png | Bin 27188 -> 27252 bytes .../components/wizard/html-demos/in-page.png | Bin 27188 -> 27252 bytes .../wizard/html-demos/nav-expanded-mobile.png | Bin 34424 -> 34837 bytes .../with-drawer-and-informational-step.png | Bin 36720 -> 37121 bytes .../wizard/html-demos/with-drawer-closed.png | Bin 34424 -> 34837 bytes .../html-demos/with-drawer-expanded.png | Bin 64037 -> 64431 bytes .../with-drawer-in-page-expanded.png | Bin 74362 -> 74412 bytes .../wizard/html-demos/with-drawer-in-page.png | Bin 27188 -> 27252 bytes .../components/wizard/html/basic.png | Bin 18763 -> 18785 bytes .../components/wizard/html/error-on-step.png | Bin 18720 -> 18759 bytes .../wizard/html/expandable-collapsed.png | Bin 16992 -> 17017 bytes .../wizard/html/expandable-expanded.png | Bin 18763 -> 18785 bytes .../components/wizard/html/finished.png | Bin 16585 -> 16614 bytes .../wizard/html/nav-expanded-mobile.png | Bin 18763 -> 18785 bytes .../html/nav-expanded-with-error-mobile.png | Bin 18720 -> 18759 bytes .../html/nav-expanded-with-success-mobile.png | Bin 18744 -> 18783 bytes .../html/nav-expanded-with-warning-mobile.png | Bin 18700 -> 18743 bytes .../components/wizard/html/plain.png | Bin 0 -> 18150 bytes .../wizard/html/success-on-step.png | Bin 18744 -> 18783 bytes .../wizard/html/warning-on-step.png | Bin 18700 -> 18743 bytes .../components/wizard/html/with-drawer.png | Bin 21161 -> 21173 bytes ...dal-with-drawer-and-informational-step.png | Bin 25200 -> 25214 bytes .../react-demos/in-modal-with-drawer.png | Bin 19447 -> 19449 bytes .../wizard/react-demos/in-modal.png | Bin 31653 -> 31723 bytes ...age-with-drawer-and-informational-step.png | Bin 25738 -> 25795 bytes .../react-demos/in-page-with-drawer.png | Bin 22889 -> 22930 bytes .../components/wizard/react-demos/in-page.png | Bin 23393 -> 23407 bytes .../catalog-view/overview/react/demo.png | Bin 63761 -> 64953 bytes ...ach-via-menu-of-options-in-message-bar.png | Bin 22996 -> 22958 bytes ...ttach-via-upload-button-in-message-bar.png | Bin 29049 -> 29004 bytes .../messages/demo/message-auto-scrolling.png | Bin 30102 -> 30382 bytes .../chatbot/overview/demo/basic-chatbot.png | Bin 30115 -> 30382 bytes .../overview/demo/chat-transcripts.png | Bin 30102 -> 30382 bytes .../chatbot/overview/demo/compact-chatbot.png | Bin 37201 -> 37572 bytes .../overview/demo/display-mode-switcher.png | Bin 28173 -> 28474 bytes .../overview/demo/embedded-chatbot.png | Bin 47998 -> 48241 bytes .../overview/demo/inline-drawer-chatbot.png | Bin 39141 -> 39572 bytes .../demo/primary-color-background.png | Bin 44894 -> 45146 bytes .../chatbot/ui/react/compact-onboarding.png | Bin 19449 -> 19464 bytes .../chatbot/ui/react/compact-terms-of-use.png | Bin 51037 -> 51012 bytes .../chatbot/ui/react/custom-toggle-icon.png | Bin 3530 -> 3518 bytes .../chatbot/ui/react/onboarding.png | Bin 52958 -> 52981 bytes .../fullscreen-catalog-page.png | Bin 31029 -> 31290 bytes .../quick-starts-with-custom-drawer.png | Bin 33806 -> 33977 bytes .../react-console/react/basic-usage.png | Bin 5730 -> 5926 bytes .../motion/demo/animated-ui.png | Bin 85763 -> 85872 bytes .../card-view/html-demos/card-view.png | Bin 90269 -> 87839 bytes .../card-view/react-demos/card-view.png | Bin 81784 -> 83253 bytes .../patterns/dashboard/html-demos/basic.png | Bin 84316 -> 84622 bytes .../html-demos/inline-modifier.png | Bin 52417 -> 52478 bytes ...tail-card-data-list-expanded-on-mobile.png | Bin 39401 -> 39736 bytes ...il-card-simple-list-expanded-on-mobile.png | Bin 31358 -> 31651 bytes .../primary-detail-card-view-expanded.png | Bin 91488 -> 91672 bytes .../html-demos/primary-detail-collapsed.png | Bin 41335 -> 41425 bytes .../primary-detail-content-body-padding.png | Bin 51501 -> 51553 bytes .../html-demos/primary-detail-expanded.png | Bin 53334 -> 53511 bytes .../react-demos/primary-detail-card-view.png | Bin 88838 -> 90267 bytes .../primary-detail-content-padding.png | Bin 41914 -> 41934 bytes .../primary-detail-data-list-in-card.png | Bin 26580 -> 26762 bytes .../react-demos/primary-detail-full-page.png | Bin 41909 -> 41936 bytes .../primary-detail-inline-modifier.png | Bin 41909 -> 41936 bytes .../primary-detail-simple-list-in-card.png | Bin 23452 -> 23572 bytes .../react-demos/paginated-table.png | Bin 56828 -> 56811 bytes yarn.lock | 300 +++++++++--------- 250 files changed, 446 insertions(+), 173 deletions(-) create mode 100644 packages/documentation-framework/scripts/md/stripReactTypeOnlyImports.js create mode 100644 packages/documentation-site/patternfly-docs/generated/components/navigation/html-demos/docked-nav---expanded-on-mobile.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/navigation/html-demos/docked-nav-text-expanded---expanded-on-mobile.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/navigation/html-demos/docked-nav-text-expanded.png create mode 100644 packages/documentation-site/patternfly-docs/generated/components/wizard/html/plain.png diff --git a/package.json b/package.json index 2d3601bc07..4d45cfc6b6 100644 --- a/package.json +++ b/package.json @@ -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", @@ -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" } } diff --git a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js index 38b76252ef..9b4c6ef20b 100644 --- a/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js +++ b/packages/documentation-framework/layouts/sideNavLayout/sideNavLayout.js @@ -265,9 +265,11 @@ export const SideNavLayout = ({ children, groupedRoutes, navOpen: navOpenProp }) const SideBar = ( - - - +
{/** TODO: fix with updated React components after https://redhat.atlassian.net/browse/PF-3728 merges */} + + + +
); diff --git a/packages/documentation-framework/package.json b/packages/documentation-framework/package.json index 3e4a85ac5c..0db48618a2 100644 --- a/packages/documentation-framework/package.json +++ b/packages/documentation-framework/package.json @@ -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" }, diff --git a/packages/documentation-framework/scripts/md/mdx-hast-to-jsx.js b/packages/documentation-framework/scripts/md/mdx-hast-to-jsx.js index ef248fdca7..3108602cf4 100644 --- a/packages/documentation-framework/scripts/md/mdx-hast-to-jsx.js +++ b/packages/documentation-framework/scripts/md/mdx-hast-to-jsx.js @@ -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 = {}) { @@ -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; diff --git a/packages/documentation-framework/scripts/md/stripReactTypeOnlyImports.js b/packages/documentation-framework/scripts/md/stripReactTypeOnlyImports.js new file mode 100644 index 0000000000..9b0a0c60d8 --- /dev/null +++ b/packages/documentation-framework/scripts/md/stripReactTypeOnlyImports.js @@ -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, +}; diff --git a/packages/documentation-framework/versions.json b/packages/documentation-framework/versions.json index 90deaffd6f..08c3ada1a7 100644 --- a/packages/documentation-framework/versions.json +++ b/packages/documentation-framework/versions.json @@ -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", diff --git a/packages/documentation-site/package.json b/packages/documentation-site/package.json index c350d9fcc4..2741efdef3 100644 --- a/packages/documentation-site/package.json +++ b/packages/documentation-site/package.json @@ -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", diff --git a/packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/card-view.png b/packages/documentation-site/patternfly-docs/generated/ai/generative-uis/compass/html-demos/card-view.png index 8cea613728fbe2c9529cdc7a29ebbf1010d51550..6361cd87f2c70e68881a33ab40762d2806affd88 100644 GIT binary patch literal 139302 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