From 418c9d12ba2035257faebf438edfe9d66f0765da Mon Sep 17 00:00:00 2001 From: Sooraj Sanker Date: Fri, 11 Oct 2024 16:15:56 +0000 Subject: [PATCH 1/2] Sync packages/ui to frontend/packages/ui --- frontend/packages/ui/constants.ts | 6 +- .../AcceptableList.stories.tsx | 4 +- .../core/acceptable-list/AcceptableList.tsx | 8 +- .../packages/ui/core/acceptable-list/types.ts | 2 +- .../animated-border-box/AnimatedBorderBox.tsx | 92 +++++++++++++++++++ .../ui/core/animated-border-box/index.ts | 1 + .../ui/core/copy-button/CopyButton.tsx | 1 + .../ui/core/generic-error/GenericError.tsx | 12 +++ .../ui/core/headers-editor/HeadersEditor.tsx | 7 +- .../ui/core/hover-wrappers/HoverWrappers.tsx | 54 +++++++++++ .../packages/ui/core/hover-wrappers/index.ts | 1 + frontend/packages/ui/core/index.ts | 2 + .../ui/core/page-shell/PageShell.stories.tsx | 69 +++++--------- .../ui/core/page-shell/components/Content.tsx | 31 ++++++- .../ui/core/page-shell/components/Sidebar.tsx | 9 +- .../core/searchable-menu/SearchableMenu.tsx | 3 +- frontend/packages/ui/hooks/index.ts | 3 +- frontend/packages/ui/hooks/useColorScheme.ts | 13 +++ .../packages/ui/hooks/useHasOverflowX.tsx | 31 +++++++ .../ui/hooks/useMRTDefaultOptions.tsx | 6 ++ frontend/packages/ui/hooks/useStorage.ts | 6 +- frontend/packages/ui/icons/Icons.ts | 35 ++++--- frontend/packages/ui/icons/types.ts | 3 + .../packages/ui/mantine/MantineProviders.tsx | 2 +- frontend/packages/ui/mantine/mantineTheme.ts | 10 +- .../ui/storybook/MockStorybookProvider.tsx | 54 +++++++++++ frontend/packages/ui/storybook/index.ts | 11 +-- .../mock-components/MockAppShell.tsx | 24 +++++ .../ui/storybook/mock-components/index.ts | 1 + .../packages/ui/storybook/mock-data/index.ts | 3 + .../storybook/{ => mock-data}/mockMetadata.ts | 0 .../{ => mock-data}/mockProjectData.ts | 1 + .../ui/storybook/{ => mock-data}/mockUser.tsx | 0 .../MockFeatureContext.tsx | 1 + .../MockMetadataProvider.tsx | 2 +- .../MockProjectContextProvider.tsx | 2 +- .../mock-providers/MockTourProvider.tsx | 25 +++++ .../{ => mock-providers}/MockUserProvider.tsx | 2 +- .../ui/storybook/mock-providers/index.ts | 9 ++ frontend/packages/ui/styles/main.css | 9 +- frontend/packages/ui/utils/index.ts | 1 - frontend/packages/ui/utils/withClassName.tsx | 41 --------- 42 files changed, 453 insertions(+), 144 deletions(-) create mode 100644 frontend/packages/ui/core/animated-border-box/AnimatedBorderBox.tsx create mode 100644 frontend/packages/ui/core/animated-border-box/index.ts create mode 100644 frontend/packages/ui/core/hover-wrappers/HoverWrappers.tsx create mode 100644 frontend/packages/ui/core/hover-wrappers/index.ts create mode 100644 frontend/packages/ui/hooks/useHasOverflowX.tsx create mode 100644 frontend/packages/ui/storybook/MockStorybookProvider.tsx create mode 100644 frontend/packages/ui/storybook/mock-components/MockAppShell.tsx create mode 100644 frontend/packages/ui/storybook/mock-components/index.ts create mode 100644 frontend/packages/ui/storybook/mock-data/index.ts rename frontend/packages/ui/storybook/{ => mock-data}/mockMetadata.ts (100%) rename frontend/packages/ui/storybook/{ => mock-data}/mockProjectData.ts (98%) rename frontend/packages/ui/storybook/{ => mock-data}/mockUser.tsx (100%) rename frontend/packages/ui/storybook/{ => mock-providers}/MockFeatureContext.tsx (97%) rename frontend/packages/ui/storybook/{ => mock-providers}/MockMetadataProvider.tsx (97%) rename frontend/packages/ui/storybook/{ => mock-providers}/MockProjectContextProvider.tsx (83%) create mode 100644 frontend/packages/ui/storybook/mock-providers/MockTourProvider.tsx rename frontend/packages/ui/storybook/{ => mock-providers}/MockUserProvider.tsx (84%) create mode 100644 frontend/packages/ui/storybook/mock-providers/index.ts delete mode 100644 frontend/packages/ui/utils/withClassName.tsx diff --git a/frontend/packages/ui/constants.ts b/frontend/packages/ui/constants.ts index 18bfeec..5d7c26b 100644 --- a/frontend/packages/ui/constants.ts +++ b/frontend/packages/ui/constants.ts @@ -1,11 +1,11 @@ import { MantineRadius, MantineSpacing } from '@mantine/core'; -export const APP_SHELL_HEADER_HEIGHT = 0; +export const APP_SHELL_HEADER_HEIGHT = 54; export const PAGE_SHELL_TAB_BAR_HEIGHT = 46; -export const PROJECT_APP_SHELL_NAVBAR_WIDTH = 64; +export const PROJECT_APP_SHELL_NAVBAR_WIDTH = 60; export const HASURA_BLUE = '#3970FD'; export const APP_SHELL_ID = 'hasura-app-shell'; -export const FONT_SIZE = 14; + export const MAX_CONTENT_WIDTH = 1280; export const CONTENT_PADDING: MantineSpacing = 'md'; export const CONTENT_MARGIN: MantineSpacing = 'md'; diff --git a/frontend/packages/ui/core/acceptable-list/AcceptableList.stories.tsx b/frontend/packages/ui/core/acceptable-list/AcceptableList.stories.tsx index ca7096a..3ddc7b5 100644 --- a/frontend/packages/ui/core/acceptable-list/AcceptableList.stories.tsx +++ b/frontend/packages/ui/core/acceptable-list/AcceptableList.stories.tsx @@ -38,9 +38,7 @@ const args: StoryObj>['args'] = { decliningIds: [], // @ts-ignore getItemId: item => item.id, - acceptAllButton: { - onClick: action('acceptAll'), - }, + onAcceptAll: action('onAcceptAll'), // @ts-ignore renderItemDetail: item => { return
{item.label}
; diff --git a/frontend/packages/ui/core/acceptable-list/AcceptableList.tsx b/frontend/packages/ui/core/acceptable-list/AcceptableList.tsx index 7f5df36..2acdd86 100644 --- a/frontend/packages/ui/core/acceptable-list/AcceptableList.tsx +++ b/frontend/packages/ui/core/acceptable-list/AcceptableList.tsx @@ -19,6 +19,7 @@ export function AcceptableList({ items, onAccept, onDecline, + onAcceptAll, acceptingAll, acceptAllButton, acceptingIds, @@ -30,20 +31,21 @@ export function AcceptableList({ }: AcceptableListProps) { return ( - {acceptAllButton && ( + {onAcceptAll && ( <> diff --git a/frontend/packages/ui/core/acceptable-list/types.ts b/frontend/packages/ui/core/acceptable-list/types.ts index 36871c8..9c02f13 100644 --- a/frontend/packages/ui/core/acceptable-list/types.ts +++ b/frontend/packages/ui/core/acceptable-list/types.ts @@ -19,9 +19,9 @@ export type AcceptableListProps = { acceptingAll: boolean; // do not allow loader customization, but otherwise allow customization acceptAllButton?: Omit & { - onClick: () => void; label?: string; }; + onAcceptAll: () => void; acceptingIds: string[]; decliningIds: string[]; getItemId: (item: ItemType) => string; diff --git a/frontend/packages/ui/core/animated-border-box/AnimatedBorderBox.tsx b/frontend/packages/ui/core/animated-border-box/AnimatedBorderBox.tsx new file mode 100644 index 0000000..034301e --- /dev/null +++ b/frontend/packages/ui/core/animated-border-box/AnimatedBorderBox.tsx @@ -0,0 +1,92 @@ +/* eslint-disable react/no-danger */ +import React from 'react'; +import { Paper, PaperProps } from '@mantine/core'; + +import { ExtendedCustomColors } from '@/types'; + +export type AnimatedBorderProps = { + primaryColor?: ExtendedCustomColors; + secondaryColor?: ExtendedCustomColors; + shade?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; +}; + +const css = (props?: AnimatedBorderProps): TrustedHTML => { + const { + primaryColor = 'indigo', + secondaryColor = 'pink', + shade = 3, + } = props ?? {}; + + const css = ` + /*test */ +.animated-border-box { + --border-angle: 0turn; + --main-bg: conic-gradient( + from var(--border-angle), + var(--mantine-color-background-1), + var(--mantine-color-background-1) 5%, + var(--mantine-color-background-2) 60%, + var(--mantine-color-background-3) 95% + ); + + --gradient-border: conic-gradient( + from var(--border-angle), + transparent 25%, + light-dark(var(--mantine-color-${primaryColor}-${shade}), var(--mantine-color-${primaryColor}-${shade})), + light-dark(var(--mantine-color-${secondaryColor}-${shade - 1}), var(--mantine-color-${secondaryColor}-${shade - 1})) 99%, + transparent + ); + + background: + var(--main-bg) padding-box, + var(--gradient-border) border-box, + var(--main-bg) border-box; + + background-position: center center; + + animation: bg-spin 4s linear infinite; +} + +@keyframes bg-spin { + to { + --border-angle: 1turn; + } +} + +.animated-border-box:hover { + animation-play-state: paused; +} + +@property --border-angle { + syntax: ''; + inherits: true; + initial-value: 0turn; +} +`; + + return css; +}; + +export const AnimatedBorderBox = ({ + children, + animationProps, + ...props +}: { + children: React.ReactNode; + animationProps?: AnimatedBorderProps; +} & PaperProps) => { + return ( + <> +