From 12e608e7f0d0d4138b3d38bb5f9ce8858ae3f217 Mon Sep 17 00:00:00 2001 From: "Calum H. (IMB11)" Date: Mon, 6 Jul 2026 09:51:10 +0100 Subject: [PATCH 01/12] refactor: introduce PageHeader component --- .../app-frontend/src/pages/instance/Index.vue | 445 +++++++----- apps/app-frontend/src/pages/project/Index.vue | 243 ++++--- .../ui/ProjectCollectionSaveButton.vue | 127 ++++ apps/frontend/src/pages/[type]/[project].vue | 551 +++++--------- .../src/pages/organization/[organization].vue | 178 ++--- apps/frontend/src/pages/user/[user].vue | 381 +++++----- .../src/components/base/ContentPageHeader.vue | 45 -- .../ui/src/components/base/JoinedButtons.vue | 3 +- .../ui/src/components/base/PageHeader.vue | 683 +++++++++++++++++- .../components/base/TeleportOverflowMenu.vue | 104 ++- packages/ui/src/components/base/index.ts | 9 +- .../src/components/project/ProjectHeader.vue | 105 ++- .../server-header/ServerManageHeader.vue | 42 +- .../src/layouts/shared/browse-tab/header.vue | 123 ++-- .../stories/base/ContentPageHeader.stories.ts | 63 -- .../ui/src/stories/base/PageHeader.stories.ts | 353 +++++++++ 16 files changed, 2287 insertions(+), 1168 deletions(-) create mode 100644 apps/frontend/src/components/ui/ProjectCollectionSaveButton.vue delete mode 100644 packages/ui/src/components/base/ContentPageHeader.vue delete mode 100644 packages/ui/src/stories/base/ContentPageHeader.stories.ts create mode 100644 packages/ui/src/stories/base/PageHeader.stories.ts diff --git a/apps/app-frontend/src/pages/instance/Index.vue b/apps/app-frontend/src/pages/instance/Index.vue index 122edf3a84..b33edf12b5 100644 --- a/apps/app-frontend/src/pages/instance/Index.vue +++ b/apps/app-frontend/src/pages/instance/Index.vue @@ -13,207 +13,57 @@ @unlinked="fetchInstance" /> - - - - diff --git a/packages/ui/src/components/base/index.ts b/packages/ui/src/components/base/index.ts index 7fa6262111..052c257df9 100644 --- a/packages/ui/src/components/base/index.ts +++ b/packages/ui/src/components/base/index.ts @@ -19,7 +19,6 @@ export { default as CollapsibleAdmonition } from './CollapsibleAdmonition.vue' export { default as CollapsibleRegion } from './CollapsibleRegion.vue' export type { ComboboxOption } from './Combobox.vue' export { default as Combobox } from './Combobox.vue' -export { default as ContentPageHeader } from './ContentPageHeader.vue' export { default as CopyCode } from './CopyCode.vue' export { default as DatePicker } from './DatePicker.vue' export { default as DoubleIcon } from './DoubleIcon.vue' @@ -32,8 +31,6 @@ export { default as EmptyState } from './EmptyState.vue' export { default as EnvironmentIndicator } from './EnvironmentIndicator.vue' export { default as ErrorInformationCard } from './ErrorInformationCard.vue' export { default as FileInput } from './FileInput.vue' -export type { FileTreeSelectItem } from './FileTreeSelect.vue' -export { default as FileTreeSelect } from './FileTreeSelect.vue' export type { FilterBarOption } from './FilterBar.vue' export { default as FilterBar } from './FilterBar.vue' export type { FilterPillOption } from './FilterPills.vue' @@ -65,6 +62,7 @@ export { default as OptionGroup } from './OptionGroup.vue' export type { Option as OverflowMenuOption } from './OverflowMenu.vue' export { default as OverflowMenu } from './OverflowMenu.vue' export { default as Page } from './Page.vue' +export { default as PageHeader } from './PageHeader.vue' export { default as Pagination } from './Pagination.vue' export { default as PopoutMenu } from './PopoutMenu.vue' export { default as PreviewSelectButton } from './PreviewSelectButton.vue' @@ -89,6 +87,11 @@ export type { TabsTab, TabsValue } from './Tabs.vue' export { default as Tabs } from './Tabs.vue' export { default as TagItem } from './TagItem.vue' export { default as TagTagItem } from './TagTagItem.vue' +export type { + Item as TeleportOverflowMenuItem, + Option as TeleportOverflowMenuOption, +} from './TeleportOverflowMenu.vue' +export { default as TeleportOverflowMenu } from './TeleportOverflowMenu.vue' export type { TimeFrameLastUnit, TimeFrameLastUnitOption, diff --git a/packages/ui/src/components/project/ProjectHeader.vue b/packages/ui/src/components/project/ProjectHeader.vue index 0f5235cf2f..7a76a26dbc 100644 --- a/packages/ui/src/components/project/ProjectHeader.vue +++ b/packages/ui/src/components/project/ProjectHeader.vue @@ -1,18 +1,14 @@ - +
@@ -336,23 +365,12 @@ diff --git a/packages/ui/src/components/base/page-header/page-header-user-avatar-leading.vue b/packages/ui/src/components/base/page-header/page-header-user-avatar-leading.vue deleted file mode 100644 index 58bb3f455c..0000000000 --- a/packages/ui/src/components/base/page-header/page-header-user-avatar-leading.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - diff --git a/packages/ui/src/stories/base/PageHeader.stories.ts b/packages/ui/src/stories/base/PageHeader.stories.ts index 096bb9125d..73ad628820 100644 --- a/packages/ui/src/stories/base/PageHeader.stories.ts +++ b/packages/ui/src/stories/base/PageHeader.stories.ts @@ -19,6 +19,7 @@ import { import type { Meta, StoryObj } from '@storybook/vue3-vite' import AutoLink from '../../components/base/AutoLink.vue' +import Avatar from '../../components/base/Avatar.vue' import ButtonStyled from '../../components/base/ButtonStyled.vue' import FormattedTag from '../../components/base/FormattedTag.vue' import JoinedButtons from '../../components/base/JoinedButtons.vue' @@ -30,8 +31,6 @@ import PageHeaderMetadataTagsItem from '../../components/base/page-header/metada import PageHeaderMetadataTimeItem from '../../components/base/page-header/metadata/page-header-metadata-time-item.vue' import PageHeaderActions from '../../components/base/page-header/page-header-actions.vue' import PageHeaderBadgeItem from '../../components/base/page-header/page-header-badge-item.vue' -import PageHeaderObjectAvatarLeading from '../../components/base/page-header/page-header-object-avatar-leading.vue' -import PageHeaderUserAvatarLeading from '../../components/base/page-header/page-header-user-avatar-leading.vue' import TagItem from '../../components/base/TagItem.vue' import TeleportOverflowMenu from '../../components/base/TeleportOverflowMenu.vue' import LoaderIcon from '../../components/servers/icons/LoaderIcon.vue' @@ -87,6 +86,7 @@ const pageHeaderIcons = { const pageHeaderComponents = { AutoLink, + Avatar, ButtonStyled, FormattedTag, JoinedButtons, @@ -98,8 +98,6 @@ const pageHeaderComponents = { PageHeaderMetadataNumberItem, PageHeaderMetadataTagsItem, PageHeaderMetadataTimeItem, - PageHeaderObjectAvatarLeading, - PageHeaderUserAvatarLeading, TagItem, TeleportOverflowMenu, ...pageHeaderIcons, @@ -136,7 +134,7 @@ export const ProjectHeader: Story = { template: `