diff --git a/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-footer.tsx b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-footer.tsx index 7812924af4661..95c840a1329dd 100644 --- a/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-footer.tsx +++ b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-footer.tsx @@ -49,7 +49,6 @@ export const DEVTOOLS_PANEL_FOOTER_STYLES = css` display: flex; justify-content: space-between; align-items: center; - margin-top: auto; border-top: 1px solid var(--color-gray-400); border-radius: 0 0 var(--rounded-xl) var(--rounded-xl); } diff --git a/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar-frame-skeleton.tsx b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar-frame-skeleton.tsx new file mode 100644 index 0000000000000..f75e8d69cf9bb --- /dev/null +++ b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar-frame-skeleton.tsx @@ -0,0 +1,52 @@ +import { css } from '../../../../utils/css' + +export function IssuesTabSidebarFrameSkeleton() { + return ( + <> +
+ + > + ) +} + +export const DEVTOOLS_PANEL_TAB_ISSUES_SIDEBAR_FRAME_SKELETON_STYLES = css` + [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar] { + height: var(--size-12); + border-radius: 100px; + background: linear-gradient( + 90deg, + var(--color-gray-200) 25%, + var(--color-gray-100) 50%, + var(--color-gray-200) 75% + ); + background-size: 200% 100%; + animation: skeleton-shimmer 1.5s ease-in-out infinite; + } + + [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'] { + width: 75%; + margin-bottom: 8px; + } + + [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] { + width: 36.5%; + } + + @keyframes skeleton-shimmer { + 0% { + background-position: -200% 0; + } + 100% { + background-position: 200% 0; + } + } + + /* Respect user's motion preferences */ + @media (prefers-reduced-motion: reduce) { + [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'], + [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] { + animation: none; + background: var(--color-gray-200); + } + } +` diff --git a/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar.stories.tsx b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar.stories.tsx new file mode 100644 index 0000000000000..b03cb56494c6a --- /dev/null +++ b/packages/next/src/next-devtools/dev-overlay/components/devtools-panel/devtools-panel-tab/issues-tab/issues-tab-sidebar.stories.tsx @@ -0,0 +1,41 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { useState } from 'react' +import { IssuesTabSidebar } from './issues-tab-sidebar' +import { withShadowPortal } from '../../../../storybook/with-shadow-portal' +import { runtimeErrors } from '../../../../storybook/errors' + +const meta: Meta