diff --git a/assets/package.json b/assets/package.json index c44d720253..c2c61b85ad 100644 --- a/assets/package.json +++ b/assets/package.json @@ -7,7 +7,7 @@ "start": "vite", "start:dev": "BASE_URL=console.plrl-dev-aws.onplural.sh yarn start", "start:cd": "BASE_URL=console.boot-aws.onplural.sh yarn start", - "start:prod": "yarn build && BASE_URL=console.plrl-dev-aws.onplural.sh vite preview", + "start:prod": "VITE_PROD_SECRET_KEY=1234567890 vite build && BASE_URL=console.boot-aws.onplural.sh vite preview", "build": "tsc --build && vite build", "test": "vitest --run", "test:watch": "vitest", @@ -49,7 +49,7 @@ "@nivo/radial-bar": "0.88.0", "@nivo/tooltip": "0.88.0", "@nivo/treemap": "0.88.0", - "@pluralsh/design-system": "5.7.0", + "@pluralsh/design-system": "5.7.1", "@react-hooks-library/core": "0.6.0", "@saas-ui/use-hotkeys": "1.1.3", "@tanstack/react-table": "8.20.5", diff --git a/assets/src/components/cd/cluster/node/NodeEvents.tsx b/assets/src/components/cd/cluster/node/NodeEvents.tsx index fb441a2935..bfb2e18352 100644 --- a/assets/src/components/cd/cluster/node/NodeEvents.tsx +++ b/assets/src/components/cd/cluster/node/NodeEvents.tsx @@ -1,6 +1,6 @@ -import { useOutletContext } from 'react-router-dom' -import { Flex } from 'honorable' +import { Flex } from '@pluralsh/design-system' import LoadingIndicator from 'components/utils/LoadingIndicator' +import { useOutletContext } from 'react-router-dom' import { Node } from 'generated/graphql' diff --git a/assets/src/components/cd/cluster/node/NodeMetadata.tsx b/assets/src/components/cd/cluster/node/NodeMetadata.tsx index dab69459d2..c91488325c 100644 --- a/assets/src/components/cd/cluster/node/NodeMetadata.tsx +++ b/assets/src/components/cd/cluster/node/NodeMetadata.tsx @@ -1,12 +1,12 @@ -import { useOutletContext } from 'react-router-dom' -import { Flex } from 'honorable' +import { Flex } from '@pluralsh/design-system' +import LoadingIndicator from 'components/utils/LoadingIndicator' +import { MetadataGrid, MetadataItem } from 'components/utils/Metadata' import { Node } from 'generated/graphql' +import { useOutletContext } from 'react-router-dom' import { nodeStatusToReadiness } from 'utils/status' -import { MetadataGrid, MetadataItem } from 'components/utils/Metadata' -import LoadingIndicator from 'components/utils/LoadingIndicator' -import { StatusChip } from '../../../cluster/TableElements' import { LabelsAnnotations } from '../../../cluster/LabelsAnnotations' +import { StatusChip } from '../../../cluster/TableElements' export default function NodeMetadata() { const { node } = useOutletContext() as { node: Node } diff --git a/assets/src/components/cd/cluster/node/NodeRaw.tsx b/assets/src/components/cd/cluster/node/NodeRaw.tsx index 722935d292..d143bf0415 100644 --- a/assets/src/components/cd/cluster/node/NodeRaw.tsx +++ b/assets/src/components/cd/cluster/node/NodeRaw.tsx @@ -1,7 +1,7 @@ +import { Flex } from '@pluralsh/design-system' +import LoadingIndicator from 'components/utils/LoadingIndicator' import { useOutletContext } from 'react-router-dom' import { stringify } from 'yaml' -import { Flex } from 'honorable' -import LoadingIndicator from 'components/utils/LoadingIndicator' import { Node } from '../../../../generated/graphql' import { RawPageCode } from '../../../utils/RawPageCode.tsx' diff --git a/assets/src/components/cd/cluster/pod/Pod.tsx b/assets/src/components/cd/cluster/pod/Pod.tsx index ba11d5d400..011e7ae47c 100644 --- a/assets/src/components/cd/cluster/pod/Pod.tsx +++ b/assets/src/components/cd/cluster/pod/Pod.tsx @@ -120,7 +120,7 @@ export default function Pod() { } + as={} stateRef={tabStateRef} > diff --git a/assets/src/components/cd/cluster/pod/PodContainers.tsx b/assets/src/components/cd/cluster/pod/PodContainers.tsx index 58c5b31193..87fc6da691 100644 --- a/assets/src/components/cd/cluster/pod/PodContainers.tsx +++ b/assets/src/components/cd/cluster/pod/PodContainers.tsx @@ -1,6 +1,7 @@ import { Chip, CollapseIcon, + Flex, IconFrame, Prop, Table, @@ -11,18 +12,18 @@ import { createColumnHelper, Row } from '@tanstack/react-table' import { UnstyledLink } from 'components/utils/Link' import { filesize } from 'filesize' import { Container, ContainerStatus, Maybe, Port } from 'generated/graphql' -import { Flex, Span } from 'honorable' +import { Span } from 'honorable' import { ComponentProps, CSSProperties, useMemo } from 'react' import { useNavigate } from 'react-router-dom' import styled, { useTheme } from 'styled-components' import { cpuParser, memoryParser } from 'utils/kubernetes' import { + containerStatusToReadiness, Readiness, ReadinessT, - containerStatusToReadiness, + readinessToContainerLabel, readinessToLabel, readinessToSeverity, - readinessToContainerLabel, } from 'utils/status' import { Overline } from 'components/cd/utils/PermissionsModal.tsx' diff --git a/assets/src/components/cd/cluster/pod/PodInfo.tsx b/assets/src/components/cd/cluster/pod/PodInfo.tsx index b42f500e90..af0b0ab2c3 100644 --- a/assets/src/components/cd/cluster/pod/PodInfo.tsx +++ b/assets/src/components/cd/cluster/pod/PodInfo.tsx @@ -1,27 +1,27 @@ -import { Link, useOutletContext, useParams } from 'react-router-dom' -import { Flex } from 'honorable' +import { Button, Flex, LogsIcon } from '@pluralsh/design-system' import { ScrollablePage } from 'components/utils/layout/ScrollablePage' import { ContainerStatus, Maybe, Pod } from 'generated/graphql' -import { Button, LogsIcon } from '@pluralsh/design-system' +import { Link, useOutletContext, useParams } from 'react-router-dom' import { SubTitle } from '../../../utils/SubTitle' -import { Readiness } from '../../../../utils/status' import { getServicePodDetailsPath } from '../../../../routes/cdRoutesConsts' +import { Readiness } from '../../../../utils/status' import { PodConditions } from './PodConditions.tsx' -import { PodMetadata } from './PodMetadata.tsx' import { ColCpuReservation, + ColExpander, ColImage, ColMemoryReservation, ColName, ColPorts, ColStatus, - ShellLink, columnHelper, - ColExpander, PodContainers, + ShellLink, } from './PodContainers.tsx' +import { PodMetadata } from './PodMetadata.tsx' +import { useTheme } from 'styled-components' export const statusesToRecord = (statuses?: Maybe[]>) => (statuses || []).reduce( @@ -94,6 +94,7 @@ const columns = [ // It's used by multiple routes. export default function PodInfo() { + const { spacing } = useTheme() const { clusterId, serviceId } = useParams() const { pod } = useOutletContext() as { pod: Pod } const containers = pod.spec.containers || [] @@ -112,7 +113,7 @@ export default function PodInfo() {
Containers diff --git a/assets/src/components/cd/cluster/pod/PodMetadata.tsx b/assets/src/components/cd/cluster/pod/PodMetadata.tsx index b259ad8c92..4746a1f89e 100644 --- a/assets/src/components/cd/cluster/pod/PodMetadata.tsx +++ b/assets/src/components/cd/cluster/pod/PodMetadata.tsx @@ -1,9 +1,7 @@ -import { Card } from '@pluralsh/design-system' +import { Card, Flex } from '@pluralsh/design-system' -import { Flex } from 'honorable' - -import { Pod } from 'generated/graphql' import { LabelPairsSection } from 'components/utils/LabelPairsSection' +import { Pod } from 'generated/graphql' import { useTheme } from 'styled-components' diff --git a/assets/src/components/cd/logs/LogsInfoPanel.tsx b/assets/src/components/cd/logs/LogsInfoPanel.tsx index 395e597ad8..998028f19b 100644 --- a/assets/src/components/cd/logs/LogsInfoPanel.tsx +++ b/assets/src/components/cd/logs/LogsInfoPanel.tsx @@ -1,5 +1,5 @@ -import { CloseIcon, Modal } from '@pluralsh/design-system' -import { Div, Flex, Span } from 'honorable' +import { CloseIcon, Flex, Modal } from '@pluralsh/design-system' +import { Div, Span } from 'honorable' export function LogsInfoPanel({ title, diff --git a/assets/src/components/cd/services/service/pod/Pod.tsx b/assets/src/components/cd/services/service/pod/Pod.tsx index 7277c6bcda..48583dafa8 100644 --- a/assets/src/components/cd/services/service/pod/Pod.tsx +++ b/assets/src/components/cd/services/service/pod/Pod.tsx @@ -130,7 +130,7 @@ export default function Pod() { } + as={} stateRef={tabStateRef} > diff --git a/assets/src/components/cluster/ContainerStatuses.tsx b/assets/src/components/cluster/ContainerStatuses.tsx index 323e2de521..ff1a3fbee8 100644 --- a/assets/src/components/cluster/ContainerStatuses.tsx +++ b/assets/src/components/cluster/ContainerStatuses.tsx @@ -1,9 +1,9 @@ -import { Tooltip } from '@pluralsh/design-system' -import { Div, Flex, Span } from 'honorable' +import { Flex, Tooltip } from '@pluralsh/design-system' +import { Div, Span } from 'honorable' import styled from 'styled-components' import { Readiness, ReadinessT, readinessToContainerLabel } from 'utils/status' -import { ReactElement, type JSX } from 'react' +import { type JSX, ReactElement } from 'react' import { ContainerStatusT } from '../cd/cluster/pod/PodsList.tsx' const iconBaseProps = { diff --git a/assets/src/components/cluster/Gauges.tsx b/assets/src/components/cluster/Gauges.tsx index e5235d0545..576894d2ae 100644 --- a/assets/src/components/cluster/Gauges.tsx +++ b/assets/src/components/cluster/Gauges.tsx @@ -1,8 +1,8 @@ -import { ReactNode, useMemo } from 'react' import { filesize } from 'filesize' +import { ReactNode, useMemo } from 'react' import styled from 'styled-components' -import { Flex, FlexProps } from 'honorable' +import { Flex, FlexProps } from '@pluralsh/design-system' import RadialBarChart from 'components/utils/RadialBarChart' diff --git a/assets/src/components/cluster/LabelsAnnotations.tsx b/assets/src/components/cluster/LabelsAnnotations.tsx index 2cff77e104..f8cc5fd629 100644 --- a/assets/src/components/cluster/LabelsAnnotations.tsx +++ b/assets/src/components/cluster/LabelsAnnotations.tsx @@ -1,8 +1,8 @@ -import { CardProps, ChipList } from '@pluralsh/design-system' -import { Div, Flex } from 'honorable' -import { ReactNode } from 'react' -import type { LabelPair, Maybe, Metadata as MetadataT } from 'generated/graphql' +import { CardProps, ChipList, Flex } from '@pluralsh/design-system' import { CARD_CONTENT_MAX_WIDTH, MetadataCard } from 'components/utils/Metadata' +import type { LabelPair, Maybe, Metadata as MetadataT } from 'generated/graphql' +import { Div } from 'honorable' +import { ReactNode } from 'react' import { useTheme } from 'styled-components' export const mapify = (tags) => diff --git a/assets/src/components/cluster/TableElements.tsx b/assets/src/components/cluster/TableElements.tsx index 4f0de493fd..f1e2a4153c 100644 --- a/assets/src/components/cluster/TableElements.tsx +++ b/assets/src/components/cluster/TableElements.tsx @@ -2,15 +2,15 @@ import { AppIcon, CaretRightIcon, Chip, - IconFrame, ChipProps, + Flex, + IconFrame, } from '@pluralsh/design-system' import { SortingFn } from '@tanstack/table-core' import { UnstyledLink } from 'components/utils/Link' import { Maybe } from 'generated/graphql' -import { Flex } from 'honorable' import { ComponentProps, ReactNode } from 'react' -import styled, { useTheme } from 'styled-components' +import styled from 'styled-components' import { PhaseT, phaseToSeverity, @@ -151,11 +151,9 @@ export function LabelWithIcon({ label?: Maybe icon?: Maybe }) { - const theme = useTheme() - return ( {icon && ( diff --git a/assets/src/components/cluster/containers/ContainerShell.tsx b/assets/src/components/cluster/containers/ContainerShell.tsx index ef428b70f0..22e9aa8dbb 100644 --- a/assets/src/components/cluster/containers/ContainerShell.tsx +++ b/assets/src/components/cluster/containers/ContainerShell.tsx @@ -1,6 +1,6 @@ -import { Button, ToolIcon, Tooltip } from '@pluralsh/design-system' +import { Button, Flex, ToolIcon, Tooltip } from '@pluralsh/design-system' +import { Div } from 'honorable' import { useContext, useState } from 'react' -import { Div, Flex } from 'honorable' import TerminalThemeSelector from 'components/terminal/TerminalThemeSelector' diff --git a/assets/src/components/cluster/containers/ShellCommandEditor.tsx b/assets/src/components/cluster/containers/ShellCommandEditor.tsx index d90a08d349..bb9694e6e2 100644 --- a/assets/src/components/cluster/containers/ShellCommandEditor.tsx +++ b/assets/src/components/cluster/containers/ShellCommandEditor.tsx @@ -5,8 +5,8 @@ import { Input, PencilIcon, } from '@pluralsh/design-system' +import { Form } from 'honorable' import { useEffect, useRef, useState } from 'react' -import { Flex, Form } from 'honorable' import styled from 'styled-components' export const CODELINE_HEIGHT = 42 @@ -102,7 +102,7 @@ export function ShellCommandEditor({ }) { const [isEditing, setIsEditing] = useState(false) const [inputVal, setInputVal] = useState(command) - const inputWrapRef = useRef(undefined) + const inputWrapRef = useRef(null) useEffect(() => { if (!isEditing) { @@ -136,13 +136,7 @@ export function ShellCommandEditor({ flex="1 1" overflow="hidden" > - + )} - + {!isEditing && ( - )} - {editable && ( - - <> - dialogKey === '' && setDialogKey('editAttrs')} - tooltip="Edit attributes" - icon={} - /> - setDialogKey('editBindings')} - tooltip="Edit members" - icon={} - /> - setDialogKey('confirmDelete')} /> - - - )} - - <> - dialogKey === 'viewPersona' && setDialogKey('')} - persona={persona} - /> - dialogKey === 'editAttrs' && setDialogKey('')} - /> - dialogKey === 'editBindings' && setDialogKey('')} - /> - - Are you sure you want to delete the {persona.name} persona? - This could have downstream effects on a large number of users and - their personas. - - } - close={() => dialogKey === 'confirmDelete' && setDialogKey('')} - label="Delete persona" - submit={() => mutation()} - loading={loading} - destructive - error={error} - /> - + {editable ? ( + + dialogKey === '' && setDialogKey('editAttrs')} + tooltip="Edit attributes" + icon={} + /> + setDialogKey('editBindings')} + tooltip="Edit members" + icon={} + /> + setDialogKey('confirmDelete')} /> + + ) : ( + + )} + + dialogKey === 'viewPersona' && setDialogKey('')} + persona={persona} + /> + dialogKey === 'editAttrs' && setDialogKey('')} + /> + dialogKey === 'editBindings' && setDialogKey('')} + /> + + Are you sure you want to delete the {persona.name} persona? + This could have downstream effects on a large number of users and + their personas. + + } + close={() => dialogKey === 'confirmDelete' && setDialogKey('')} + label="Delete persona" + submit={() => mutation()} + loading={loading} + destructive + error={error} + /> ) } diff --git a/assets/src/components/settings/usermanagement/personas/PersonaAttributesEdit.tsx b/assets/src/components/settings/usermanagement/personas/PersonaAttributesEdit.tsx index d550e16f3e..3f3f4bcf8a 100644 --- a/assets/src/components/settings/usermanagement/personas/PersonaAttributesEdit.tsx +++ b/assets/src/components/settings/usermanagement/personas/PersonaAttributesEdit.tsx @@ -1,23 +1,12 @@ import { Button, + Flex, FormField, Input2, Modal, ValidatedInput, } from '@pluralsh/design-system' -import { - ComponentProps, - FormEventHandler, - ReactNode, - useCallback, - useEffect, - useMemo, - useState, -} from 'react' -import { Flex } from 'honorable' import { RequiredDeep } from 'type-fest' -import mergeWith from 'lodash/mergeWith' -import { useTheme } from 'styled-components' import { PersonaConfigurationAttributes, @@ -25,15 +14,27 @@ import { useUpdatePersonaMutation, } from 'generated/graphql' -import { deepOmitKey } from 'utils/deepOmitKey' -import { ModalMountTransition } from 'components/utils/ModalMountTransition' import { GqlError } from 'components/utils/Alert' -import { useUpdateState } from 'components/hooks/useUpdateState' +import { ModalMountTransition } from 'components/utils/ModalMountTransition' import { Body2P } from 'components/utils/typography/Text' +import { useUpdateState } from 'components/hooks/useUpdateState' import { PersonaConfiguration } from './PersonaConfiguration' +import { mergeWith } from 'lodash' +import { + ComponentProps, + FormEventHandler, + ReactNode, + useCallback, + useEffect, + useMemo, + useState, +} from 'react' +import { useTheme } from 'styled-components' +import { deepOmitKey } from 'utils/deepOmitKey' + const BASE_CONFIGURATION: PersonaConfigurationAttributes = { all: false, home: { diff --git a/assets/src/components/settings/usermanagement/roles/Roles.tsx b/assets/src/components/settings/usermanagement/roles/Roles.tsx index c30aecc134..8938b133a4 100644 --- a/assets/src/components/settings/usermanagement/roles/Roles.tsx +++ b/assets/src/components/settings/usermanagement/roles/Roles.tsx @@ -1,12 +1,15 @@ +import { + Flex, + Input, + SearchIcon, + useSetBreadcrumbs, +} from '@pluralsh/design-system' import BillingFeatureBlockBanner from 'components/billing/BillingFeatureBlockBanner' import BillingLegacyUserBanner from 'components/billing/BillingLegacyUserBanner' import SubscriptionContext from 'components/contexts/SubscriptionContext' import { ScrollablePage } from 'components/utils/layout/ScrollablePage' -import { Flex } from 'honorable' import { useContext, useState } from 'react' -import { Input, SearchIcon, useSetBreadcrumbs } from '@pluralsh/design-system' - import { List } from '../../../utils/List' import { getUserManagementBreadcrumbs } from '../UserManagement' diff --git a/assets/src/components/settings/usermanagement/webhooks/Webhook.tsx b/assets/src/components/settings/usermanagement/webhooks/Webhook.tsx index 92d8390b27..0c9f4b9c06 100644 --- a/assets/src/components/settings/usermanagement/webhooks/Webhook.tsx +++ b/assets/src/components/settings/usermanagement/webhooks/Webhook.tsx @@ -3,9 +3,13 @@ import { useState } from 'react' import { formatDateTime } from 'utils/datetime' -import { Div, Flex, P } from 'honorable' - -import { IconFrame, SlackLogoIcon, TrashCanIcon } from '@pluralsh/design-system' +import { + Flex, + IconFrame, + SlackLogoIcon, + TrashCanIcon, +} from '@pluralsh/design-system' +import { Div, P } from 'honorable' import { Confirm } from 'components/utils/Confirm' @@ -16,8 +20,10 @@ import { removeConnection, updateCache } from '../../../../utils/graphql' import { DELETE_WEBHOOK, WEBHOOKS_Q } from '../../../graphql/webhooks' import WebhookHealth from './WebhookHealth' +import { useTheme } from 'styled-components' export default function Webhook({ hook: { id, url, health, insertedAt } }) { + const { borders } = useTheme() const [confirm, setConfirm] = useState(false) const [mutation, { loading }] = useMutation(DELETE_WEBHOOK, { variables: { id }, @@ -33,7 +39,7 @@ export default function Webhook({ hook: { id, url, health, insertedAt } }) { return ( <> - + diff --git a/assets/src/components/stacks/run/progress/Progress.tsx b/assets/src/components/stacks/run/progress/Progress.tsx index d3064ecc86..532b8f0d7b 100644 --- a/assets/src/components/stacks/run/progress/Progress.tsx +++ b/assets/src/components/stacks/run/progress/Progress.tsx @@ -40,7 +40,6 @@ export default function StackRunProgress(): ReactNode { > diff --git a/assets/src/components/stacks/run/progress/Step.tsx b/assets/src/components/stacks/run/progress/Step.tsx index e73fcb86a3..b1ed74d568 100644 --- a/assets/src/components/stacks/run/progress/Step.tsx +++ b/assets/src/components/stacks/run/progress/Step.tsx @@ -3,9 +3,11 @@ import { CaretRightIcon, CheckIcon, ErrorIcon, + Flex, Spinner, } from '@pluralsh/design-system' -import { Div, Flex } from 'honorable' +import { Div } from 'honorable' +import sortBy from 'lodash/sortBy' import { ReactNode, useCallback, @@ -14,7 +16,6 @@ import { useRef, useState, } from 'react' -import sortBy from 'lodash/sortBy' import { RunLogs, @@ -23,6 +24,7 @@ import { useLogsDeltaSubscription, } from '../../../../generated/graphql' import CommandLog from '../../../utils/CommandLog.tsx' +import styled from 'styled-components' interface StepProps { step: RunStep @@ -70,20 +72,8 @@ export default function Step({ step, open }: StepProps): ReactNode { return (
- 0 ? 'fill-two-hover' : 'none', - }} - css={{ - position: 'sticky', - top: 0, - cursor: logs.length > 0 ? 'pointer' : 'cursor', - }} + 0} onClick={() => logs.length > 0 && setFolded(!(folded ?? !open))} > {command} - + {show && ( (({ theme, $hasLogs }) => ({ + display: 'flex', + justifyContent: 'space-between', + gap: theme.spacing.small, + fontFamily: 'Monument Mono', + padding: `${theme.spacing.xsmall}px ${theme.spacing.large}px`, + backgroundColor: theme.colors['fill-two'], + '&:hover': { + backgroundColor: $hasLogs ? theme.colors['fill-two-hover'] : 'none', + }, + position: 'sticky', + top: 0, + cursor: $hasLogs ? 'pointer' : 'cursor', +})) diff --git a/assets/src/components/terminal/Terminal.tsx b/assets/src/components/terminal/Terminal.tsx index 4f65fc9516..9d01ed5fa8 100644 --- a/assets/src/components/terminal/Terminal.tsx +++ b/assets/src/components/terminal/Terminal.tsx @@ -1,7 +1,7 @@ import 'xterm/css/xterm.css' import { - MutableRefObject, + RefObject, createContext, useCallback, useContext, @@ -187,6 +187,6 @@ export function TerminalScreen({ } export type TerminalActions = { handleResetSize: () => void } -export const ShellContext = createContext>({ +export const ShellContext = createContext>({ current: { handleResetSize: () => {} }, }) diff --git a/assets/src/components/terminal/TerminalThemeSelector.tsx b/assets/src/components/terminal/TerminalThemeSelector.tsx index d9da87606d..e29b8c1922 100644 --- a/assets/src/components/terminal/TerminalThemeSelector.tsx +++ b/assets/src/components/terminal/TerminalThemeSelector.tsx @@ -1,19 +1,19 @@ -import { useContext, useState } from 'react' -import { Flex } from 'honorable' -import Fuse from 'fuse.js' - import { + Flex, + FlexProps, Input, ListBoxItem, MagnifyingGlassIcon, Select, SprayIcon, } from '@pluralsh/design-system' +import Fuse from 'fuse.js' +import { useContext, useState } from 'react' import { HeaderIconButton } from 'components/cluster/containers/ContainerShell' -import { normalizedThemes, themeNames } from './themes' import TerminalThemeContext from './TerminalThemeContext' +import { normalizedThemes, themeNames } from './themes' const fuse = new Fuse(themeNames, { threshold: 0.25 }) @@ -61,19 +61,17 @@ function TerminalThemeSelector() { key={t} label={t} textValue={t} - leftContent={ - - } + leftContent={} /> ))} ) } -function TerminalThemePreview({ theme, ...props }: any) { +function TerminalThemePreview({ + theme, + ...props +}: { theme: object } & FlexProps) { return ( {Object.entries(theme).map(([key, hex]) => ( diff --git a/assets/src/components/utils/CommandLog.tsx b/assets/src/components/utils/CommandLog.tsx index c3f2c5171d..525c66980a 100644 --- a/assets/src/components/utils/CommandLog.tsx +++ b/assets/src/components/utils/CommandLog.tsx @@ -1,8 +1,10 @@ +import { Flex } from '@pluralsh/design-system' import { ansiToJson } from 'anser' import { textStyle } from 'components/utils/AnsiText' import escapeCarriageReturn from 'escape-carriage' -import { Flex, Span } from 'honorable' +import { Span } from 'honorable' import { useEffect, useMemo, useRef } from 'react' +import styled, { useTheme } from 'styled-components' function CommandLogLine({ line, number, follow }) { const mounted = useRef(undefined) @@ -24,14 +26,7 @@ function CommandLogLine({ line, number, follow }) { }, [follow, lineRef, line]) return ( - + ))} - + ) } export default function CommandLog({ text, follow }) { + const { spacing } = useTheme() if (!text) return null const lines = text.match(/[^\r\n]+/g) @@ -59,7 +55,9 @@ export default function CommandLog({ text, follow }) { return ( {lines.map((line, i) => ( @@ -73,3 +71,14 @@ export default function CommandLog({ text, follow }) { ) } + +const LineWrapperSC = styled.div(({ theme }) => ({ + display: 'flex', + alignItems: 'center', + color: theme.colors['text-light'], + gap: theme.spacing.medium, + paddingLeft: theme.spacing.medium, + '&:hover': { + backgroundColor: theme.colors['fill-one-hover'], + }, +})) diff --git a/assets/src/components/utils/FractionalChip.tsx b/assets/src/components/utils/FractionalChip.tsx index bea54d8227..2d8cdc3b9a 100644 --- a/assets/src/components/utils/FractionalChip.tsx +++ b/assets/src/components/utils/FractionalChip.tsx @@ -1,5 +1,4 @@ -import { Flex } from 'honorable' -import { Chip } from '@pluralsh/design-system' +import { Chip, Flex } from '@pluralsh/design-system' interface FractionalChipProps { label?: string diff --git a/assets/src/components/utils/Metadata.tsx b/assets/src/components/utils/Metadata.tsx index 4a2c60fce3..86c068edb0 100644 --- a/assets/src/components/utils/Metadata.tsx +++ b/assets/src/components/utils/Metadata.tsx @@ -1,6 +1,6 @@ -import { Card, type Sidecar } from '@pluralsh/design-system' -import { CardProps, Div, Flex, H2 } from 'honorable' -import { Children, ComponentProps, forwardRef } from 'react' +import { Card, Flex, FlexProps, SidecarProps } from '@pluralsh/design-system' +import { CardProps, Div, H2 } from 'honorable' +import { Children } from 'react' import styled from 'styled-components' import { makeGrid } from 'utils/makeGrid' @@ -51,35 +51,39 @@ export function MetadataGrid(props) { ) } -export const MetadataItem = forwardRef< - HTMLDivElement, - ComponentProps ->(({ heading, headingProps, contentProps, children, ...props }, ref) => ( - - {heading && ( -

- {heading} -

- )} - {children && ( -
- {children} -
- )} -
-)) +export function MetadataItem({ + heading, + headingProps, + contentProps, + children, + ...props +}: SidecarProps & FlexProps) { + return ( + + {heading && ( +

+ {heading} +

+ )} + {children && ( +
+ {children} +
+ )} +
+ ) +} diff --git a/assets/src/components/utils/layout/ConsolePageTitle.tsx b/assets/src/components/utils/layout/ConsolePageTitle.tsx index 722c4321ae..026f6d0cba 100644 --- a/assets/src/components/utils/layout/ConsolePageTitle.tsx +++ b/assets/src/components/utils/layout/ConsolePageTitle.tsx @@ -1,34 +1,39 @@ -import { DivProps, Flex, FlexProps, H1 } from 'honorable' -import { ReactNode, forwardRef } from 'react' +import { DivProps, H1 } from 'honorable' +import { ComponentPropsWithRef, ReactNode } from 'react' +import styled from 'styled-components' export type PageTitleProps = { heading?: ReactNode headingProps?: DivProps -} & FlexProps +} & ComponentPropsWithRef -const ConsolePageTitle = forwardRef( - ({ heading, headingProps = {}, children, ...props }, ref) => ( - +export default function ConsolePageTitle({ + heading, + headingProps = {}, + children, + ...props +}: PageTitleProps) { + return ( + {heading && (

{heading}

)} {children} -
+ ) -) +} -export default ConsolePageTitle +const WrapperSC = styled.div(({ theme }) => ({ + display: 'flex', + gap: theme.spacing.large, + alignItems: 'center', + justifyContent: 'space-between', + position: 'relative', + minHeight: 40, +})) diff --git a/assets/src/components/utils/layout/ResponsiveLayoutContentContainer.tsx b/assets/src/components/utils/layout/ResponsiveLayoutContentContainer.tsx index 487c807e87..94f2ac74c9 100644 --- a/assets/src/components/utils/layout/ResponsiveLayoutContentContainer.tsx +++ b/assets/src/components/utils/layout/ResponsiveLayoutContentContainer.tsx @@ -1,22 +1,16 @@ -import { Flex, FlexProps } from 'honorable' +import styled from 'styled-components' export const RESPONSIVE_LAYOUT_CONTENT_WIDTH = 896 -export function ResponsiveLayoutContentContainer({ ref, ...props }: FlexProps) { - return ( - - ) -} +export const ResponsiveLayoutContentContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + flexGrow: 1, + flexShrink: 1, + height: '100%', + maxHeight: '100%', + width: RESPONSIVE_LAYOUT_CONTENT_WIDTH, + maxWidth: RESPONSIVE_LAYOUT_CONTENT_WIDTH, + overflowY: 'auto', + overflowX: 'hidden', +}) diff --git a/assets/src/components/utils/layout/ScrollablePage.tsx b/assets/src/components/utils/layout/ScrollablePage.tsx index 7a6f49c6c3..b0e7343404 100644 --- a/assets/src/components/utils/layout/ScrollablePage.tsx +++ b/assets/src/components/utils/layout/ScrollablePage.tsx @@ -1,8 +1,8 @@ -import { Div, FlexProps } from 'honorable' +import { Div } from 'honorable' import { ReactNode, RefObject } from 'react' import styled, { CSSProperties } from 'styled-components' -import ConsolePageTitle from './ConsolePageTitle' +import ConsolePageTitle, { PageTitleProps } from './ConsolePageTitle' const ScrollablePageContent = styled.div<{ $scrollable?: boolean @@ -81,7 +81,7 @@ export function ScrollablePage({ fullWidth?: boolean scrollRef?: RefObject noPadding?: boolean -} & FlexProps) { +} & PageTitleProps) { return ( <> {(heading || headingContent) && ( diff --git a/assets/yarn.lock b/assets/yarn.lock index 29e6e0a3ea..3b1d1113d0 100644 --- a/assets/yarn.lock +++ b/assets/yarn.lock @@ -4395,9 +4395,9 @@ __metadata: languageName: node linkType: hard -"@pluralsh/design-system@npm:5.7.0": - version: 5.7.0 - resolution: "@pluralsh/design-system@npm:5.7.0" +"@pluralsh/design-system@npm:5.7.1": + version: 5.7.1 + resolution: "@pluralsh/design-system@npm:5.7.1" dependencies: "@floating-ui/react-dom-interactions": 0.13.3 "@loomhq/loom-embed": 1.5.0 @@ -4442,7 +4442,7 @@ __metadata: react-dom: ">=19.0.0" react-transition-group: ">=4.4.5" styled-components: ">=6.1.15" - checksum: 774d7193c25ef7f0d147fe6c0f596d4e59639ea510c275a839f934d36541bd8c701c5e383e5a9efbe6b70aa416ec5c8875086393c1828bea98fcbd080c7243eb + checksum: fb53af6c0aed2c2ac5da1010e188abda6304f54be8635418c83942a04dffd979e5ab42b2c95c8c54dd6c8cfc523d25641c8697bc9419119de7d5d21eb440d9aa languageName: node linkType: hard @@ -10355,7 +10355,7 @@ __metadata: "@nivo/radial-bar": 0.88.0 "@nivo/tooltip": 0.88.0 "@nivo/treemap": 0.88.0 - "@pluralsh/design-system": 5.7.0 + "@pluralsh/design-system": 5.7.1 "@pluralsh/eslint-config-typescript": 2.5.150 "@pluralsh/stylelint-config": 2.0.10 "@react-hooks-library/core": 0.6.0