}
- data-awsui-app-layout-widget-loaded={false}
+ data-awsui-app-layout-widget-loaded={isWidgetLoaded}
{...wrapperElAttributes}
className={wrapperElAttributes?.className ?? clsx(styles.root, testutilStyles.root)}
style={
diff --git a/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx b/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
index 503bb16466..ba44180e09 100644
--- a/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
+++ b/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
@@ -5,7 +5,8 @@ import React from 'react';
import { AppLayoutNotificationsImplementationProps } from '../notifications';
import { AppLayoutToolbarImplementationProps } from '../toolbar';
import { SkeletonPartProps } from './interfaces';
-import { BreadcrumbsSlot, NotificationsSlot, ToolbarSlot } from './slots';
+import { NotificationsSlot } from './slots';
+import { ToolbarSkeletonStructure } from './toolbar-container';
import styles from './styles.css.js';
@@ -17,11 +18,7 @@ export const BeforeMainSlotSkeleton = React.forwardRef
{
return (
<>
- {!!toolbarProps && (
-
-
-
- )}
+ {!!toolbarProps && }
{toolbarProps?.navigationOpen && }
>
);
@@ -34,15 +31,14 @@ export const BeforeMainSlotSkeleton = React.forwardRef(
({ appLayoutInternals }: AppLayoutToolbarImplementationProps, ref) => (
-
-
-
+
)
);
export const NotificationsSkeleton = React.forwardRef(
- (props: AppLayoutNotificationsImplementationProps, ref) =>
+ (_props: AppLayoutNotificationsImplementationProps, ref) =>
);
diff --git a/src/app-layout/visual-refresh-toolbar/skeleton/slots.tsx b/src/app-layout/visual-refresh-toolbar/skeleton/slots.tsx
index 6c77569b59..1e6e0960d0 100644
--- a/src/app-layout/visual-refresh-toolbar/skeleton/slots.tsx
+++ b/src/app-layout/visual-refresh-toolbar/skeleton/slots.tsx
@@ -16,7 +16,14 @@ interface ToolbarSlotProps {
}
export const ToolbarSlot = React.forwardRef(({ className, style, children }, ref) => (
- } className={clsx(styles['toolbar-container'], className)} style={style}>
+ }
+ className={clsx(styles['toolbar-container'], className)}
+ style={{
+ insetBlockStart: style?.insetBlockStart ?? 0,
+ ...style,
+ }}
+ >
{children}
));
@@ -41,10 +48,13 @@ interface BreadcrumbsSlotProps {
}
export function BreadcrumbsSlot({ ownBreadcrumbs, discoveredBreadcrumbs }: BreadcrumbsSlotProps) {
+ const isSSR = typeof window === 'undefined';
+ const contextValue = React.useMemo(() => ({ isInToolbar: true }), []);
+
return (
-
+
{ownBreadcrumbs}
- {discoveredBreadcrumbs && (
+ {discoveredBreadcrumbs && !isSSR && (
+ {children}
+
+ );
+}
+
+interface ToolbarBreadcrumbsWrapperProps {
+ children: React.ReactNode;
+ includeTestUtils?: boolean;
+}
+
+export function ToolbarBreadcrumbsWrapper({ children, includeTestUtils = false }: ToolbarBreadcrumbsWrapperProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+export function ToolbarDrawersWrapper() {
+ return ;
+}
+
+interface ToolbarBreadcrumbsSectionProps {
+ ownBreadcrumbs: React.ReactNode;
+ discoveredBreadcrumbs?: BreadcrumbGroupProps | null;
+ includeTestUtils?: boolean;
+}
+
+export function ToolbarBreadcrumbsSection({
+ ownBreadcrumbs,
+ discoveredBreadcrumbs,
+ includeTestUtils = false,
+}: ToolbarBreadcrumbsSectionProps) {
+ return (
+
+
+
+ );
+}
+
+interface ToolbarSkeletonStructureProps {
+ ownBreadcrumbs: React.ReactNode;
+ discoveredBreadcrumbs?: BreadcrumbGroupProps | null;
+}
+
+export const ToolbarSkeletonStructure = React.forwardRef(
+ ({ ownBreadcrumbs, discoveredBreadcrumbs }, ref) => (
+
+
+
+
+
+
+ )
+);
diff --git a/src/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.ts b/src/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.ts
index 4268a9ffab..72f4304017 100644
--- a/src/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.ts
+++ b/src/app-layout/visual-refresh-toolbar/state/use-skeleton-slots-attributes.ts
@@ -50,7 +50,6 @@ export const useSkeletonSlotsAttributes = (
[customCssProps.navigationWidth]: `${navigationWidth}px`,
[customCssProps.toolsWidth]: `${activeDrawerSize}px`,
},
- 'data-awsui-app-layout-widget-loaded': true,
};
const mainElAttributes = {
diff --git a/src/app-layout/visual-refresh-toolbar/toolbar/index.tsx b/src/app-layout/visual-refresh-toolbar/toolbar/index.tsx
index d90c9d5f39..ba2b669911 100644
--- a/src/app-layout/visual-refresh-toolbar/toolbar/index.tsx
+++ b/src/app-layout/visual-refresh-toolbar/toolbar/index.tsx
@@ -6,11 +6,14 @@ import clsx from 'clsx';
import { useResizeObserver } from '@cloudscape-design/component-toolkit/internal';
+import { createWidgetizedComponent } from '../../../internal/widgets';
import { AppLayoutProps } from '../../interfaces';
import { OnChangeParams } from '../../utils/use-drawers';
import { Focusable, FocusControlMultipleStates } from '../../utils/use-focus-control';
import { AppLayoutInternals } from '../interfaces';
-import { BreadcrumbsSlot, ToolbarSlot } from '../skeleton/slots';
+import { ToolbarSkeleton } from '../skeleton/skeleton-parts';
+import { ToolbarSlot } from '../skeleton/slots';
+import { ToolbarBreadcrumbsSection, ToolbarContainer } from '../skeleton/toolbar-container';
import { DrawerTriggers, SplitPanelToggleProps } from './drawer-triggers';
import TriggerButton from './trigger-button';
@@ -188,7 +191,7 @@ export function AppLayoutToolbarImplementation({
)}
-