void;
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx
index 8395ece6840..2199037af5e 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx
@@ -34,7 +34,7 @@ describe('Linode Create Addons', () => {
});
await findByText(
- 'Backups and Private IP are currently not available for distributed regions.'
+ 'Backups and Private IP are not available for distributed regions.'
);
});
});
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx
index ccf023632dc..c8ce1609339 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx
@@ -1,10 +1,7 @@
+import { Divider, Notice, Paper, Stack } from '@linode/ui';
import React, { useMemo } from 'react';
import { useWatch } from 'react-hook-form';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useRegionsQuery } from 'src/queries/regions/regions';
@@ -32,7 +29,7 @@ export const Addons = () => {
Add-ons
{isDistributedRegionSelected && (
)}
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.tsx
index ee213c28063..7cd4de48dcd 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Backups.tsx
@@ -1,3 +1,4 @@
+import { Notice, Stack } from '@linode/ui';
import React, { useMemo } from 'react';
import { useController, useFormContext, useWatch } from 'react-hook-form';
@@ -6,8 +7,6 @@ import { Currency } from 'src/components/Currency';
import { DISK_ENCRYPTION_BACKUPS_CAVEAT_COPY } from 'src/components/Encryption/constants';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { useAccountSettings } from 'src/queries/account/settings';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx
index d13be07239d..742784a531e 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx
@@ -1,9 +1,9 @@
+import { Stack } from '@linode/ui';
import React, { useMemo } from 'react';
import { useController, useWatch } from 'react-hook-form';
import { Checkbox } from 'src/components/Checkbox';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { useRegionsQuery } from 'src/queries/regions/regions';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.tsx b/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.tsx
index 7db562deec7..1cf226c61b6 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/EUAgreement.tsx
@@ -1,9 +1,7 @@
+import { Notice, Paper, Stack } from '@linode/ui';
import React from 'react';
import { useController, useWatch } from 'react-hook-form';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { EUAgreementCheckbox } from 'src/features/Account/Agreements/EUAgreementCheckbox';
import { useAccountAgreements } from 'src/queries/account/agreements';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Error.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Error.tsx
index 8b75dc5a0bd..a179493359c 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Error.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Error.tsx
@@ -1,9 +1,8 @@
+import { Notice, Paper } from '@linode/ui';
import React from 'react';
import { useFormContext } from 'react-hook-form';
import { ErrorMessage } from 'src/components/ErrorMessage';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import type { CreateLinodeRequest } from '@linode/api-v4';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Firewall.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Firewall.tsx
index 013ef0e613e..77699ddf205 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Firewall.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Firewall.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import React, { useState } from 'react';
import { useController, useFormContext } from 'react-hook-form';
@@ -7,8 +7,6 @@ import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { GenerateFirewallDialog } from 'src/components/GenerateFirewallDialog/GenerateFirewallDialog';
import { Link } from 'src/components/Link';
import { LinkButton } from 'src/components/LinkButton';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { FIREWALL_GET_STARTED_LINK } from 'src/constants';
import { CreateFirewallDrawer } from 'src/features/Firewalls/FirewallLanding/CreateFirewallDrawer';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx
index 84d57ffd506..3b046e613aa 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice, Paper } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react';
import { useController, useFormContext, useWatch } from 'react-hook-form';
@@ -6,8 +6,6 @@ import { useController, useFormContext, useWatch } from 'react-hook-form';
import { DocsLink } from 'src/components/DocsLink/DocsLink';
import { useIsDiskEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
import {
isDistributedRegionSupported,
@@ -76,7 +74,7 @@ export const Region = React.memo(() => {
const { data: type } = useTypeQuery(
selectedLinode?.type ?? '',
- Boolean(selectedLinode)
+ Boolean(selectedLinode?.type)
);
const isLinodeCreateRestricted = useRestrictedGlobalGrantCheck({
@@ -85,7 +83,7 @@ export const Region = React.memo(() => {
const { data: regions } = useRegionsQuery();
- const { isGeckoBetaEnabled, isGeckoLAEnabled } = useIsGeckoEnabled();
+ const { isGeckoLAEnabled } = useIsGeckoEnabled();
const showTwoStepRegion =
isGeckoLAEnabled && isDistributedRegionSupported(params.type ?? 'OS');
@@ -177,10 +175,6 @@ export const Region = React.memo(() => {
!flags.gecko2?.enabled ||
!isDistributedRegionSupported(params.type ?? 'OS');
- const showDistributedRegionIconHelperText =
- isGeckoBetaEnabled && !hideDistributedRegions;
- regions?.some((region) => region.site_type === 'distributed');
-
const disabledRegions = getDisabledRegions({
regions: regions ?? [],
selectedImage: image,
@@ -195,9 +189,6 @@ export const Region = React.memo(() => {
? 'core'
: undefined
}
- showDistributedRegionIconHelperText={
- showDistributedRegionIconHelperText
- }
disabled={isLinodeCreateRestricted}
disabledRegions={disabledRegions}
errorText={fieldState.error?.message}
@@ -241,9 +232,6 @@ export const Region = React.memo(() => {
? 'core'
: undefined
}
- showDistributedRegionIconHelperText={
- showDistributedRegionIconHelperText
- }
currentCapability="Linodes"
disableClearable
disabled={isLinodeCreateRestricted}
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts
index cf81a46a69f..52bbf1b35d9 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.utils.ts
@@ -1,5 +1,5 @@
import type { Image, Region } from '@linode/api-v4';
-import type { DisableRegionOption } from 'src/components/RegionSelect/RegionSelect.types';
+import type { DisableItemOption } from 'src/components/ListItemOption';
interface DisabledRegionOptions {
regions: Region[];
@@ -21,7 +21,7 @@ export const getDisabledRegions = (options: DisabledRegionOptions) => {
selectedImage &&
!selectedImage.capabilities.includes('distributed-sites')
) {
- const disabledRegions: Record = {};
+ const disabledRegions: Record = {};
for (const region of regions) {
if (region.site_type === 'distributed') {
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx
index bd4a2e76c84..10706d4a054 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx
@@ -1,8 +1,8 @@
+import { Divider } from '@linode/ui';
import React from 'react';
import { Controller, useFormContext, useWatch } from 'react-hook-form';
import UserSSHKeyPanel from 'src/components/AccessPanel/UserSSHKeyPanel';
-import { Divider } from 'src/components/Divider';
import {
DISK_ENCRYPTION_DEFAULT_DISTRIBUTED_INSTANCES,
DISK_ENCRYPTION_DISTRIBUTED_DESCRIPTION,
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.tsx
index 08c1e59efab..819570f3014 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Summary/Summary.tsx
@@ -1,11 +1,9 @@
+import { Divider, Paper, Stack } from '@linode/ui';
import { useTheme } from '@mui/material';
import useMediaQuery from '@mui/material/useMediaQuery';
import React from 'react';
import { useFormContext, useWatch } from 'react-hook-form';
-import { Divider } from 'src/components/Divider';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useImageQuery } from 'src/queries/images';
import { useRegionsQuery } from 'src/queries/regions/regions';
@@ -65,7 +63,7 @@ export const Summary = () => {
getMonthlyBackupsPrice({ region: regionId, type })
);
- const price = getLinodePrice({ type, regionId, clusterSize });
+ const price = getLinodePrice({ clusterSize, regionId, type });
const summaryItems = [
{
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupSelect.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupSelect.tsx
index 20a2aa33e18..c70bfca80e6 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupSelect.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupSelect.tsx
@@ -1,14 +1,11 @@
-import { Box } from '@linode/ui';
+import { Box, Notice, Paper, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import React from 'react';
import { useController, useWatch } from 'react-hook-form';
import { DateTimeDisplay } from 'src/components/DateTimeDisplay';
import { LinearProgress } from 'src/components/LinearProgress';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { SelectionCard } from 'src/components/SelectionCard/SelectionCard';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useLinodeBackupsQuery } from 'src/queries/linodes/backups';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/Backups.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/Backups.tsx
index 4a4719157d1..487352d53cf 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/Backups.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/Backups.tsx
@@ -1,7 +1,6 @@
+import { Stack } from '@linode/ui';
import React from 'react';
-import { Stack } from 'src/components/Stack';
-
import { BackupSelect } from './BackupSelect';
import { LinodeSelect } from './LinodeSelect';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupsWarning.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupsWarning.tsx
index f06f2a2a462..d665bb04bcd 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupsWarning.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/BackupsWarning.tsx
@@ -1,8 +1,8 @@
+import { Notice } from '@linode/ui';
import { ListItem } from '@mui/material';
import React from 'react';
import { List } from 'src/components/List';
-import { Notice } from 'src/components/Notice/Notice';
export const BackupsWarning = () => {
return (
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/LinodeSelect.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/LinodeSelect.tsx
index 0636a84dddf..3485ba948e2 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/LinodeSelect.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/LinodeSelect.tsx
@@ -1,11 +1,10 @@
+import { Paper, Stack } from '@linode/ui';
import React from 'react';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
-import { BackupsWarning } from './BackupsWarning';
import { LinodeSelectTable } from '../../shared/LinodeSelectTable';
+import { BackupsWarning } from './BackupsWarning';
export const LinodeSelect = () => {
return (
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/Clone.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/Clone.tsx
index 4c7cfbfd261..d86ac000d39 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/Clone.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/Clone.tsx
@@ -1,7 +1,6 @@
+import { Paper, Stack } from '@linode/ui';
import React from 'react';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { Region } from '../../Region';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/CloneWarning.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/CloneWarning.tsx
index d9ba1436410..c3b8adcb745 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/CloneWarning.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/CloneWarning.tsx
@@ -1,8 +1,8 @@
+import { Notice } from '@linode/ui';
import { ListItem } from '@mui/material';
import React from 'react';
import { List } from 'src/components/List';
-import { Notice } from 'src/components/Notice/Notice';
export const CloneWarning = () => {
return (
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.test.tsx
index 39f06009405..4ba95eac43a 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.test.tsx
@@ -3,9 +3,6 @@ import React from 'react';
import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers';
import { Images } from './Images';
-import { HttpResponse, http, server } from 'src/mocks/testServer';
-import { imageFactory } from 'src/factories';
-import { makeResourcePage } from 'src/mocks/serverHandlers';
describe('Images', () => {
it('renders a header', () => {
@@ -30,27 +27,4 @@ describe('Images', () => {
expect(getByLabelText('Images')).toBeVisible();
expect(getByPlaceholderText('Choose an image')).toBeVisible();
});
-
- it('renders a "Indicates compatibility with distributed compute regions." notice if the user has at least one image with the distributed capability', async () => {
- server.use(
- http.get('*/v4/images', () => {
- const images = [
- imageFactory.build({ capabilities: [] }),
- imageFactory.build({ capabilities: ['distributed-sites'] }),
- imageFactory.build({ capabilities: [] }),
- ];
- return HttpResponse.json(makeResourcePage(images));
- })
- );
-
- const { findByText } = renderWithThemeAndHookFormContext({
- component: ,
- });
-
- expect(
- await findByText(
- 'Indicates compatibility with distributed compute regions.'
- )
- ).toBeVisible();
- });
});
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.tsx
index be608ee1192..ceea612f1aa 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Images.tsx
@@ -1,16 +1,13 @@
-import { Box } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react';
import { useController, useFormContext, useWatch } from 'react-hook-form';
-import DistributedRegionIcon from 'src/assets/icons/entityIcons/distributed-region.svg';
import ImageIcon from 'src/assets/icons/entityIcons/image.svg';
import { ImageSelect } from 'src/components/ImageSelect/ImageSelect';
import { getAPIFilterForImageSelect } from 'src/components/ImageSelect/utilities';
import { Link } from 'src/components/Link';
-import { Paper } from '@linode/ui';
import { Placeholder } from 'src/components/Placeholder/Placeholder';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { useAllImagesQuery } from 'src/queries/images';
@@ -45,11 +42,11 @@ export const Images = () => {
const { data: regions } = useRegionsQuery();
+ const selectedRegion = regions?.find((r) => r.id === regionId);
+
const onChange = async (image: Image | null) => {
field.onChange(image?.id ?? null);
- const selectedRegion = regions?.find((r) => r.id === regionId);
-
// Non-"distributed compatible" Images must only be deployed to core sites.
// Clear the region field if the currently selected region is a distributed site and the Image is only core compatible.
// @todo: delete this logic when all Images are "distributed compatible"
@@ -76,11 +73,6 @@ export const Images = () => {
getAPIFilterForImageSelect('private')
);
- // @todo: delete this logic when all Images are "distributed compatible"
- const showDistributedCapabilityNotice = images?.some((image) =>
- image.capabilities.includes('distributed-sites')
- );
-
if (images?.length === 0) {
return (
@@ -106,18 +98,11 @@ export const Images = () => {
errorText={fieldState.error?.message}
onBlur={field.onBlur}
onChange={onChange}
+ siteType={selectedRegion?.site_type}
sx={{ width: '416px' }}
value={field.value ?? null}
variant="private"
/>
- {showDistributedCapabilityNotice && (
-
-
-
- Indicates compatibility with distributed compute regions.
-
-
- )}
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSection.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSection.tsx
index 26d1a8c098e..75afc4d25a6 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSection.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSection.tsx
@@ -1,8 +1,7 @@
+import { Divider, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import React from 'react';
-import { Divider } from 'src/components/Divider';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { AppSelectionCard } from './AppSelectionCard';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSelect.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSelect.tsx
index cf463f1ce10..227fc43dfe2 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSelect.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppSelect.tsx
@@ -1,12 +1,9 @@
-import { Box } from '@linode/ui';
+import { Box, Notice, Paper, Stack } from '@linode/ui';
import React, { useState } from 'react';
import { useFormContext } from 'react-hook-form';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { DebouncedSearchTextField } from 'src/components/DebouncedSearchTextField';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useMarketplaceAppsQuery } from 'src/queries/stackscripts';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppsList.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppsList.tsx
index 6874de8d953..72c79975c06 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppsList.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/AppsList.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react';
@@ -6,7 +6,6 @@ import { useController, useFormContext } from 'react-hook-form';
import { CircleProgress } from 'src/components/CircleProgress';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
-import { Stack } from 'src/components/Stack';
import { getGeneratedLinodeLabel } from '../../utilities';
import { getDefaultUDFData } from '../StackScripts/UserDefinedFields/utilities';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/Marketplace.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/Marketplace.tsx
index 2cb93d90e0b..d249134ddd4 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/Marketplace.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/Marketplace.tsx
@@ -1,7 +1,6 @@
+import { Stack } from '@linode/ui';
import React, { useState } from 'react';
-import { Stack } from 'src/components/Stack';
-
import { Region } from '../../Region';
import { StackScriptImages } from '../StackScripts/StackScriptImages';
import { UserDefinedFields } from '../StackScripts/UserDefinedFields/UserDefinedFields';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/OperatingSystems.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/OperatingSystems.tsx
index f40539509f9..8368abb931b 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/OperatingSystems.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/OperatingSystems.tsx
@@ -1,12 +1,12 @@
-import { Paper } from '@linode/ui';
+import { Paper, Stack } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
import React from 'react';
-import { useController, useFormContext } from 'react-hook-form';
+import { useController, useFormContext, useWatch } from 'react-hook-form';
import { ImageSelect } from 'src/components/ImageSelect/ImageSelect';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
+import { useRegionQuery } from 'src/queries/regions/regions';
import { Region } from '../Region';
import { getGeneratedLinodeLabel } from '../utilities';
@@ -29,6 +29,12 @@ export const OperatingSystems = () => {
name: 'image',
});
+ const regionId = useWatch({
+ name: 'region',
+ });
+
+ const { data: region } = useRegionQuery(regionId ?? -1);
+
const isCreateLinodeRestricted = useRestrictedGlobalGrantCheck({
globalGrantType: 'add_linodes',
});
@@ -58,6 +64,7 @@ export const OperatingSystems = () => {
onBlur={field.onBlur}
onChange={onChange}
placeholder="Choose a Linux distribution"
+ siteType={region?.site_type}
value={field.value}
variant="public"
/>
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelection.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelection.tsx
index f1fe6d0abaa..9dbcc63ab66 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelection.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelection.tsx
@@ -1,8 +1,7 @@
+import { Notice, Paper } from '@linode/ui';
import React from 'react';
import { useFormContext } from 'react-hook-form';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { SafeTabPanel } from 'src/components/Tabs/SafeTabPanel';
import { Tab } from 'src/components/Tabs/Tab';
import { TabList } from 'src/components/Tabs/TabList';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionList.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionList.tsx
index 5717962591d..e29b9b89319 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionList.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionList.tsx
@@ -1,5 +1,5 @@
import { getAPIFilterFromQuery } from '@linode/search';
-import { Box, IconButton, InputAdornment } from '@linode/ui';
+import { Box, IconButton, InputAdornment, Stack } from '@linode/ui';
import CloseIcon from '@mui/icons-material/Close';
import { useQueryClient } from '@tanstack/react-query';
import React, { useState } from 'react';
@@ -10,7 +10,6 @@ import { debounce } from 'throttle-debounce';
import { Button } from 'src/components/Button/Button';
import { CircleProgress } from 'src/components/CircleProgress';
import { Code } from 'src/components/Code/Code';
-import { Stack } from 'src/components/Stack';
import { Table } from 'src/components/Table';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell/TableCell';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionRow.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionRow.tsx
index b81d62f824e..72002b6935d 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionRow.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScriptSelectionRow.tsx
@@ -1,9 +1,9 @@
/* eslint-disable jsx-a11y/label-has-associated-control */
+import { Stack } from '@linode/ui';
import React from 'react';
import { InlineMenuAction } from 'src/components/InlineMenuAction/InlineMenuAction';
import { Radio } from 'src/components/Radio/Radio';
-import { Stack } from 'src/components/Stack';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScripts.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScripts.tsx
index 641ed2e5d00..03110b3472c 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScripts.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/StackScripts.tsx
@@ -1,7 +1,6 @@
+import { Stack } from '@linode/ui';
import React from 'react';
-import { Stack } from 'src/components/Stack';
-
import { Region } from '../../Region';
import { StackScriptImages } from './StackScriptImages';
import { StackScriptSelection } from './StackScriptSelection';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFieldInput.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFieldInput.tsx
index 070e792bea5..267c7081b4e 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFieldInput.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFieldInput.tsx
@@ -1,16 +1,14 @@
-import { FormControl } from '@linode/ui';
+import { Divider, FormControl, Stack } from '@linode/ui';
import React from 'react';
import { useController, useFormContext } from 'react-hook-form';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
-import { Divider } from 'src/components/Divider';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { FormLabel } from 'src/components/FormLabel';
import { Link } from 'src/components/Link';
import PasswordInput from 'src/components/PasswordInput/PasswordInput';
import { Radio } from 'src/components/Radio/Radio';
import { RadioGroup } from 'src/components/RadioGroup';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFields.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFields.tsx
index ccdfb4c3a71..5cfc84c9473 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFields.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/UserDefinedFields/UserDefinedFields.tsx
@@ -1,12 +1,9 @@
-import { Box, IconButton } from '@linode/ui';
+import { Box, IconButton, Notice, Paper, Stack } from '@linode/ui';
import React from 'react';
import { useFormContext, useWatch } from 'react-hook-form';
import Info from 'src/assets/icons/info.svg';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { ShowMoreExpansion } from 'src/components/ShowMoreExpansion';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { oneClickApps } from 'src/features/OneClickApps/oneClickApps';
import { useStackScriptQuery } from 'src/queries/stackscripts';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx b/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx
index b0b7e8bf696..b3fe402b56e 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/TwoStepRegion.tsx
@@ -1,9 +1,9 @@
+import { Paper } from '@linode/ui';
import { Box } from '@linode/ui';
import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { DocsLink } from 'src/components/DocsLink/DocsLink';
-import { Paper } from '@linode/ui';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
import { RegionHelperText } from 'src/components/SelectRegionPanel/RegionHelperText';
import { SafeTabPanel } from 'src/components/Tabs/SafeTabPanel';
@@ -116,7 +116,6 @@ export const TwoStepRegion = (props: CombinedProps) => {
onChange={(e, region) => onChange(region)}
regionFilter="core"
regions={regions ?? []}
- showDistributedRegionIconHelperText={false}
value={value}
/>
@@ -147,7 +146,6 @@ export const TwoStepRegion = (props: CombinedProps) => {
onChange={(e, region) => onChange(region)}
regionFilter={regionFilter}
regions={regions ?? []}
- showDistributedRegionIconHelperText={false}
value={value}
/>
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.tsx b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.tsx
index 94357dc98df..bd22cb4d40f 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserData.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import React, { useMemo } from 'react';
import { Controller, useFormContext, useWatch } from 'react-hook-form';
import { Accordion } from 'src/components/Accordion';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx
index 840f208a33c..e41d57f1e16 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/UserData/UserDataHeading.tsx
@@ -1,8 +1,7 @@
+import { Notice, Stack } from '@linode/ui';
import React from 'react';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.tsx
index b2fb1437a3e..1047de69ecf 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLAN.tsx
@@ -1,9 +1,9 @@
+import { Stack } from '@linode/ui';
import React from 'react';
import { Controller, useFormContext, useWatch } from 'react-hook-form';
import { Accordion } from 'src/components/Accordion';
import { Link } from 'src/components/Link';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
@@ -12,8 +12,8 @@ import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGran
import { useRegionsQuery } from 'src/queries/regions/regions';
import { doesRegionSupportFeature } from 'src/utilities/doesRegionSupportFeature';
-import { VLANAvailabilityNotice } from './VLANAvailabilityNotice';
import { useLinodeCreateQueryParams } from '../utilities';
+import { VLANAvailabilityNotice } from './VLANAvailabilityNotice';
import type { CreateLinodeRequest } from '@linode/api-v4';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLANAvailabilityNotice.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLANAvailabilityNotice.tsx
index 1305bf811aa..0556b7d9f30 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLANAvailabilityNotice.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/VLAN/VLANAvailabilityNotice.tsx
@@ -1,15 +1,16 @@
-import { Theme, styled } from '@mui/material/styles';
+import { Notice } from '@linode/ui';
+import { styled } from '@mui/material/styles';
import * as React from 'react';
import { List } from 'src/components/List';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
import { TextTooltip } from 'src/components/TextTooltip';
import { Typography } from 'src/components/Typography';
import { useRegionsQuery } from 'src/queries/regions/regions';
import { regionsWithFeature } from 'src/utilities/doesRegionSupportFeature';
import type { Region } from '@linode/api-v4';
+import type { Theme } from '@mui/material/styles';
export const VLANAvailabilityNotice = () => {
const regions = useRegionsQuery().data ?? [];
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.tsx
index b3bcaa62788..29adb4eff22 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.tsx
@@ -1,16 +1,12 @@
-import { Box } from '@linode/ui';
+import { Box, Divider, Notice, Paper, Stack } from '@linode/ui';
import React, { useState } from 'react';
import { Controller, useFormContext, useWatch } from 'react-hook-form';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Checkbox } from 'src/components/Checkbox';
-import { Divider } from 'src/components/Divider';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { Link } from 'src/components/Link';
import { LinkButton } from 'src/components/LinkButton';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPCRanges.tsx b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPCRanges.tsx
index a7c5e53d855..cec5f7458fa 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPCRanges.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/VPC/VPCRanges.tsx
@@ -1,10 +1,9 @@
-import { Box, IconButton } from '@linode/ui';
+import { Box, IconButton, Stack } from '@linode/ui';
import CloseIcon from '@mui/icons-material/Close';
import React from 'react';
import { Controller, useFieldArray, useFormContext } from 'react-hook-form';
import { LinkButton } from 'src/components/LinkButton';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import type { CreateLinodeRequest } from '@linode/api-v4';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/index.tsx b/packages/manager/src/features/Linodes/LinodeCreate/index.tsx
index ae4125d2ee1..c1d2b14594d 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/index.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/index.tsx
@@ -1,4 +1,5 @@
import { isEmpty } from '@linode/api-v4';
+import { Stack } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
import { createLazyRoute } from '@tanstack/react-router';
import { useSnackbar } from 'notistack';
@@ -8,7 +9,6 @@ import { useHistory } from 'react-router-dom';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Stack } from 'src/components/Stack';
import { SafeTabPanel } from 'src/components/Tabs/SafeTabPanel';
import { Tab } from 'src/components/Tabs/Tab';
import { TabList } from 'src/components/Tabs/TabList';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTable.tsx b/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTable.tsx
index 69c5bcbdfe8..787ef0d4676 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTable.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/shared/LinodeSelectTable.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import useMediaQuery from '@mui/material/useMediaQuery';
import { useQueryClient } from '@tanstack/react-query';
@@ -6,9 +6,7 @@ import React, { useState } from 'react';
import { useController, useFormContext } from 'react-hook-form';
import { DebouncedSearchTextField } from 'src/components/DebouncedSearchTextField';
-import { Notice } from 'src/components/Notice/Notice';
import { PaginationFooter } from 'src/components/PaginationFooter/PaginationFooter';
-import { Stack } from 'src/components/Stack';
import { Table } from 'src/components/Table';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
diff --git a/packages/manager/src/features/Linodes/LinodeCreate/shared/SelectLinodeCard.tsx b/packages/manager/src/features/Linodes/LinodeCreate/shared/SelectLinodeCard.tsx
index 434c1c4b4d9..8249b1d704f 100644
--- a/packages/manager/src/features/Linodes/LinodeCreate/shared/SelectLinodeCard.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreate/shared/SelectLinodeCard.tsx
@@ -1,10 +1,9 @@
-import { Linode } from '@linode/api-v4';
+import { Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import React from 'react';
import { Button } from 'src/components/Button/Button';
import { SelectionCard } from 'src/components/SelectionCard/SelectionCard';
-import { Stack } from 'src/components/Stack';
import { StatusIcon } from 'src/components/StatusIcon/StatusIcon';
import { useIsResourceRestricted } from 'src/hooks/useIsResourceRestricted';
import { useImageQuery } from 'src/queries/images';
@@ -16,6 +15,8 @@ import { isNotNullOrUndefined } from 'src/utilities/nullOrUndefined';
import { getLinodeIconStatus } from '../../LinodesLanding/utils';
+import type { Linode } from '@linode/api-v4';
+
interface Props {
disabled?: boolean;
handlePowerOff: () => void;
diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts b/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts
index 3205fd5973b..41dce23f752 100644
--- a/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts
+++ b/packages/manager/src/features/Linodes/LinodeEntityDetail.styles.ts
@@ -88,6 +88,47 @@ export const sxLastListItem = {
paddingRight: 0,
};
+// ---------------------------------------------------------------------
+// VPC Label Styles
+// ---------------------------------------------------------------------
+
+export const StyledIPv4Box = styled(Box, { label: 'StyledIPv4Box' })(
+ ({ theme }) => ({
+ '&:hover .copy-tooltip > svg, & .copy-tooltip:focus > svg': {
+ opacity: 1,
+ },
+ display: 'flex',
+ [theme.breakpoints.down('md')]: {
+ margin: theme.spacing(0),
+ },
+ marginLeft: theme.spacing(2),
+ border: 0,
+ })
+);
+
+export const StyledIPv4Label = styled(Box, { label: 'StyledIPv4Label' })(
+ ({ theme }) => ({
+ color: theme.textColors.textAccessTable,
+ fontFamily: theme.font.bold,
+ backgroundColor: theme.name === 'light' ? theme.color.grey10 : theme.bg.app,
+ padding: '10px 24px 10px 10px',
+ alignContent: 'center',
+ })
+);
+
+export const StyledIPv4Item = styled(Box, { label: 'StyledIPv4Item' })(
+ ({ theme }) => ({
+ '& div': {
+ fontSize: 15,
+ },
+ alignItems: 'center',
+ backgroundColor: theme.tokens.interaction.Background.Secondary,
+ display: 'flex',
+ fontFamily: '"UbuntuMono", monospace, sans-serif',
+ padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,
+ })
+);
+
export const StyledListItem = styled(Typography, { label: 'StyledTypography' })(
({ theme }) => ({
borderRight: `1px solid ${theme.borderColors.borderTypography}`,
diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx
index 3addcabeac1..953104d0168 100644
--- a/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx
+++ b/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { EntityDetail } from 'src/components/EntityDetail/EntityDetail';
-import { Notice } from 'src/components/Notice/Notice';
import { getIsDistributedRegion } from 'src/components/RegionSelect/RegionSelect.utils';
import { getRestrictedResourceText } from 'src/features/Account/utils';
import { notificationCenterContext as _notificationContext } from 'src/features/NotificationCenter/NotificationCenterContext';
diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx
index ac5a5480935..f6f300ca60a 100644
--- a/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx
+++ b/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx
@@ -24,9 +24,14 @@ import {
StyledColumnLabelGrid,
StyledLabelBox,
StyledListItem,
+ StyledIPv4Label,
+ StyledIPv4Item,
StyledSummaryGrid,
StyledVPCBox,
+ StyledCopyTooltip,
+ StyledGradientDiv,
sxLastListItem,
+ StyledIPv4Box,
} from './LinodeEntityDetail.styles';
import { ipv4TableID } from './LinodesDetail/LinodeNetworking/LinodeIPAddresses';
import { lishLink, sshLink } from './LinodesDetail/utilities';
@@ -40,6 +45,7 @@ import type {
} from '@linode/api-v4/lib/linodes/types';
import type { Subnet } from '@linode/api-v4/lib/vpcs';
import type { TypographyProps } from 'src/components/Typography';
+import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip';
interface LinodeEntityDetailProps {
id: number;
@@ -253,8 +259,10 @@ export const LinodeEntityDetailBody = React.memo((props: BodyProps) => {
display: 'flex',
flexDirection: 'column',
paddingLeft: '8px',
+ alignItems: 'start',
},
}}
+ alignItems="center"
container
direction="row"
spacing={2}
@@ -271,21 +279,29 @@ export const LinodeEntityDetailBody = React.memo((props: BodyProps) => {
-
+
- Subnets:
+ Subnet:
{' '}
{getSubnetsString(linodeAssociatedSubnets ?? [])}
-
-
-
- VPC IPv4:
- {' '}
- {configInterfaceWithVPC?.ipv4?.vpc}
-
-
+ {configInterfaceWithVPC?.ipv4?.vpc && (
+
+
+ VPC IPv4
+
+
+
+
+
+
+
+
+ )}
)}
diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
index d5c8b4e7fcd..a0c53f02f28 100644
--- a/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
+++ b/packages/manager/src/features/Linodes/LinodeEntityDetailHeader.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Stack } from '@linode/ui';
import { Typography } from '@mui/material';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
@@ -6,7 +6,6 @@ import * as React from 'react';
import { Button } from 'src/components/Button/Button';
import { EntityHeader } from 'src/components/EntityHeader/EntityHeader';
import { Hidden } from 'src/components/Hidden';
-import { Stack } from 'src/components/Stack';
import { StatusIcon } from 'src/components/StatusIcon/StatusIcon';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { LinodeActionMenu } from 'src/features/Linodes/LinodesLanding/LinodeActionMenu/LinodeActionMenu';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/HostMaintenanceError.tsx b/packages/manager/src/features/Linodes/LinodesDetail/HostMaintenanceError.tsx
index 9197bf2a675..d81433d6a04 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/HostMaintenanceError.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/HostMaintenanceError.tsx
@@ -1,7 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
-
export const HostMaintenanceError = () => (
void;
@@ -451,10 +452,10 @@ export const IPRow: React.FC = React.memo((props) => {
@@ -521,23 +522,23 @@ export const IPSharingRow: React.FC = React.memo((props) => {
{handleDelete ? (
handleDelete(idx)}
sx={{
[theme.breakpoints.down('sm')]: {
margin: '-16px 0 0 -26px',
},
}}
+ buttonType="outlined"
+ data-qa-remove-shared-ip
+ disabled={readOnly}
+ onClick={() => handleDelete(idx)}
>
Remove
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/IPTransfer.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/IPTransfer.tsx
index bea6fc91ef4..757979a0d8f 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/IPTransfer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/IPTransfer.tsx
@@ -1,3 +1,4 @@
+import { Divider, Notice } from '@linode/ui';
import { styled, useTheme } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import {
@@ -18,8 +19,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { CircleProgress } from 'src/components/CircleProgress';
import { Dialog } from 'src/components/Dialog/Dialog';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { usePrevious } from 'src/hooks/usePrevious';
import {
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.tsx
index b01dae1d22b..b7f3aab63ab 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeFirewalls/LinodeFirewalls.tsx
@@ -1,7 +1,6 @@
-import { Stack } from '@mui/material';
+import { Paper, Stack } from '@linode/ui';
import * as React from 'react';
-import { Paper } from '@linode/ui';
import { Table } from 'src/components/Table';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddresses.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddresses.tsx
index 15421aec60d..7ee6cfd342c 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddresses.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeIPAddresses.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import { useMediaQuery, useTheme } from '@mui/material';
import * as React from 'react';
@@ -7,9 +7,7 @@ import { Button } from 'src/components/Button/Button';
import { CircleProgress } from 'src/components/CircleProgress';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import OrderBy from 'src/components/OrderBy';
-import { Paper } from '@linode/ui';
import { getIsDistributedRegion } from 'src/components/RegionSelect/RegionSelect.utils';
-import { Stack } from 'src/components/Stack';
import { Table } from 'src/components/Table';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeNetwork.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeNetwork.tsx
index 1032778b8ff..486ca340ba1 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeNetwork.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeNetwork.tsx
@@ -1,8 +1,7 @@
+import { Stack } from '@linode/ui';
import * as React from 'react';
import { useParams } from 'react-router-dom';
-import { Stack } from 'src/components/Stack';
-
import { LinodeFirewalls } from './LinodeFirewalls/LinodeFirewalls';
import { LinodeIPAddresses } from './LinodeIPAddresses';
import { LinodeNetworkingSummaryPanel } from './NetworkingSummaryPanel/NetworkingSummaryPanel';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/TransferContent.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/TransferContent.tsx
index c0b65afd2e6..c322fae26c2 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/TransferContent.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/TransferContent.tsx
@@ -1,10 +1,10 @@
-import Grid from '@mui/material/Unstable_Grid2';
+import { Notice } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
+import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { BarPercent } from 'src/components/BarPercent';
import { CircleProgress } from 'src/components/CircleProgress';
-import { Notice } from 'src/components/Notice/Notice';
import {
StyledLinodeUsage,
@@ -90,32 +90,30 @@ export const TransferContent = (props: ContentProps) => {
value={Math.ceil(linodeUsagePercent)}
valueBuffer={Math.ceil(totalUsagePercent)}
/>
- <>
-
-
- {linodeLabel} ({linodeUsedInGB} GB - {Math.ceil(linodeUsagePercent)}
- %)
-
-
-
-
- {isDynamicPricingDC
- ? `${regionName} Transfer Used (${totalUsedInGB} GB - ${Math.ceil(
- totalUsagePercent
- )}%)`
- : `Global Pool Used (${totalUsedInGB} GB - ${Math.ceil(
- totalUsagePercent
- )}%)`}
-
-
-
-
- {isDynamicPricingDC
- ? `${regionName} Transfer Remaining (${remainingInGB} GB)`
- : `Global Pool Remaining (${remainingInGB} GB)`}
-
-
- >
+
+
+ {linodeLabel} ({linodeUsedInGB} GB - {Math.ceil(linodeUsagePercent)}
+ %)
+
+
+
+
+ {isDynamicPricingDC
+ ? `${regionName} Transfer Used (${totalUsedInGB} GB - ${Math.ceil(
+ totalUsagePercent
+ )}%)`
+ : `Global Pool Used (${totalUsedInGB} GB - ${Math.ceil(
+ totalUsagePercent
+ )}%)`}
+
+
+
+
+ {isDynamicPricingDC
+ ? `${regionName} Transfer Remaining (${remainingInGB} GB)`
+ : `Global Pool Remaining (${remainingInGB} GB)`}
+
+
);
};
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodePermissionsError.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodePermissionsError.tsx
index 23951d4edcc..3a78d55b03e 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodePermissionsError.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodePermissionsError.tsx
@@ -1,6 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { getRestrictedResourceText } from 'src/features/Account/utils';
export const LinodePermissionsError = () => (
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/ImageEmptyState.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/ImageEmptyState.tsx
index 960aed6ed8b..7bca294a5a1 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/ImageEmptyState.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/ImageEmptyState.tsx
@@ -1,8 +1,7 @@
+import { Notice, Paper } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { Typography } from 'src/components/Typography';
import type { SxProps, Theme } from '@mui/material/styles';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/LinodeRebuildDialog.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/LinodeRebuildDialog.tsx
index c93992386a3..db001478398 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/LinodeRebuildDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/LinodeRebuildDialog.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import { styled, useTheme } from '@mui/material/styles';
import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Dialog } from 'src/components/Dialog/Dialog';
import { ErrorMessage } from 'src/components/ErrorMessage';
-import { Notice } from 'src/components/Notice/Notice';
import { getIsDistributedRegion } from 'src/components/RegionSelect/RegionSelect.utils';
import { Typography } from 'src/components/Typography';
import { useLinodeQuery } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.styles.ts b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.styles.ts
index a031081ee54..bf473765e04 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.styles.ts
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.styles.ts
@@ -1,8 +1,8 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
-import { Notice } from 'src/components/Notice/Notice';
export const StyledNotice = styled(Notice, { label: 'StyledNotice' })({
marginBottom: '0px !important',
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.test.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.test.tsx
index 3ac60b9e85a..ecdc17ca5f1 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.test.tsx
@@ -1,8 +1,8 @@
-import { render } from '@testing-library/react';
import * as React from 'react';
import { reactRouterProps } from 'src/__data__/reactRouterProps';
-import { renderWithTheme, wrapWithTheme } from 'src/utilities/testHelpers';
+import { wrapWithTheme } from 'src/utilities/testHelpers';
+import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers';
import { RebuildFromImage } from './RebuildFromImage';
@@ -47,15 +47,17 @@ describe('RebuildFromImage', () => {
});
it('renders a SelectImage panel', () => {
- const { queryByText } = render(
- wrapWithTheme()
- );
+ const { queryByText } = renderWithThemeAndHookFormContext({
+ component: wrapWithTheme(),
+ });
expect(queryByText('Select Image')).toBeInTheDocument();
});
// @TODO LDE: Remove feature flagging/conditionality once LDE is fully rolled out
it('does not render a "Disk Encryption" section when the Disk Encryption feature is disabled', () => {
- const { queryByText } = renderWithTheme();
+ const { queryByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
expect(queryByText('Encrypt Disk')).not.toBeInTheDocument();
});
@@ -69,7 +71,9 @@ describe('RebuildFromImage', () => {
}
);
- const { queryByText } = renderWithTheme();
+ const { queryByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
expect(queryByText('Encrypt Disk')).toBeInTheDocument();
});
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.tsx
index a6e5d9374d1..87bd9d7c402 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/RebuildFromImage.tsx
@@ -1,5 +1,5 @@
import { rebuildLinode } from '@linode/api-v4';
-import { Box } from '@linode/ui';
+import { Box, Divider } from '@linode/ui';
import { RebuildLinodeSchema } from '@linode/validation/lib/linodes.schema';
import Grid from '@mui/material/Unstable_Grid2';
import { Formik } from 'formik';
@@ -10,7 +10,6 @@ import { useLocation } from 'react-router-dom';
import { AccessPanel } from 'src/components/AccessPanel/AccessPanel';
import { Checkbox } from 'src/components/Checkbox';
-import { Divider } from 'src/components/Divider';
import { ImageSelect } from 'src/components/ImageSelect/ImageSelect';
import { TypeToConfirm } from 'src/components/TypeToConfirm/TypeToConfirm';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/UserDataAccordion/UserDataAccordion.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/UserDataAccordion/UserDataAccordion.tsx
index d20ae58c5c1..ef0683830cc 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/UserDataAccordion/UserDataAccordion.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/UserDataAccordion/UserDataAccordion.tsx
@@ -1,9 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import * as React from 'react';
import { Accordion } from 'src/components/Accordion';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDescription.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDescription.tsx
index c4a9c1eeb62..fd51eca05c7 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDescription.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/RescueDescription.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
import { StyledLinkButton } from 'src/components/Button/StyledLinkButton';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { lishLaunch } from 'src/features/Lish/lishUtils';
import { useLinodeFirewallsQuery } from 'src/queries/linodes/firewalls';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/StandardRescueDialog.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/StandardRescueDialog.tsx
index 0c3f4c1969e..cb9c5c6ef18 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/StandardRescueDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/StandardRescueDialog.tsx
@@ -1,3 +1,4 @@
+import { Notice, Paper } from '@linode/ui';
import { styled, useTheme } from '@mui/material/styles';
import { useSnackbar } from 'notistack';
import { assoc, clamp, equals, pathOr } from 'ramda';
@@ -7,8 +8,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Button } from 'src/components/Button/Button';
import { Dialog } from 'src/components/Dialog/Dialog';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { usePrevious } from 'src/hooks/usePrevious';
import { useEventsPollingActions } from 'src/queries/events/events';
import { useAllLinodeDisksQuery } from 'src/queries/linodes/disks';
@@ -229,18 +228,18 @@ export const StandardRescueDialog = (props: Props) => {
slots={['sda', 'sdb', 'sdc', 'sdd', 'sde', 'sdf', 'sdg']}
/>
= 6}
onClick={incrementCounter}
+ sx={{ marginTop: theme.spacing() }}
>
Add Disk
{
it('should render an Image Select', () => {
- renderWithTheme();
+ renderWithThemeAndHookFormContext({
+ component: ,
+ });
expect(screen.getByRole('combobox'));
expect(screen.getByRole('combobox')).toBeEnabled();
});
it('should render a password error if defined', async () => {
const errorMessage = 'Unable to set password.';
- const { findByText } = renderWithTheme(
-
- );
+ const { findByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
const passwordError = await findByText(errorMessage, undefined, {
timeout: 2500,
@@ -37,7 +39,9 @@ describe('ImageAndPassword', () => {
expect(passwordError).toBeVisible();
});
it('should render an SSH Keys section', async () => {
- const { getByText } = renderWithTheme();
+ const { getByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
expect(getByText('SSH Keys', { selector: 'h2' })).toBeVisible();
});
@@ -50,7 +54,9 @@ describe('ImageAndPassword', () => {
})
);
- const { findByText } = renderWithTheme();
+ const { findByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
for (const user of users) {
// eslint-disable-next-line no-await-in-loop
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/InterfaceSelect.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/InterfaceSelect.tsx
index 2ef7b01e54b..f9de4f1d149 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/InterfaceSelect.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/InterfaceSelect.tsx
@@ -1,12 +1,10 @@
+import { Divider, Notice, Stack } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import useMediaQuery from '@mui/material/useMediaQuery';
import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { VPCPanel } from 'src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
index 43923be7b1b..3cf6e2ae4c5 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsAlertsPanel.tsx
@@ -1,4 +1,4 @@
-import { Linode } from '@linode/api-v4';
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -6,7 +6,6 @@ import * as React from 'react';
import { Accordion } from 'src/components/Accordion';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
-import { Notice } from 'src/components/Notice/Notice';
import {
useLinodeQuery,
useLinodeUpdateMutation,
@@ -16,6 +15,8 @@ import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
import { AlertSection } from './AlertSection';
+import type { Linode } from '@linode/api-v4';
+
interface Props {
isReadOnly?: boolean;
linodeId: number;
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsDeletePanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsDeletePanel.tsx
index 820b50b27b0..44f6af63586 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsDeletePanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsDeletePanel.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { useHistory } from 'react-router-dom';
import { Accordion } from 'src/components/Accordion';
import { Button } from 'src/components/Button/Button';
-import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.tsx
index abe4ea91ee2..1615abbfb9f 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsLabelPanel.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -5,7 +6,6 @@ import * as React from 'react';
import { Accordion } from 'src/components/Accordion';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import {
useLinodeQuery,
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsPasswordPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsPasswordPanel.tsx
index b34f58107e8..081d69e081b 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsPasswordPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeSettingsPasswordPanel.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useSnackbar } from 'notistack';
import * as React from 'react';
@@ -5,7 +6,6 @@ import * as React from 'react';
import { Accordion } from 'src/components/Accordion';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import EnhancedSelect from 'src/components/EnhancedSelect/Select';
-import { Notice } from 'src/components/Notice/Notice';
import { SuspenseLoader } from 'src/components/SuspenseLoader';
import {
useAllLinodeDisksQuery,
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeWatchdogPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeWatchdogPanel.tsx
index c94d597c3a3..e4144c3dbb7 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeWatchdogPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/LinodeWatchdogPanel.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { Box, Stack } from '@mui/material';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
@@ -5,7 +6,6 @@ import * as React from 'react';
import { Accordion } from 'src/components/Accordion';
import { CircleProgress } from 'src/components/CircleProgress';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { Toggle } from 'src/components/Toggle/Toggle';
import { Typography } from 'src/components/Typography';
import {
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.tsx
index 68c87f6f469..601320ac9f0 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/VPCPanel.tsx
@@ -1,4 +1,4 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
import * as React from 'react';
@@ -6,7 +6,6 @@ import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Checkbox } from 'src/components/Checkbox';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/CreateDiskDrawer.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/CreateDiskDrawer.tsx
index 974754eb3dd..aaf0c092554 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/CreateDiskDrawer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/CreateDiskDrawer.tsx
@@ -1,5 +1,4 @@
-import { InputAdornment } from '@linode/ui';
-import { FormHelperText } from '@linode/ui';
+import { FormHelperText, InputAdornment, Notice } from '@linode/ui';
import {
CreateLinodeDiskFromImageSchema,
CreateLinodeDiskSchema,
@@ -12,7 +11,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Drawer } from 'src/components/Drawer';
import { ModeSelect } from 'src/components/ModeSelect/ModeSelect';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useEventsPollingActions } from 'src/queries/events/events';
import {
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeDisks.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeDisks.tsx
index 73895ce899a..66943ae8728 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeDisks.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeDisks.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { useParams } from 'react-router-dom';
@@ -8,8 +8,6 @@ import { Hidden } from 'src/components/Hidden';
import OrderBy from 'src/components/OrderBy';
import Paginate from 'src/components/Paginate';
import { PaginationFooter } from 'src/components/PaginationFooter/PaginationFooter';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Table } from 'src/components/Table';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeStorage.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeStorage.tsx
index 0d8d8dba333..a95c6644edd 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeStorage.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/LinodeStorage.tsx
@@ -1,7 +1,6 @@
+import { Stack } from '@linode/ui';
import * as React from 'react';
-import { Stack } from 'src/components/Stack';
-
import { LinodeDisks } from './LinodeDisks';
import { LinodeVolumes } from './LinodeVolumes';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/RenameDiskDrawer.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/RenameDiskDrawer.tsx
index 9ac1235d150..30177ef637d 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/RenameDiskDrawer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/RenameDiskDrawer.tsx
@@ -1,15 +1,16 @@
-import { Disk } from '@linode/api-v4/lib/linodes';
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import * as React from 'react';
import { object, string } from 'yup';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useLinodeDiskUpdateMutation } from 'src/queries/linodes/disks';
import { handleAPIErrors } from 'src/utilities/formikErrorUtils';
+import type { Disk } from '@linode/api-v4/lib/linodes';
+
const RenameDiskSchema = object({
label: string()
.required('Label is required.')
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/ResizeDiskDrawer.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/ResizeDiskDrawer.tsx
index 94d1c435f1a..716e42a843f 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/ResizeDiskDrawer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/ResizeDiskDrawer.tsx
@@ -1,5 +1,4 @@
-import { InputAdornment } from '@linode/ui';
-import { FormHelperText } from '@linode/ui';
+import { FormHelperText, InputAdornment, Notice } from '@linode/ui';
import { ResizeLinodeDiskSchema } from '@linode/validation';
import { styled } from '@mui/material/styles';
import { useFormik } from 'formik';
@@ -10,7 +9,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Code } from 'src/components/Code/Code';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { TextTooltip } from 'src/components/TextTooltip';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/HostMaintenance.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/HostMaintenance.tsx
index ecf4651fdba..59bfeb26c3c 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/HostMaintenance.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/HostMaintenance.tsx
@@ -1,9 +1,10 @@
-import { LinodeStatus } from '@linode/api-v4/lib/linodes/types';
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
+import type { LinodeStatus } from '@linode/api-v4/lib/linodes/types';
+
interface Props {
linodeStatus: LinodeStatus;
}
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MigrationNotification.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MigrationNotification.tsx
index c6ecfe0e849..a30b2308f38 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MigrationNotification.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MigrationNotification.tsx
@@ -1,12 +1,12 @@
-import { NotificationType } from '@linode/api-v4/lib/account';
import { scheduleOrQueueMigration } from '@linode/api-v4/lib/linodes';
+import { Notice } from '@linode/ui';
import { DateTime } from 'luxon';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
+import { StyledLinkButton } from 'src/components/Button/StyledLinkButton';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useDialog } from 'src/hooks/useDialog';
import { useProfile } from 'src/queries/profile/profile';
@@ -14,7 +14,8 @@ import { capitalize } from 'src/utilities/capitalize';
import { parseAPIDate } from 'src/utilities/date';
import { formatDate } from 'src/utilities/formatDate';
import { pluralize } from 'src/utilities/pluralize';
-import { StyledLinkButton } from 'src/components/Button/StyledLinkButton';
+
+import type { NotificationType } from '@linode/api-v4/lib/account';
interface Props {
linodeID: number;
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MutationNotification.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MutationNotification.tsx
index 9c624845587..2ffdcd4b1b1 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MutationNotification.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/MutationNotification.tsx
@@ -1,8 +1,8 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { MBpsIntraDC } from 'src/constants';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/UpgradeVolumesDialog.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/UpgradeVolumesDialog.tsx
index ec74531a2af..59268b789e1 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/UpgradeVolumesDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodesDetailHeader/UpgradeVolumesDialog.tsx
@@ -1,10 +1,9 @@
+import { Notice, Stack } from '@linode/ui';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { Button } from 'src/components/Button/Button';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { VolumeUpgradeCopy } from 'src/features/Volumes/UpgradeVolumeDialog';
import { getUpgradeableVolumeIds } from 'src/features/Volumes/utils';
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/MutateDrawer/MutateDrawer.tsx b/packages/manager/src/features/Linodes/LinodesDetail/MutateDrawer/MutateDrawer.tsx
index dc4b56a8d77..9038bb00f0d 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/MutateDrawer/MutateDrawer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/MutateDrawer/MutateDrawer.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
interface MutateInfo {
diff --git a/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx
index 0728eb2ada4..61314ef5cfb 100644
--- a/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx
+++ b/packages/manager/src/features/Linodes/LinodesDetail/VolumesUpgradeBanner.tsx
@@ -1,11 +1,9 @@
+import { Notice, Paper, Stack } from '@linode/ui';
import React from 'react';
import { useHistory } from 'react-router-dom';
import { Button } from 'src/components/Button/Button';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { getUpgradeableVolumeIds } from 'src/features/Volumes/utils';
import { useNotificationsQuery } from 'src/queries/account/notifications';
diff --git a/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx b/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
index bc60145831a..c9288a5d3d2 100644
--- a/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
+++ b/packages/manager/src/features/Linodes/LinodesLanding/DeleteLinodeDialog.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Linodes/MigrateLinode/CautionNotice.tsx b/packages/manager/src/features/Linodes/MigrateLinode/CautionNotice.tsx
index ce97043923c..440ca5272b3 100644
--- a/packages/manager/src/features/Linodes/MigrateLinode/CautionNotice.tsx
+++ b/packages/manager/src/features/Linodes/MigrateLinode/CautionNotice.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import { styled, useTheme } from '@mui/material/styles';
import { DateTime } from 'luxon';
import * as React from 'react';
import { Checkbox } from 'src/components/Checkbox';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { API_MAX_PAGE_SIZE } from 'src/constants';
import { useLinodeVolumesQuery } from 'src/queries/volumes/volumes';
diff --git a/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx b/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx
index 1964707fa22..16b9124d469 100644
--- a/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx
+++ b/packages/manager/src/features/Linodes/MigrateLinode/ConfigureForm.tsx
@@ -1,13 +1,9 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import DistributedRegion from 'src/assets/icons/entityIcons/distributed-region.svg';
import { Flag } from 'src/components/Flag';
-import { Notice } from 'src/components/Notice/Notice';
import { PlacementGroupsSelect } from 'src/components/PlacementGroupsSelect/PlacementGroupsSelect';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
-import { sxDistributedRegionIcon } from 'src/components/RegionSelect/RegionSelect.styles';
-import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils';
-import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
import { NO_PLACEMENT_GROUPS_IN_SELECTED_REGION_MESSAGE } from 'src/features/PlacementGroups/constants';
import { useIsPlacementGroupsEnabled } from 'src/features/PlacementGroups/utils';
@@ -148,8 +144,6 @@ export const ConfigureForm = React.memo((props: Props) => {
const linodeIsInDistributedRegion =
currentActualRegion?.site_type === 'distributed';
- const { isGeckoBetaEnabled } = useIsGeckoEnabled();
-
return (
Configure Migration
@@ -161,14 +155,6 @@ export const ConfigureForm = React.memo((props: Props) => {
{`${getRegionCountryGroup(currentActualRegion)}: ${
currentActualRegion?.label ?? currentRegion
}`}
- {isGeckoBetaEnabled && linodeIsInDistributedRegion && (
- }
- status="other"
- sxTooltipIcon={sxDistributedRegionIcon}
- text="This region is a distributed region."
- />
- )}
{shouldDisplayPriceComparison && (
void;
diff --git a/packages/manager/src/features/Managed/Credentials/AddCredentialDrawer.tsx b/packages/manager/src/features/Managed/Credentials/AddCredentialDrawer.tsx
index fdb44a8ea4f..098fde3c6d0 100644
--- a/packages/manager/src/features/Managed/Credentials/AddCredentialDrawer.tsx
+++ b/packages/manager/src/features/Managed/Credentials/AddCredentialDrawer.tsx
@@ -1,16 +1,17 @@
-import { CredentialPayload } from '@linode/api-v4/lib/managed';
+import { Notice } from '@linode/ui';
import { Formik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { SuspenseLoader } from 'src/components/SuspenseLoader';
import { TextField } from 'src/components/TextField';
import { handleFormikBlur } from 'src/utilities/formikTrimUtil';
import { creationSchema } from './credential.schema';
+import type { CredentialPayload } from '@linode/api-v4/lib/managed';
+
const PasswordInput = React.lazy(
() => import('src/components/PasswordInput/PasswordInput')
);
diff --git a/packages/manager/src/features/Managed/Credentials/UpdateCredentialDrawer.tsx b/packages/manager/src/features/Managed/Credentials/UpdateCredentialDrawer.tsx
index dbc382a18f2..c3114d00e66 100644
--- a/packages/manager/src/features/Managed/Credentials/UpdateCredentialDrawer.tsx
+++ b/packages/manager/src/features/Managed/Credentials/UpdateCredentialDrawer.tsx
@@ -1,16 +1,17 @@
-import { CredentialPayload } from '@linode/api-v4/lib/managed';
+import { Notice } from '@linode/ui';
import { Formik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { SuspenseLoader } from 'src/components/SuspenseLoader';
import { TextField } from 'src/components/TextField';
import { handleFormikBlur } from 'src/utilities/formikTrimUtil';
import { updateLabelSchema, updatePasswordSchema } from './credential.schema';
+import type { CredentialPayload } from '@linode/api-v4/lib/managed';
+
const PasswordInput = React.lazy(
() => import('src/components/PasswordInput/PasswordInput')
);
diff --git a/packages/manager/src/features/Managed/MonitorDrawer.tsx b/packages/manager/src/features/Managed/MonitorDrawer.tsx
index e872cb239d6..9a314541d5a 100644
--- a/packages/manager/src/features/Managed/MonitorDrawer.tsx
+++ b/packages/manager/src/features/Managed/MonitorDrawer.tsx
@@ -1,4 +1,4 @@
-import { InputAdornment } from '@linode/ui';
+import { InputAdornment, Notice } from '@linode/ui';
import { createServiceMonitorSchema } from '@linode/validation/lib/managed.schema';
import Grid from '@mui/material/Unstable_Grid2';
import { Formik } from 'formik';
@@ -8,7 +8,6 @@ import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
import Select from 'src/components/EnhancedSelect/Select';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import type {
diff --git a/packages/manager/src/features/Managed/SSHAccess/EditSSHAccessDrawer.tsx b/packages/manager/src/features/Managed/SSHAccess/EditSSHAccessDrawer.tsx
index be63b6a4e08..758f6251cb0 100644
--- a/packages/manager/src/features/Managed/SSHAccess/EditSSHAccessDrawer.tsx
+++ b/packages/manager/src/features/Managed/SSHAccess/EditSSHAccessDrawer.tsx
@@ -1,13 +1,12 @@
-import { ManagedLinodeSetting } from '@linode/api-v4/lib/managed';
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
-import { Formik, FormikHelpers } from 'formik';
+import { Formik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { IPSelect } from 'src/components/IPSelect/IPSelect';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Toggle } from 'src/components/Toggle/Toggle';
import { useUpdateLinodeSettingsMutation } from 'src/queries/managed/managed';
@@ -17,12 +16,15 @@ import {
} from 'src/utilities/formikErrorUtils';
import { isPrivateIP, removePrefixLength } from 'src/utilities/ipUtils';
+import { DEFAULTS } from './common';
import {
StyledIPGrid,
StyledPortGrid,
StyledTypography,
} from './EditSSHAccessDrawer.styles';
-import { DEFAULTS } from './common';
+
+import type { ManagedLinodeSetting } from '@linode/api-v4/lib/managed';
+import type { FormikHelpers } from 'formik';
interface EditSSHAccessDrawerProps {
closeDrawer: () => void;
diff --git a/packages/manager/src/features/NodeBalancers/ConfigNodeIPSelect.tsx b/packages/manager/src/features/NodeBalancers/ConfigNodeIPSelect.tsx
index 706cacadcce..1412d22c9ed 100644
--- a/packages/manager/src/features/NodeBalancers/ConfigNodeIPSelect.tsx
+++ b/packages/manager/src/features/NodeBalancers/ConfigNodeIPSelect.tsx
@@ -1,9 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Stack } from '@linode/ui';
import React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { SelectedIcon } from 'src/components/Autocomplete/Autocomplete.styles';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { useAllLinodesQuery } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerConfigNode.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerConfigNode.tsx
index 00a6c05c09c..e32e13724b4 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerConfigNode.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerConfigNode.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Divider, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
@@ -6,8 +6,6 @@ import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Button } from 'src/components/Button/Button';
import { Chip } from 'src/components/Chip';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { getErrorMap } from 'src/utilities/errorUtils';
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerConfigPanel.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerConfigPanel.tsx
index 0260fd5f049..c6e82c69564 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerConfigPanel.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerConfigPanel.tsx
@@ -1,4 +1,4 @@
-import { FormHelperText } from '@linode/ui';
+import { Divider, FormHelperText, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
@@ -6,9 +6,7 @@ import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Button } from 'src/components/Button/Button';
-import { Divider } from 'src/components/Divider';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx
index 552f0d56928..e7a82ef8318 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerCreate.tsx
@@ -1,4 +1,4 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Notice, Paper, Stack } from '@linode/ui';
import { useTheme } from '@mui/material';
import useMediaQuery from '@mui/material/useMediaQuery';
import { createLazyRoute } from '@tanstack/react-router';
@@ -24,11 +24,9 @@ import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorMessage } from 'src/components/ErrorMessage';
import { LandingHeader } from 'src/components/LandingHeader';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
import { SelectFirewallPanel } from 'src/components/SelectFirewallPanel/SelectFirewallPanel';
import { RegionHelperText } from 'src/components/SelectRegionPanel/RegionHelperText';
-import { Stack } from 'src/components/Stack';
import { TagsInput } from 'src/components/TagsInput/TagsInput';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
@@ -54,8 +52,8 @@ import { sendCreateNodeBalancerEvent } from 'src/utilities/analytics/customEvent
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { getGDPRDetails } from 'src/utilities/formatRegion';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
-import { PRICE_ERROR_TOOLTIP_TEXT } from 'src/utilities/pricing/constants';
import { DOCS_LINK_LABEL_DC_PRICING } from 'src/utilities/pricing/constants';
+import { PRICE_ERROR_TOOLTIP_TEXT } from 'src/utilities/pricing/constants';
import {
getDCSpecificPriceByType,
renderMonthlyPriceToCorrectDecimalPlace,
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx
index 982963c6716..adafe73aa42 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerDeleteDialog.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { useHistory } from 'react-router-dom';
-import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useNodebalancerDeleteMutation } from 'src/queries/nodebalancers';
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerDetail.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerDetail.tsx
index 14ce668e8ca..5def42f3069 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerDetail.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerDetail.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
import {
@@ -10,7 +11,6 @@ import {
import { CircleProgress } from 'src/components/CircleProgress';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Notice } from 'src/components/Notice/Notice';
import { SafeTabPanel } from 'src/components/Tabs/SafeTabPanel';
import { TabLinkList } from 'src/components/Tabs/TabLinkList';
import { TabPanels } from 'src/components/Tabs/TabPanels';
diff --git a/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerFirewalls.tsx b/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerFirewalls.tsx
index 0ab0801891f..b4a2a09770e 100644
--- a/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerFirewalls.tsx
+++ b/packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerFirewalls.tsx
@@ -1,6 +1,5 @@
/* eslint-disable jsx-a11y/anchor-is-valid */
-import { Box } from '@linode/ui';
-import { Stack } from '@mui/material';
+import { Box, Stack } from '@linode/ui';
import * as React from 'react';
import { Link } from 'src/components/Link';
diff --git a/packages/manager/src/features/NotificationCenter/Notifications/NotificationCenterNotificationMessage.tsx b/packages/manager/src/features/NotificationCenter/Notifications/NotificationCenterNotificationMessage.tsx
index dedfb32743c..144877d0dad 100644
--- a/packages/manager/src/features/NotificationCenter/Notifications/NotificationCenterNotificationMessage.tsx
+++ b/packages/manager/src/features/NotificationCenter/Notifications/NotificationCenterNotificationMessage.tsx
@@ -1,10 +1,9 @@
-import { Box } from '@linode/ui';
+import { Box, Divider } from '@linode/ui';
import ErrorIcon from '@mui/icons-material/Error';
import WarningIcon from '@mui/icons-material/Warning';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
-import { Divider } from 'src/components/Divider';
import { Typography } from 'src/components/Typography';
import { sanitizeHTML } from 'src/utilities/sanitizeHTML';
diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyDrawer.tsx
index ec1772b47c2..5b98653ade1 100644
--- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyDrawer.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { createObjectStorageKeysSchema } from '@linode/validation/lib/objectStorageKeys.schema';
import { Formik } from 'formik';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { CircleProgress } from 'src/components/CircleProgress';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useAccountSettings } from 'src/queries/account/settings';
diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyActionMenu.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyActionMenu.tsx
index b0c13b737c1..a0a89cfcb4b 100644
--- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyActionMenu.tsx
+++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyActionMenu.tsx
@@ -1,9 +1,9 @@
+import { Stack } from '@linode/ui';
import { useMediaQuery } from '@mui/material';
import * as React from 'react';
import { ActionMenu } from 'src/components/ActionMenu/ActionMenu';
import { InlineMenuAction } from 'src/components/InlineMenuAction/InlineMenuAction';
-import { Stack } from 'src/components/Stack';
import { useAccountManagement } from 'src/hooks/useAccountManagement';
import { useFlags } from 'src/hooks/useFlags';
import { isFeatureEnabledV2 } from 'src/utilities/accountCapabilities';
diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx
index f9755977e65..9803c41c0f8 100644
--- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx
+++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/AccessKeyTable/AccessKeyTableRow.tsx
@@ -1,10 +1,10 @@
+import { Stack } from '@linode/ui';
import { styled } from '@mui/material/styles';
import React from 'react';
import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip';
import { Hidden } from 'src/components/Hidden';
import { MaskableText } from 'src/components/MaskableText/MaskableText';
-import { Stack } from 'src/components/Stack';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx
index d2800c937b5..4d3f0b058a9 100644
--- a/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/AccessKeyLanding/OMC_AccessKeyDrawer.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import {
createObjectStorageKeysSchema,
updateObjectStorageKeysSchema,
@@ -9,7 +10,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { CircleProgress } from 'src/components/CircleProgress';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useAccountSettings } from 'src/queries/account/settings';
diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/AccessSelect.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/AccessSelect.tsx
index 362a8b21f74..6e60543b31e 100644
--- a/packages/manager/src/features/ObjectStorage/BucketDetail/AccessSelect.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketDetail/AccessSelect.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { Controller, useForm } from 'react-hook-form';
@@ -6,7 +7,6 @@ import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Toggle } from 'src/components/Toggle/Toggle';
import { Typography } from 'src/components/Typography';
import { useOpenClose } from 'src/hooks/useOpenClose';
diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/BucketSSL.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/BucketSSL.tsx
index c410769f1db..dd52c4ad660 100644
--- a/packages/manager/src/features/ObjectStorage/BucketDetail/BucketSSL.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketDetail/BucketSSL.tsx
@@ -1,4 +1,4 @@
-import { Paper } from '@linode/ui';
+import { Notice, Paper } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import { useFormik } from 'formik';
@@ -11,7 +11,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import {
diff --git a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.tsx b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.tsx
index dbb4e111a0c..fb2a9e2fd26 100644
--- a/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketDetail/ObjectDetailsDrawer.tsx
@@ -1,8 +1,8 @@
+import { Divider } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip';
-import { Divider } from 'src/components/Divider';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx
index 9a8c8f2dc55..fd5f87bfb7c 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketDetailsDrawer.tsx
@@ -1,8 +1,8 @@
+import { Divider } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { CopyTooltip } from 'src/components/CopyTooltip/CopyTooltip';
-import { Divider } from 'src/components/Divider';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
import { MaskableText } from 'src/components/MaskableText/MaskableText';
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.tsx
index 0c8115d8b5c..3364a09a270 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketLanding.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { makeStyles } from 'tss-react/mui';
@@ -6,7 +7,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import OrderBy from 'src/components/OrderBy';
import { TransferDisplay } from 'src/components/TransferDisplay/TransferDisplay';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTableRow.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTableRow.tsx
index a84a923baba..1febd590d2a 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTableRow.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/BucketTableRow.tsx
@@ -1,10 +1,10 @@
+import { Stack } from '@linode/ui';
import * as React from 'react';
import { DateTimeDisplay } from 'src/components/DateTimeDisplay';
import { Hidden } from 'src/components/Hidden';
import { Link } from 'src/components/Link';
import { MaskableText } from 'src/components/MaskableText/MaskableText';
-import { Stack } from 'src/components/Stack';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.tsx
index 3adc16b1863..93e60b33c19 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/CreateBucketDrawer.tsx
@@ -1,4 +1,5 @@
import { yupResolver } from '@hookform/resolvers/yup';
+import { Notice } from '@linode/ui';
import { CreateBucketSchema } from '@linode/validation';
import { styled } from '@mui/material/styles';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { Controller, useForm } from 'react-hook-form';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { EUAgreementCheckbox } from 'src/features/Account/Agreements/EUAgreementCheckbox';
import {
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_BucketLanding.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_BucketLanding.tsx
index df19e2f4efa..1c595b05674 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_BucketLanding.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_BucketLanding.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { makeStyles } from 'tss-react/mui';
@@ -6,7 +7,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import OrderBy from 'src/components/OrderBy';
import { TransferDisplay } from 'src/components/TransferDisplay/TransferDisplay';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
diff --git a/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_CreateBucketDrawer.tsx b/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_CreateBucketDrawer.tsx
index c1ba644e64d..dc3080c7efa 100644
--- a/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_CreateBucketDrawer.tsx
+++ b/packages/manager/src/features/ObjectStorage/BucketLanding/OMC_CreateBucketDrawer.tsx
@@ -1,4 +1,5 @@
import { yupResolver } from '@hookform/resolvers/yup';
+import { Notice } from '@linode/ui';
import { CreateBucketSchema } from '@linode/validation';
import * as React from 'react';
import { Controller, useForm } from 'react-hook-form';
@@ -7,7 +8,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { BucketRateLimitTable } from 'src/features/ObjectStorage/BucketLanding/BucketRateLimitTable';
diff --git a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.tsx b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.tsx
index 10299d74625..ffe51b118b4 100644
--- a/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.tsx
+++ b/packages/manager/src/features/ObjectStorage/EnableObjectStorageModal.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useObjectStorageTypesQuery } from 'src/queries/object-storage/queries';
import {
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupPolicyRadioGroup.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupPolicyRadioGroup.tsx
index 27d4b7f299d..965414a2fed 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupPolicyRadioGroup.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupPolicyRadioGroup.tsx
@@ -1,9 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import * as React from 'react';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { FormLabel } from 'src/components/FormLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { Radio } from 'src/components/Radio/Radio';
import { RadioGroup } from 'src/components/RadioGroup';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.tsx
index 8aaa0e6eae6..89621be0775 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsAssignLinodesDrawer.tsx
@@ -2,16 +2,13 @@ import {
PLACEMENT_GROUP_POLICIES,
PLACEMENT_GROUP_TYPES,
} from '@linode/api-v4';
-import { Box } from '@linode/ui';
+import { Box, Divider, Notice, Stack } from '@linode/ui';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { DescriptionList } from 'src/components/DescriptionList/DescriptionList';
-import { Divider } from 'src/components/Divider';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
import { useAllLinodesQuery } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
index 16469439483..9da8bd6be02 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsCreateDrawer.tsx
@@ -1,3 +1,4 @@
+import { Divider, Notice, Stack } from '@linode/ui';
import { createPlacementGroupSchema } from '@linode/validation';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -6,13 +7,10 @@ import { useLocation } from 'react-router-dom';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { DescriptionList } from 'src/components/DescriptionList/DescriptionList';
-import { Divider } from 'src/components/Divider';
import { Drawer } from 'src/components/Drawer';
import { List } from 'src/components/List';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { getRestrictedResourceText } from 'src/features/Account/utils';
@@ -43,7 +41,7 @@ import type {
Region,
} from '@linode/api-v4';
import type { FormikHelpers } from 'formik';
-import type { DisableRegionOption } from 'src/components/RegionSelect/RegionSelect.types';
+import type { DisableItemOption } from 'src/components/ListItemOption';
export const PlacementGroupsCreateDrawer = (
props: PlacementGroupsCreateDrawerProps
@@ -156,7 +154,7 @@ export const PlacementGroupsCreateDrawer = (
selectedRegion
)}`;
- const disabledRegions = regions?.reduce>(
+ const disabledRegions = regions?.reduce>(
(acc, region) => {
const isRegionAtCapacity = hasRegionReachedPlacementGroupCapacity({
allPlacementGroups: allPlacementGroupsInRegion,
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx
index 383bbc74093..902bd710643 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDeleteModal.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { useSnackbar } from 'notistack';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { List } from 'src/components/List';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
import { RemovableSelectionsList } from 'src/components/RemovableSelectionsList/RemovableSelectionsList';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx
index fce4cd920c0..27280179d3d 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail.tsx
@@ -1,4 +1,5 @@
import { PLACEMENT_GROUP_TYPES } from '@linode/api-v4';
+import { Notice } from '@linode/ui';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
import { useParams } from 'react-router-dom';
@@ -8,7 +9,6 @@ import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { LandingHeader } from 'src/components/LandingHeader';
import { NotFound } from 'src/components/NotFound';
-import { Notice } from 'src/components/Notice/Notice';
import { getRestrictedResourceText } from 'src/features/Account/utils';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { useAllLinodesQuery } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsLinodes/PlacementGroupsLinodes.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsLinodes/PlacementGroupsLinodes.tsx
index 7347ff8ca95..dbdc218d306 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsLinodes/PlacementGroupsLinodes.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsLinodes/PlacementGroupsLinodes.tsx
@@ -1,3 +1,4 @@
+import { Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2/Grid2';
import * as React from 'react';
import { useHistory } from 'react-router-dom';
@@ -5,7 +6,6 @@ import { useHistory } from 'react-router-dom';
import { Button } from 'src/components/Button/Button';
import { DebouncedSearchTextField } from 'src/components/DebouncedSearchTextField';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
-import { Stack } from 'src/components/Stack';
import { hasPlacementGroupReachedCapacity } from 'src/features/PlacementGroups/utils';
import {
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.tsx
index d5b3489c74b..a539181243c 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsSummary/PlacementGroupsSummary.tsx
@@ -2,6 +2,7 @@ import {
PLACEMENT_GROUP_POLICIES,
PLACEMENT_GROUP_TYPES,
} from '@linode/api-v4';
+import { Notice, Paper } from '@linode/ui';
import { Box } from '@linode/ui';
import { useTheme } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -9,8 +10,6 @@ import * as React from 'react';
import { DescriptionList } from 'src/components/DescriptionList/DescriptionList';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
-import { Paper } from '@linode/ui';
import { Typography } from 'src/components/Typography';
import {
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.tsx
index 5b6d526718c..6ddd64f4751 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsDetailPanel.tsx
@@ -1,10 +1,9 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import * as React from 'react';
import { Button } from 'src/components/Button/Button';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
import { PlacementGroupsSelect } from 'src/components/PlacementGroupsSelect/PlacementGroupsSelect';
import { TextTooltip } from 'src/components/TextTooltip';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.tsx
index 2689d6229a1..ed33610ca15 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsEditDrawer.tsx
@@ -1,7 +1,8 @@
import {
- PLACEMENT_GROUP_TYPES,
PLACEMENT_GROUP_POLICIES,
+ PLACEMENT_GROUP_TYPES,
} from '@linode/api-v4';
+import { Divider, Notice, Stack } from '@linode/ui';
import { updatePlacementGroupSchema } from '@linode/validation';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -11,11 +12,8 @@ import { useParams } from 'react-router-dom';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { CircleProgress } from 'src/components/CircleProgress';
import { DescriptionList } from 'src/components/DescriptionList/DescriptionList';
-import { Divider } from 'src/components/Divider';
import { Drawer } from 'src/components/Drawer';
import { NotFound } from 'src/components/NotFound';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { useFormValidateOnChange } from 'src/hooks/useFormValidateOnChange';
import {
diff --git a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx
index 5d41f301424..8b179291dde 100644
--- a/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx
+++ b/packages/manager/src/features/PlacementGroups/PlacementGroupsUnassignModal.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { useParams } from 'react-router-dom';
@@ -6,7 +7,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { CircleProgress } from 'src/components/CircleProgress';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { NotFound } from 'src/components/NotFound';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useIsResourceRestricted } from 'src/hooks/useIsResourceRestricted';
import { useLinodeQuery } from 'src/queries/linodes/linodes';
diff --git a/packages/manager/src/features/Profile/APITokens/APITokens.tsx b/packages/manager/src/features/Profile/APITokens/APITokens.tsx
index 5acd5364415..5e466724443 100644
--- a/packages/manager/src/features/Profile/APITokens/APITokens.tsx
+++ b/packages/manager/src/features/Profile/APITokens/APITokens.tsx
@@ -1,4 +1,4 @@
-import { Stack } from '@mui/material';
+import { Stack } from '@linode/ui';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
diff --git a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx
index 58a0b8cc935..5ba5c47dcf0 100644
--- a/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx
+++ b/packages/manager/src/features/Profile/APITokens/CreateAPITokenDrawer.tsx
@@ -1,4 +1,4 @@
-import { FormControl, FormHelperText } from '@linode/ui';
+import { FormControl, FormHelperText, Notice } from '@linode/ui';
import { useFormik } from 'formik';
import { DateTime } from 'luxon';
import * as React from 'react';
@@ -6,7 +6,6 @@ import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { Radio } from 'src/components/Radio/Radio';
import { TableBody } from 'src/components/TableBody';
import { TableCell } from 'src/components/TableCell';
diff --git a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.tsx b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.tsx
index 3aba5fb979f..5c4e9b2bc74 100644
--- a/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.tsx
+++ b/packages/manager/src/features/Profile/APITokens/EditAPITokenDrawer.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useUpdatePersonalAccessTokenMutation } from 'src/queries/profile/tokens';
import { getErrorMap } from 'src/utilities/errorUtils';
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/AuthenticationSettings.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/AuthenticationSettings.tsx
index efba74259d0..37bf55467c7 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/AuthenticationSettings.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/AuthenticationSettings.tsx
@@ -1,11 +1,10 @@
-import { Paper } from '@linode/ui';
+import { Divider, Paper } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
import { useLocation } from 'react-router-dom';
import { CircleProgress } from 'src/components/CircleProgress';
-import { Divider } from 'src/components/Divider';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { Link } from 'src/components/Link';
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/SMSMessaging.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/SMSMessaging.tsx
index d9cde16e883..7b09373c3ba 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/SMSMessaging.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/SMSMessaging.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useSnackbar } from 'notistack';
import * as React from 'react';
@@ -7,10 +7,9 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Button } from 'src/components/Button/Button';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
-import { useSMSOptOutMutation } from 'src/queries/profile/profile';
import { useProfile } from 'src/queries/profile/profile';
+import { useSMSOptOutMutation } from 'src/queries/profile/profile';
import { getFormattedNumber } from './PhoneVerification/helpers';
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.styles.ts b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.styles.ts
index f0cc13c638c..1a8ccc383f8 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.styles.ts
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.styles.ts
@@ -1,9 +1,8 @@
-import { Paper } from '@linode/ui';
+import { Notice, Paper } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import { Button } from 'src/components/Button/Button';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
export const StyledRootContainer = styled(Paper, {
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.tsx
index caed45a3d8f..2309057377e 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TPAProviders.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Divider } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
@@ -7,7 +7,6 @@ import EnabledIcon from 'src/assets/icons/checkmark-enabled.svg';
import AkamaiWaveOnlyIcon from 'src/assets/icons/providers/akamai-logo-rgb-waveOnly.svg';
import GitHubIcon from 'src/assets/icons/providers/github-logo.svg';
import GoogleIcon from 'src/assets/icons/providers/google-logo.svg';
-import { Divider } from 'src/components/Divider';
import { Link } from 'src/components/Link';
import { Typography } from 'src/components/Typography';
import { useFlags } from 'src/hooks/useFlags';
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/ConfirmToken.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/ConfirmToken.tsx
index 2584b7bd3d1..af8c2d769d4 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/ConfirmToken.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/ConfirmToken.tsx
@@ -1,9 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { Button } from 'src/components/Button/Button';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/EnableTwoFactorForm.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/EnableTwoFactorForm.tsx
index 118739bf97c..5881375ed7c 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/EnableTwoFactorForm.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/EnableTwoFactorForm.tsx
@@ -1,16 +1,16 @@
import { confirmTwoFactor } from '@linode/api-v4/lib/profile';
-import { APIError } from '@linode/api-v4/lib/types';
+import { Divider, Notice } from '@linode/ui';
import * as React from 'react';
import { CircleProgress } from 'src/components/CircleProgress';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
import { getAPIErrorOrDefault, getErrorMap } from 'src/utilities/errorUtils';
import { scrollErrorIntoView } from 'src/utilities/scrollErrorIntoView';
import { ConfirmToken } from './ConfirmToken';
import { QRCodeForm } from './QRCodeForm';
+import type { APIError } from '@linode/api-v4/lib/types';
+
interface Props {
loading: boolean;
onCancel: () => void;
diff --git a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
index 9dd8382c268..fc5fde78603 100644
--- a/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
+++ b/packages/manager/src/features/Profile/AuthenticationSettings/TwoFactor/TwoFactor.tsx
@@ -1,11 +1,11 @@
import { getTFAToken } from '@linode/api-v4/lib/profile';
-import { APIError } from '@linode/api-v4/lib/types';
-import * as React from 'react';
+import { Notice } from '@linode/ui';
import { useQueryClient } from '@tanstack/react-query';
+import * as React from 'react';
import { StyledLinkButton } from 'src/components/Button/StyledLinkButton';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
+import { profileQueries } from 'src/queries/profile/profile';
import { useSecurityQuestions } from 'src/queries/profile/securityQuestions';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
@@ -19,7 +19,8 @@ import {
StyledRootContainer,
} from './TwoFactor.styles';
import { TwoFactorToggle } from './TwoFactorToggle';
-import { profileQueries } from 'src/queries/profile/profile';
+
+import type { APIError } from '@linode/api-v4/lib/types';
export interface TwoFactorProps {
disabled?: boolean;
diff --git a/packages/manager/src/features/Profile/DisplaySettings/AvatarColorPickerDialog.tsx b/packages/manager/src/features/Profile/DisplaySettings/AvatarColorPickerDialog.tsx
index 52c0c3a4378..97401d291eb 100644
--- a/packages/manager/src/features/Profile/DisplaySettings/AvatarColorPickerDialog.tsx
+++ b/packages/manager/src/features/Profile/DisplaySettings/AvatarColorPickerDialog.tsx
@@ -1,3 +1,4 @@
+import { Stack } from '@linode/ui';
import { Typography } from '@mui/material';
import React from 'react';
import { useState } from 'react';
@@ -6,7 +7,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Avatar } from 'src/components/Avatar/Avatar';
import { ColorPicker } from 'src/components/ColorPicker/ColorPicker';
import { Dialog } from 'src/components/Dialog/Dialog';
-import { Stack } from 'src/components/Stack';
import {
useMutatePreferences,
usePreferences,
diff --git a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx
index e1812a53fc5..f641329cf95 100644
--- a/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx
+++ b/packages/manager/src/features/Profile/DisplaySettings/DisplaySettings.tsx
@@ -1,9 +1,7 @@
-import { Paper } from '@linode/ui';
+import { Divider, Paper, Stack } from '@linode/ui';
import { createLazyRoute } from '@tanstack/react-router';
import React from 'react';
-import { Divider } from 'src/components/Divider';
-import { Stack } from 'src/components/Stack';
import { useProfile } from 'src/queries/profile/profile';
import { AvatarForm } from './AvatarForm';
diff --git a/packages/manager/src/features/Profile/DisplaySettings/TimezoneForm.tsx b/packages/manager/src/features/Profile/DisplaySettings/TimezoneForm.tsx
index 43c8e8053ea..ebb9d98b901 100644
--- a/packages/manager/src/features/Profile/DisplaySettings/TimezoneForm.tsx
+++ b/packages/manager/src/features/Profile/DisplaySettings/TimezoneForm.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { DateTime } from 'luxon';
import { useSnackbar } from 'notistack';
@@ -7,7 +8,6 @@ import { Controller, useForm } from 'react-hook-form';
import { timezones } from 'src/assets/timezones/timezones';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Button } from 'src/components/Button/Button';
-import { Notice } from 'src/components/Notice/Notice';
import { useAuthentication } from 'src/hooks/useAuthentication';
import { useMutateProfile, useProfile } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Profile/LishSettings/LishSettings.tsx b/packages/manager/src/features/Profile/LishSettings/LishSettings.tsx
index dc6f213bb8e..fb26da9094f 100644
--- a/packages/manager/src/features/Profile/LishSettings/LishSettings.tsx
+++ b/packages/manager/src/features/Profile/LishSettings/LishSettings.tsx
@@ -1,4 +1,4 @@
-import { Box, FormControl, Paper } from '@linode/ui';
+import { Box, FormControl, Notice, Paper } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import { createLazyRoute } from '@tanstack/react-router';
import { equals, lensPath, remove, set } from 'ramda';
@@ -8,7 +8,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Button } from 'src/components/Button/Button';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useMutateProfile, useProfile } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.tsx b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.tsx
index 5b49daef10d..47c80675997 100644
--- a/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.tsx
+++ b/packages/manager/src/features/Profile/OAuthClients/CreateOAuthClientDrawer.tsx
@@ -1,4 +1,4 @@
-import { FormControl } from '@linode/ui';
+import { FormControl, Notice } from '@linode/ui';
import { useFormik } from 'formik';
import * as React from 'react';
@@ -6,7 +6,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Checkbox } from 'src/components/Checkbox';
import { Drawer } from 'src/components/Drawer';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useCreateOAuthClientMutation } from 'src/queries/account/oauth';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
diff --git a/packages/manager/src/features/Profile/OAuthClients/EditOAuthClientDrawer.tsx b/packages/manager/src/features/Profile/OAuthClients/EditOAuthClientDrawer.tsx
index 4f2d4673e55..aa0d637bdfc 100644
--- a/packages/manager/src/features/Profile/OAuthClients/EditOAuthClientDrawer.tsx
+++ b/packages/manager/src/features/Profile/OAuthClients/EditOAuthClientDrawer.tsx
@@ -1,4 +1,4 @@
-import { FormControl } from '@linode/ui';
+import { FormControl, Notice } from '@linode/ui';
import { useFormik } from 'formik';
import * as React from 'react';
@@ -6,7 +6,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Checkbox } from 'src/components/Checkbox';
import { Drawer } from 'src/components/Drawer';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useUpdateOAuthClientMutation } from 'src/queries/account/oauth';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
diff --git a/packages/manager/src/features/Profile/Referrals/Referrals.styles.ts b/packages/manager/src/features/Profile/Referrals/Referrals.styles.ts
index cca81a2f77e..68fac0090c6 100644
--- a/packages/manager/src/features/Profile/Referrals/Referrals.styles.ts
+++ b/packages/manager/src/features/Profile/Referrals/Referrals.styles.ts
@@ -1,7 +1,7 @@
-import Grid from '@mui/material/Unstable_Grid2';
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
+import Grid from '@mui/material/Unstable_Grid2';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
export const StyledResultsWrapper = styled('div', {
diff --git a/packages/manager/src/features/Profile/Referrals/Referrals.tsx b/packages/manager/src/features/Profile/Referrals/Referrals.tsx
index 6ea34956725..3694d5705ea 100644
--- a/packages/manager/src/features/Profile/Referrals/Referrals.tsx
+++ b/packages/manager/src/features/Profile/Referrals/Referrals.tsx
@@ -1,4 +1,4 @@
-import { Paper } from '@linode/ui';
+import { Notice, Paper } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
@@ -10,7 +10,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { CopyableTextField } from 'src/components/CopyableTextField/CopyableTextField';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useProfile } from 'src/queries/profile/profile';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
diff --git a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.tsx b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.tsx
index b845b8a2039..3236b371132 100644
--- a/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.tsx
+++ b/packages/manager/src/features/Profile/SSHKeys/CreateSSHKeyDrawer.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Code } from 'src/components/Code/Code';
import { Drawer } from 'src/components/Drawer';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useCreateSSHKeyMutation } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Profile/SSHKeys/EditSSHKeyDrawer.tsx b/packages/manager/src/features/Profile/SSHKeys/EditSSHKeyDrawer.tsx
index 05a0393ecc5..49078d5333d 100644
--- a/packages/manager/src/features/Profile/SSHKeys/EditSSHKeyDrawer.tsx
+++ b/packages/manager/src/features/Profile/SSHKeys/EditSSHKeyDrawer.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
@@ -5,7 +6,6 @@ import { useEffect } from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useUpdateSSHKeyMutation } from 'src/queries/profile/profile';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
diff --git a/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx b/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx
index 6bb1e386a0f..8ca79c82a4a 100644
--- a/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx
+++ b/packages/manager/src/features/Profile/SecretTokenDialog/SecretTokenDialog.tsx
@@ -1,11 +1,10 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { ConfirmationDialog } from 'src/components/ConfirmationDialog/ConfirmationDialog';
import { CopyableTextField } from 'src/components/CopyableTextField/CopyableTextField';
-import { Notice } from 'src/components/Notice/Notice';
import { CopyAllHostnames } from 'src/features/ObjectStorage/AccessKeyLanding/CopyAllHostnames';
import { HostNamesList } from 'src/features/ObjectStorage/AccessKeyLanding/HostNamesList';
import { useAccountManagement } from 'src/hooks/useAccountManagement';
diff --git a/packages/manager/src/features/Profile/Settings/PreferenceEditor.tsx b/packages/manager/src/features/Profile/Settings/PreferenceEditor.tsx
index c5905bb42f2..db175a0d279 100644
--- a/packages/manager/src/features/Profile/Settings/PreferenceEditor.tsx
+++ b/packages/manager/src/features/Profile/Settings/PreferenceEditor.tsx
@@ -1,10 +1,9 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import * as React from 'react';
import { Button } from 'src/components/Button/Button';
import { Dialog } from 'src/components/Dialog/Dialog';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import {
useMutatePreferences,
diff --git a/packages/manager/src/features/Profile/Settings/Settings.tsx b/packages/manager/src/features/Profile/Settings/Settings.tsx
index d8d9097879f..c355262f836 100644
--- a/packages/manager/src/features/Profile/Settings/Settings.tsx
+++ b/packages/manager/src/features/Profile/Settings/Settings.tsx
@@ -1,4 +1,4 @@
-import { Paper } from '@linode/ui';
+import { Paper, Stack } from '@linode/ui';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
import { useHistory, useLocation } from 'react-router-dom';
@@ -8,7 +8,6 @@ import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { Radio } from 'src/components/Radio/Radio';
import { RadioGroup } from 'src/components/RadioGroup';
-import { Stack } from 'src/components/Stack';
import { Toggle } from 'src/components/Toggle/Toggle';
import { Typography } from 'src/components/Typography';
import {
diff --git a/packages/manager/src/features/Search/SearchLanding.styles.ts b/packages/manager/src/features/Search/SearchLanding.styles.ts
index b8e7fc08930..6603686dd99 100644
--- a/packages/manager/src/features/Search/SearchLanding.styles.ts
+++ b/packages/manager/src/features/Search/SearchLanding.styles.ts
@@ -1,5 +1,5 @@
import { keyframes } from '@emotion/react';
-import { Stack } from '@mui/material';
+import { Stack } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
diff --git a/packages/manager/src/features/Search/SearchLanding.tsx b/packages/manager/src/features/Search/SearchLanding.tsx
index 4ed6f58a824..383c50ffec1 100644
--- a/packages/manager/src/features/Search/SearchLanding.tsx
+++ b/packages/manager/src/features/Search/SearchLanding.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import { createLazyRoute } from '@tanstack/react-router';
import { equals } from 'ramda';
@@ -5,7 +6,6 @@ import * as React from 'react';
import { debounce } from 'throttle-debounce';
import { CircleProgress } from 'src/components/CircleProgress';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useAPISearch } from 'src/features/Search/useAPISearch';
import { useIsLargeAccount } from 'src/hooks/useIsLargeAccount';
@@ -28,6 +28,7 @@ import { isNilOrEmpty } from 'src/utilities/isNilOrEmpty';
import { isNotNullOrUndefined } from 'src/utilities/nullOrUndefined';
import { getQueryParamFromQueryString } from 'src/utilities/queryParams';
+import { useIsDatabasesEnabled } from '../Databases/utilities';
import { getImageLabelForLinode } from '../Images/utils';
import { ResultGroup } from './ResultGroup';
import './searchLanding.css';
@@ -43,7 +44,6 @@ import withStoreSearch from './withStoreSearch';
import type { SearchProps } from './withStoreSearch';
import type { RouteComponentProps } from 'react-router-dom';
-import { useIsDatabasesEnabled } from '../Databases/utilities';
const displayMap = {
buckets: 'Buckets',
diff --git a/packages/manager/src/features/StackScripts/SelectStackScriptPanel/SelectStackScriptPanel.tsx b/packages/manager/src/features/StackScripts/SelectStackScriptPanel/SelectStackScriptPanel.tsx
index 246c633d453..9d549f97ba3 100644
--- a/packages/manager/src/features/StackScripts/SelectStackScriptPanel/SelectStackScriptPanel.tsx
+++ b/packages/manager/src/features/StackScripts/SelectStackScriptPanel/SelectStackScriptPanel.tsx
@@ -1,11 +1,10 @@
import { getStackScript } from '@linode/api-v4/lib/stackscripts';
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import * as React from 'react';
import { compose } from 'recompose';
import { Button } from 'src/components/Button/Button';
import { CircleProgress } from 'src/components/CircleProgress';
-import { Notice } from 'src/components/Notice/Notice';
import { RenderGuard } from 'src/components/RenderGuard';
import { Typography } from 'src/components/Typography';
import { withProfile } from 'src/containers/profile.container';
diff --git a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx
index e08a0db4129..a08edd0ce3d 100644
--- a/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptBase/StackScriptBase.tsx
@@ -1,9 +1,7 @@
-import { Image } from '@linode/api-v4/lib/images';
-import { StackScript } from '@linode/api-v4/lib/stackscripts';
-import { APIError, Filter, ResourcePage } from '@linode/api-v4/lib/types';
+import { Notice } from '@linode/ui';
import { pathOr } from 'ramda';
import * as React from 'react';
-import { RouteComponentProps, withRouter } from 'react-router-dom';
+import { withRouter } from 'react-router-dom';
import { Waypoint } from 'react-waypoint';
import { compose } from 'recompose';
@@ -11,12 +9,7 @@ import StackScriptsIcon from 'src/assets/icons/entityIcons/stackscript.svg';
import { Button } from 'src/components/Button/Button';
import { CircleProgress } from 'src/components/CircleProgress';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
-import { Notice } from 'src/components/Notice/Notice';
-import {
- WithProfileProps,
- withProfile,
-} from 'src/containers/profile.container';
-import { WithQueryClientProps } from 'src/containers/withQueryClient.container';
+import { withProfile } from 'src/containers/profile.container';
import { isLinodeKubeImageId } from 'src/store/image/image.helpers';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { getDisplayName } from 'src/utilities/getDisplayName';
@@ -25,11 +18,9 @@ import { getQueryParamFromQueryString } from 'src/utilities/queryParams';
import { StackScriptTableHead } from '../Partials/StackScriptTableHead';
import {
- AcceptedFilters,
generateCatchAllFilter,
generateSpecificFilter,
} from '../stackScriptUtils';
-import { StackScriptsRequest } from '../types';
import {
StyledContentDiv,
StyledDebouncedSearchTextfield,
@@ -40,6 +31,15 @@ import {
} from './StackScriptBase.styles';
import { StackScriptsEmptyLandingState } from './StackScriptsEmptyLandingPage';
+import type { AcceptedFilters } from '../stackScriptUtils';
+import type { StackScriptsRequest } from '../types';
+import type { Image } from '@linode/api-v4/lib/images';
+import type { StackScript } from '@linode/api-v4/lib/stackscripts';
+import type { APIError, Filter, ResourcePage } from '@linode/api-v4/lib/types';
+import type { RouteComponentProps } from 'react-router-dom';
+import type { WithProfileProps } from 'src/containers/profile.container';
+import type { WithQueryClientProps } from 'src/containers/withQueryClient.container';
+
type CurrentFilter = 'deploys' | 'label' | 'revision';
type SortOrder = 'asc' | 'desc';
@@ -102,199 +102,6 @@ const withStackScriptBase = (options: WithStackScriptBaseOptions) => (
const { isSelecting, useQueryString } = options;
class EnhancedComponent extends React.Component {
- componentDidMount() {
- this.mounted = true;
- // If the URL contains a QS param called "query" treat it as a filter.
- const query = getQueryParamFromQueryString(
- this.props.location.search,
- 'query'
- );
- if (query) {
- return this.handleSearch(query);
- }
-
- return this.getDataAtPage(1);
- }
-
- componentWillUnmount() {
- this.mounted = false;
- }
-
- render() {
- const {
- allStackScriptsLoaded,
- currentFilterType,
- didSearch,
- error,
- fieldError,
- getMoreStackScriptsFailed,
- gettingMoreStackScripts,
- isSearching,
- isSorting,
- listOfStackScripts,
- sortOrder,
- successMessage,
- } = this.state;
-
- const { grants, profile } = this.props;
-
- const userCannotCreateStackScripts =
- Boolean(profile.data?.restricted) &&
- !grants.data?.global.add_stackscripts;
-
- if (error) {
- return (
-
-
-
- );
- }
-
- if (this.state.loading) {
- return (
-
-
-
- );
- }
-
- // Use the query string if the argument has been specified.
- const query = useQueryString
- ? getQueryParamFromQueryString(this.props.location.search, 'query')
- : undefined;
-
- return (
-
- {fieldError && fieldError.reason && (
-
- )}
- {successMessage && }
- {/*
- * We only want to show this empty state on the initial GET StackScripts request
- * If the user is searching and 0 results come back, we just want to show
- * an empty table, rather than showing a message indicating no StackScripts exist
- */}
- {!didSearch &&
- listOfStackScripts &&
- listOfStackScripts.length === 0 ? (
-
- {userCannotCreateStackScripts ? (
-
- You don’t have any StackScripts to select from.
-
- ) : (
-
- )}
-
- ) : (
-
-
-
-
-
-
-
-
-
- {/*
- * show loading indicator if we're getting more stackscripts
- * and if we're not showing the "get more stackscripts" button
- */}
- {gettingMoreStackScripts && !isSorting && (
-
-
-
- )}
-
- )}
- {/*
- * if we're sorting, or if we already loaded all results
- * or if we're in the middle of getting more results, don't render
- * the lazy load trigger
- */}
- {!isSorting && !allStackScriptsLoaded && !gettingMoreStackScripts && (
-
- {/*
- * If the lazy-load failed (marked by the catch in getNext),
- * show the "Show more StackScripts button
- * Otherwise, try to lazy load some more dang stackscripts
- */}
- {!getMoreStackScriptsFailed ? (
-
- {/*
- * The reason for this empty div is that there was some wonkiness when
- * scrolling to the waypoint with trackpads. For some reason, the Waypoint
- * would never be scrolled into view no matter how much you scrolled on the
- * trackpad. Especially finicky at zoomed in browser sizes
- */}
-
-
- ) : (
-
- Show More StackScripts
-
- )}
-
+ );
+ }
+
+ if (this.state.loading) {
+ return (
+
+
+
+ );
+ }
+
+ // Use the query string if the argument has been specified.
+ const query = useQueryString
+ ? getQueryParamFromQueryString(this.props.location.search, 'query')
+ : undefined;
+
+ return (
+
+ {fieldError && fieldError.reason && (
+
+ )}
+ {successMessage && }
+ {/*
+ * We only want to show this empty state on the initial GET StackScripts request
+ * If the user is searching and 0 results come back, we just want to show
+ * an empty table, rather than showing a message indicating no StackScripts exist
+ */}
+ {!didSearch &&
+ listOfStackScripts &&
+ listOfStackScripts.length === 0 ? (
+
+ {userCannotCreateStackScripts ? (
+
+ You don’t have any StackScripts to select from.
+
+ ) : (
+
+ )}
+
+ ) : (
+
+
+
+
+
+
+
+
+
+ {/*
+ * show loading indicator if we're getting more stackscripts
+ * and if we're not showing the "get more stackscripts" button
+ */}
+ {gettingMoreStackScripts && !isSorting && (
+
+
+
+ )}
+
+ )}
+ {/*
+ * if we're sorting, or if we already loaded all results
+ * or if we're in the middle of getting more results, don't render
+ * the lazy load trigger
+ */}
+ {!isSorting && !allStackScriptsLoaded && !gettingMoreStackScripts && (
+
+ {/*
+ * If the lazy-load failed (marked by the catch in getNext),
+ * show the "Show more StackScripts button
+ * Otherwise, try to lazy load some more dang stackscripts
+ */}
+ {!getMoreStackScriptsFailed ? (
+
+ {/*
+ * The reason for this empty div is that there was some wonkiness when
+ * scrolling to the waypoint with trackpads. For some reason, the Waypoint
+ * would never be scrolled into view no matter how much you scrolled on the
+ * trackpad. Especially finicky at zoomed in browser sizes
+ */}
+
+
+ ) : (
+
+ Show More StackScripts
+
+ )}
+
+ )}
+
+ );
+ }
}
return compose(withRouter, withProfile)(EnhancedComponent);
diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
index 27e340db290..49012e7b97b 100644
--- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.test.tsx
@@ -3,7 +3,7 @@ import * as React from 'react';
import { reactRouterProps } from 'src/__data__/reactRouterProps';
import { profileFactory } from 'src/factories';
import { queryClientFactory } from 'src/queries/base';
-import { renderWithTheme } from 'src/utilities/testHelpers';
+import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers';
import { StackScriptCreate } from './StackScriptCreate';
@@ -15,21 +15,22 @@ const queryClient = queryClientFactory();
describe('StackScriptCreate', () => {
it('should render header, inputs, and buttons', () => {
- const { getByLabelText, getByText } = renderWithTheme(
-
- }
- grants={{ data: {} } as UseQueryResult}
- mode="create"
- queryClient={queryClient}
- />,
- { queryClient }
- );
+ const { getByLabelText, getByText } = renderWithThemeAndHookFormContext({
+ component: (
+
+ }
+ grants={{ data: {} } as UseQueryResult}
+ mode="create"
+ queryClient={queryClient}
+ />
+ ),
+ });
expect(getByText('Create')).toBeVisible();
diff --git a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
index 0d232b42e56..039c4ce1a67 100644
--- a/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptCreate/StackScriptCreate.tsx
@@ -3,6 +3,7 @@ import {
getStackScript,
updateStackScript,
} from '@linode/api-v4/lib/stackscripts';
+import { Notice } from '@linode/ui';
import { equals } from 'ramda';
import * as React from 'react';
import { withRouter } from 'react-router-dom';
@@ -15,7 +16,6 @@ import { ConfirmationDialog } from 'src/components/ConfirmationDialog/Confirmati
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { withProfile } from 'src/containers/profile.container';
import { withQueryClient } from 'src/containers/withQueryClient.container';
diff --git a/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.styles.ts b/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.styles.ts
index 296fda0b312..a004081854d 100644
--- a/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.styles.ts
+++ b/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.styles.ts
@@ -1,8 +1,8 @@
-import Grid from '@mui/material/Unstable_Grid2';
+import { Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
+import Grid from '@mui/material/Unstable_Grid2';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
export const StyledActionsPanel = styled(ActionsPanel, {
diff --git a/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.test.tsx b/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.test.tsx
index 8b91134e9fd..b4be7d1e3eb 100644
--- a/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.test.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptForm/StackScriptForm.test.tsx
@@ -1,6 +1,6 @@
import * as React from 'react';
-import { renderWithTheme } from 'src/utilities/testHelpers';
+import { renderWithThemeAndHookFormContext } from 'src/utilities/testHelpers';
import { StackScriptForm } from './StackScriptForm';
@@ -34,7 +34,9 @@ const props = {
describe('StackScriptCreate', () => {
it('should render', () => {
- const { getByText } = renderWithTheme();
+ const { getByText } = renderWithThemeAndHookFormContext({
+ component: ,
+ });
getByText(/stackscript label/i);
});
});
diff --git a/packages/manager/src/features/StackScripts/StackScriptsLanding.tsx b/packages/manager/src/features/StackScripts/StackScriptsLanding.tsx
index 1101d6b33c1..6b749ec1a29 100644
--- a/packages/manager/src/features/StackScripts/StackScriptsLanding.tsx
+++ b/packages/manager/src/features/StackScripts/StackScriptsLanding.tsx
@@ -1,3 +1,4 @@
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import { createLazyRoute } from '@tanstack/react-router';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { useHistory } from 'react-router-dom';
import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Notice } from 'src/components/Notice/Notice';
import { listToItemsByID } from 'src/queries/base';
import { useAllImagesQuery } from 'src/queries/images';
diff --git a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedMultiSelect.tsx b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedMultiSelect.tsx
index 64d230bbc87..03263e8bc3e 100644
--- a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedMultiSelect.tsx
+++ b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedMultiSelect.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
-import { Notice } from 'src/components/Notice/Notice';
import { RenderGuard } from 'src/components/RenderGuard';
import type { UserDefinedField } from '@linode/api-v4/lib/stackscripts';
diff --git a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedSelect.tsx b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedSelect.tsx
index 2d911c2ae12..b96c0aa0eb8 100644
--- a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedSelect.tsx
+++ b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/FieldTypes/UserDefinedSelect.tsx
@@ -1,10 +1,9 @@
-import { InputLabel } from '@linode/ui';
+import { InputLabel, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import * as React from 'react';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { Radio } from 'src/components/Radio/Radio';
import type { UserDefinedField } from '@linode/api-v4/lib/stackscripts';
diff --git a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/UserDefinedFieldsPanel.tsx b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/UserDefinedFieldsPanel.tsx
index a87a4e5a2e7..b14d90c0097 100644
--- a/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/UserDefinedFieldsPanel.tsx
+++ b/packages/manager/src/features/StackScripts/UserDefinedFieldsPanel/UserDefinedFieldsPanel.tsx
@@ -1,10 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Divider, Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { Link } from 'react-router-dom';
-import { Divider } from 'src/components/Divider';
-import { Notice } from 'src/components/Notice/Notice';
import { RenderGuard } from 'src/components/RenderGuard';
import { ShowMoreExpansion } from 'src/components/ShowMoreExpansion';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Support/Hively.tsx b/packages/manager/src/features/Support/Hively.tsx
index 9c146e8649a..440e5d2dd0f 100644
--- a/packages/manager/src/features/Support/Hively.tsx
+++ b/packages/manager/src/features/Support/Hively.tsx
@@ -1,10 +1,8 @@
-import { Box } from '@linode/ui';
+import { Box, Divider, Stack } from '@linode/ui';
import { DateTime } from 'luxon';
import * as React from 'react';
-import { Divider } from 'src/components/Divider';
import { Link } from 'src/components/Link';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { parseAPIDate } from 'src/utilities/date';
diff --git a/packages/manager/src/features/Support/SupportTicketDetail/AttachmentError.tsx b/packages/manager/src/features/Support/SupportTicketDetail/AttachmentError.tsx
index b6382a79daa..c709707ee13 100644
--- a/packages/manager/src/features/Support/SupportTicketDetail/AttachmentError.tsx
+++ b/packages/manager/src/features/Support/SupportTicketDetail/AttachmentError.tsx
@@ -1,7 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
-
interface Props {
fileName: string;
reason: string;
diff --git a/packages/manager/src/features/Support/SupportTicketDetail/SupportTicketDetail.tsx b/packages/manager/src/features/Support/SupportTicketDetail/SupportTicketDetail.tsx
index be966b504cc..b1902189e0c 100644
--- a/packages/manager/src/features/Support/SupportTicketDetail/SupportTicketDetail.tsx
+++ b/packages/manager/src/features/Support/SupportTicketDetail/SupportTicketDetail.tsx
@@ -1,3 +1,4 @@
+import { Stack } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import { createLazyRoute } from '@tanstack/react-router';
@@ -10,7 +11,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Stack } from 'src/components/Stack';
import { useProfile } from 'src/queries/profile/profile';
import {
useInfiniteSupportTicketRepliesQuery,
diff --git a/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/MarkdownReference.tsx b/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/MarkdownReference.tsx
index 51c289edd7e..778e155250a 100644
--- a/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/MarkdownReference.tsx
+++ b/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/MarkdownReference.tsx
@@ -1,9 +1,8 @@
-import { Paper } from '@linode/ui';
+import { Paper, Stack } from '@linode/ui';
import * as React from 'react';
import { HighlightedMarkdown } from 'src/components/HighlightedMarkdown/HighlightedMarkdown';
import { Link } from 'src/components/Link';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
interface Props {
diff --git a/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/ReplyContainer.tsx b/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/ReplyContainer.tsx
index 383ed47eeb4..1fcdedd4ef5 100644
--- a/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/ReplyContainer.tsx
+++ b/packages/manager/src/features/Support/SupportTicketDetail/TabbedReply/ReplyContainer.tsx
@@ -1,4 +1,5 @@
import { uploadAttachment } from '@linode/api-v4';
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import { lensPath, set } from 'ramda';
import * as React from 'react';
@@ -6,7 +7,6 @@ import { debounce } from 'throttle-debounce';
import { makeStyles } from 'tss-react/mui';
import { Accordion } from 'src/components/Accordion';
-import { Notice } from 'src/components/Notice/Notice';
import { useSupportTicketReplyMutation } from 'src/queries/support';
import { getAPIErrorOrDefault, getErrorMap } from 'src/utilities/errorUtils';
import { storage } from 'src/utilities/storage';
diff --git a/packages/manager/src/features/Support/SupportTicketDetail/TicketStatus.tsx b/packages/manager/src/features/Support/SupportTicketDetail/TicketStatus.tsx
index e056efd29d6..f5a15031b24 100644
--- a/packages/manager/src/features/Support/SupportTicketDetail/TicketStatus.tsx
+++ b/packages/manager/src/features/Support/SupportTicketDetail/TicketStatus.tsx
@@ -1,11 +1,10 @@
-import { Paper } from '@linode/ui';
+import { Paper, Stack } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import React from 'react';
import { Hidden } from 'src/components/Hidden';
import { Link } from 'src/components/Link';
-import { Stack } from 'src/components/Stack';
import { StatusIcon } from 'src/components/StatusIcon/StatusIcon';
import { Typography } from 'src/components/Typography';
import { useProfile } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Support/SupportTickets/SupportTicketDialog.tsx b/packages/manager/src/features/Support/SupportTickets/SupportTicketDialog.tsx
index 066ac25045c..d009c0e262f 100644
--- a/packages/manager/src/features/Support/SupportTickets/SupportTicketDialog.tsx
+++ b/packages/manager/src/features/Support/SupportTickets/SupportTicketDialog.tsx
@@ -1,6 +1,6 @@
import { yupResolver } from '@hookform/resolvers/yup';
import { uploadAttachment } from '@linode/api-v4/lib/support';
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { update } from 'ramda';
import * as React from 'react';
import { Controller, FormProvider, useForm } from 'react-hook-form';
@@ -11,7 +11,6 @@ import { Accordion } from 'src/components/Accordion';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { Dialog } from 'src/components/Dialog/Dialog';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useCreateSupportTicketMutation } from 'src/queries/support';
@@ -57,6 +56,7 @@ interface AttachmentWithTarget {
}
export type EntityType =
+ | 'bucket'
| 'database_id'
| 'domain_id'
| 'firewall_id'
@@ -344,12 +344,28 @@ export const SupportTicketDialog = (props: SupportTicketDialogProps) => {
}
setSubmitting(true);
- createSupportTicket({
- [_entityType]: Number(_entityId),
+ const baseRequestPayload = {
description: _description,
severity: selectedSeverity,
summary,
- })
+ };
+
+ let requestPayload;
+ if (entityType === 'bucket') {
+ const bucket_label = values.entityInputValue;
+ requestPayload = {
+ bucket: bucket_label,
+ region: _entityId,
+ ...baseRequestPayload,
+ };
+ } else {
+ requestPayload = {
+ [_entityType]: Number(_entityId),
+ ...baseRequestPayload,
+ };
+ }
+
+ createSupportTicket(requestPayload)
.then((response) => {
return response;
})
diff --git a/packages/manager/src/features/Support/SupportTickets/SupportTicketProductSelectionFields.tsx b/packages/manager/src/features/Support/SupportTickets/SupportTicketProductSelectionFields.tsx
index 65f55f44187..d834f55fb2d 100644
--- a/packages/manager/src/features/Support/SupportTickets/SupportTicketProductSelectionFields.tsx
+++ b/packages/manager/src/features/Support/SupportTickets/SupportTicketProductSelectionFields.tsx
@@ -10,6 +10,7 @@ import { useAllFirewallsQuery } from 'src/queries/firewalls';
import { useAllKubernetesClustersQuery } from 'src/queries/kubernetes';
import { useAllLinodesQuery } from 'src/queries/linodes/linodes';
import { useAllNodeBalancersQuery } from 'src/queries/nodebalancers';
+import { useObjectStorageBuckets } from 'src/queries/object-storage/queries';
import { useAllVolumesQuery } from 'src/queries/volumes/volumes';
import { useAllVPCsQuery } from 'src/queries/vpcs/vpcs';
@@ -81,6 +82,12 @@ export const SupportTicketProductSelectionFields = (props: Props) => {
isLoading: linodesLoading,
} = useAllLinodesQuery({}, {}, entityType === 'linode_id');
+ const {
+ data: buckets,
+ error: bucketsError,
+ isLoading: bucketsLoading,
+ } = useObjectStorageBuckets(entityType === 'bucket');
+
const {
data: volumes,
error: volumesError,
@@ -93,8 +100,9 @@ export const SupportTicketProductSelectionFields = (props: Props) => {
isLoading: vpcsLoading,
} = useAllVPCsQuery(entityType === 'vpc_id');
- const getEntityOptions = (): { label: string; value: number }[] => {
+ const getEntityOptions = (): { label: string; value: number | string }[] => {
const reactQueryEntityDataMap = {
+ bucket: buckets,
database_id: databases,
domain_id: domains,
firewall_id: firewalls,
@@ -123,6 +131,17 @@ export const SupportTicketProductSelectionFields = (props: Props) => {
);
}
+ if (entityType === 'bucket') {
+ return (
+ reactQueryEntityDataMap['bucket']?.buckets?.map(
+ ({ label, region }) => ({
+ label,
+ value: region ?? '',
+ })
+ ) || []
+ );
+ }
+
return (
reactQueryEntityDataMap[entityType]?.map(
({ id, label }: { id: number; label: string }) => ({
@@ -134,6 +153,7 @@ export const SupportTicketProductSelectionFields = (props: Props) => {
};
const loadingMap: Record = {
+ bucket: bucketsLoading,
database_id: databasesLoading,
domain_id: domainsLoading,
firewall_id: firewallsLoading,
@@ -147,6 +167,7 @@ export const SupportTicketProductSelectionFields = (props: Props) => {
};
const errorMap: Record = {
+ bucket: bucketsError,
database_id: databasesError,
domain_id: domainsError,
firewall_id: firewallsError,
diff --git a/packages/manager/src/features/Support/SupportTickets/constants.tsx b/packages/manager/src/features/Support/SupportTickets/constants.tsx
index 9e1134a0f02..9637bf42c73 100644
--- a/packages/manager/src/features/Support/SupportTickets/constants.tsx
+++ b/packages/manager/src/features/Support/SupportTickets/constants.tsx
@@ -69,11 +69,13 @@ export const ENTITY_MAP: Record = {
Kubernetes: 'lkecluster_id',
Linodes: 'linode_id',
NodeBalancers: 'nodebalancer_id',
+ 'Object Storage': 'bucket',
VPCs: 'vpc_id',
Volumes: 'volume_id',
};
export const ENTITY_ID_TO_NAME_MAP: Record = {
+ bucket: 'Bucket',
database_id: 'Database Cluster',
domain_id: 'Domain',
firewall_id: 'Firewall',
diff --git a/packages/manager/src/features/Support/TicketAttachmentRow.tsx b/packages/manager/src/features/Support/TicketAttachmentRow.tsx
index eb978e15480..f418f016a20 100644
--- a/packages/manager/src/features/Support/TicketAttachmentRow.tsx
+++ b/packages/manager/src/features/Support/TicketAttachmentRow.tsx
@@ -1,8 +1,6 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Divider, Paper, Stack } from '@linode/ui';
import * as React from 'react';
-import { Divider } from 'src/components/Divider';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
interface Props {
diff --git a/packages/manager/src/features/TopMenu/NotificationMenu/NotificationMenu.tsx b/packages/manager/src/features/TopMenu/NotificationMenu/NotificationMenu.tsx
index 195bc0d7b65..063ca7d533c 100644
--- a/packages/manager/src/features/TopMenu/NotificationMenu/NotificationMenu.tsx
+++ b/packages/manager/src/features/TopMenu/NotificationMenu/NotificationMenu.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Divider } from '@linode/ui';
import AutorenewIcon from '@mui/icons-material/Autorenew';
import { IconButton } from '@mui/material';
import Popover from '@mui/material/Popover';
@@ -8,7 +8,6 @@ import { useHistory } from 'react-router-dom';
import Bell from 'src/assets/icons/notification.svg';
import { Chip } from 'src/components/Chip';
-import { Divider } from 'src/components/Divider';
import { LinkButton } from 'src/components/LinkButton';
import { Typography } from 'src/components/Typography';
import { NotificationCenterEvent } from 'src/features/NotificationCenter/Events/NotificationCenterEvent';
diff --git a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx
index 6ea3b004c25..7ad661fdc8e 100644
--- a/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx
+++ b/packages/manager/src/features/TopMenu/UserMenu/UserMenu.tsx
@@ -1,4 +1,4 @@
-import { Box, Tooltip } from '@linode/ui';
+import { Box, Divider, Stack, Tooltip } from '@linode/ui';
import KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown';
import KeyboardArrowUp from '@mui/icons-material/KeyboardArrowUp';
import { styled, useMediaQuery } from '@mui/material';
@@ -10,10 +10,8 @@ import * as React from 'react';
import { Avatar } from 'src/components/Avatar/Avatar';
import { AvatarForProxy } from 'src/components/AvatarForProxy';
import { Button } from 'src/components/Button/Button';
-import { Divider } from 'src/components/Divider';
import { Hidden } from 'src/components/Hidden';
import { Link } from 'src/components/Link';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { switchAccountSessionContext } from 'src/context/switchAccountSessionContext';
import { SwitchAccountButton } from 'src/features/Account/SwitchAccountButton';
diff --git a/packages/manager/src/features/Users/CreateUserDrawer.tsx b/packages/manager/src/features/Users/CreateUserDrawer.tsx
index a41ce5521a2..b704b22da5e 100644
--- a/packages/manager/src/features/Users/CreateUserDrawer.tsx
+++ b/packages/manager/src/features/Users/CreateUserDrawer.tsx
@@ -1,17 +1,20 @@
-import { User, createUser } from '@linode/api-v4/lib/account';
-import { APIError } from '@linode/api-v4/lib/types';
+import { createUser } from '@linode/api-v4/lib/account';
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { RouteComponentProps, withRouter } from 'react-router-dom';
+import { withRouter } from 'react-router-dom';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Toggle } from 'src/components/Toggle/Toggle';
import { getAPIErrorOrDefault } from 'src/utilities/errorUtils';
import { getAPIErrorFor } from 'src/utilities/getAPIErrorFor';
+import type { User } from '@linode/api-v4/lib/account';
+import type { APIError } from '@linode/api-v4/lib/types';
+import type { RouteComponentProps } from 'react-router-dom';
+
interface Props {
onClose: () => void;
open: boolean;
@@ -29,6 +32,64 @@ interface State {
interface CreateUserDrawerProps extends Props, RouteComponentProps<{}> {}
class CreateUserDrawer extends React.Component {
+ handleChangeEmail = (e: React.ChangeEvent) => {
+ this.setState({
+ email: e.target.value,
+ });
+ };
+
+ handleChangeRestricted = () => {
+ this.setState({
+ restricted: !this.state.restricted,
+ });
+ };
+
+ handleChangeUsername = (
+ e:
+ | React.ChangeEvent
+ | React.FocusEvent
+ ) => {
+ this.setState({
+ username: e.target.value,
+ });
+ };
+
+ onSubmit = () => {
+ const {
+ history: { push },
+ onClose,
+ refetch,
+ } = this.props;
+ const { email, restricted, username } = this.state;
+ this.setState({ errors: [], submitting: true });
+ createUser({ email, restricted, username })
+ .then((user: User) => {
+ this.setState({ submitting: false });
+ onClose();
+ if (user.restricted) {
+ push(`/account/users/${username}/permissions`, {
+ newUsername: user.username,
+ });
+ }
+ refetch();
+ })
+ .catch((errResponse) => {
+ const errors = getAPIErrorOrDefault(
+ errResponse,
+ 'Error creating user.'
+ );
+ this.setState({ errors, submitting: false });
+ });
+ };
+
+ state: State = {
+ email: '',
+ errors: [],
+ restricted: false,
+ submitting: false,
+ username: '',
+ };
+
componentDidUpdate(prevProps: CreateUserDrawerProps) {
if (this.props.open === true && prevProps.open === false) {
this.setState({
@@ -113,64 +174,6 @@ class CreateUserDrawer extends React.Component {
);
}
-
- handleChangeEmail = (e: React.ChangeEvent) => {
- this.setState({
- email: e.target.value,
- });
- };
-
- handleChangeRestricted = () => {
- this.setState({
- restricted: !this.state.restricted,
- });
- };
-
- handleChangeUsername = (
- e:
- | React.ChangeEvent
- | React.FocusEvent
- ) => {
- this.setState({
- username: e.target.value,
- });
- };
-
- onSubmit = () => {
- const {
- history: { push },
- onClose,
- refetch,
- } = this.props;
- const { email, restricted, username } = this.state;
- this.setState({ errors: [], submitting: true });
- createUser({ email, restricted, username })
- .then((user: User) => {
- this.setState({ submitting: false });
- onClose();
- if (user.restricted) {
- push(`/account/users/${username}/permissions`, {
- newUsername: user.username,
- });
- }
- refetch();
- })
- .catch((errResponse) => {
- const errors = getAPIErrorOrDefault(
- errResponse,
- 'Error creating user.'
- );
- this.setState({ errors, submitting: false });
- });
- };
-
- state: State = {
- email: '',
- errors: [],
- restricted: false,
- submitting: false,
- username: '',
- };
}
export default withRouter(CreateUserDrawer);
diff --git a/packages/manager/src/features/Users/UserPermissions.tsx b/packages/manager/src/features/Users/UserPermissions.tsx
index 8bad43671f2..4bc2481f265 100644
--- a/packages/manager/src/features/Users/UserPermissions.tsx
+++ b/packages/manager/src/features/Users/UserPermissions.tsx
@@ -4,7 +4,7 @@ import {
updateGrants,
updateUser,
} from '@linode/api-v4/lib/account';
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { Paper } from '@mui/material';
import Grid from '@mui/material/Unstable_Grid2';
import { enqueueSnackbar } from 'notistack';
@@ -15,7 +15,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { FormControlLabel } from 'src/components/FormControlLabel';
-import { Notice } from 'src/components/Notice/Notice';
import { SelectionCard } from 'src/components/SelectionCard/SelectionCard';
import { SafeTabPanel } from 'src/components/Tabs/SafeTabPanel';
import { Tab } from 'src/components/Tabs/Tab';
diff --git a/packages/manager/src/features/Users/UserProfile/DeleteUserPanel.tsx b/packages/manager/src/features/Users/UserProfile/DeleteUserPanel.tsx
index 4d941453204..ce7c366f6f2 100644
--- a/packages/manager/src/features/Users/UserProfile/DeleteUserPanel.tsx
+++ b/packages/manager/src/features/Users/UserProfile/DeleteUserPanel.tsx
@@ -1,9 +1,8 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Paper, Stack } from '@linode/ui';
import React, { useState } from 'react';
import { useHistory } from 'react-router-dom';
import { Button } from 'src/components/Button/Button';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
import { PARENT_USER } from 'src/features/Account/constants';
import { useProfile } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Users/UserProfile/UserDetailsPanel.tsx b/packages/manager/src/features/Users/UserProfile/UserDetailsPanel.tsx
index 9236aaa831f..a559e7f07cb 100644
--- a/packages/manager/src/features/Users/UserProfile/UserDetailsPanel.tsx
+++ b/packages/manager/src/features/Users/UserProfile/UserDetailsPanel.tsx
@@ -1,10 +1,9 @@
-import { Paper } from '@linode/ui';
+import { Paper, Stack } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import React from 'react';
import { DateTimeDisplay } from 'src/components/DateTimeDisplay';
import { MaskableText } from 'src/components/MaskableText/MaskableText';
-import { Stack } from 'src/components/Stack';
import { StatusIcon } from 'src/components/StatusIcon/StatusIcon';
import { TextTooltip } from 'src/components/TextTooltip';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Users/UserProfile/UserProfile.tsx b/packages/manager/src/features/Users/UserProfile/UserProfile.tsx
index d535ed50dcf..a422515620f 100644
--- a/packages/manager/src/features/Users/UserProfile/UserProfile.tsx
+++ b/packages/manager/src/features/Users/UserProfile/UserProfile.tsx
@@ -1,3 +1,4 @@
+import { Stack } from '@linode/ui';
import React from 'react';
import { useParams } from 'react-router-dom';
@@ -5,7 +6,6 @@ import { CircleProgress } from 'src/components/CircleProgress';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { ErrorState } from 'src/components/ErrorState/ErrorState';
import { NotFound } from 'src/components/NotFound';
-import { Stack } from 'src/components/Stack';
import { useAccountUser } from 'src/queries/account/users';
import { DeleteUserPanel } from './DeleteUserPanel';
diff --git a/packages/manager/src/features/Users/UserRow.tsx b/packages/manager/src/features/Users/UserRow.tsx
index e49877489e9..e34eebd8ad0 100644
--- a/packages/manager/src/features/Users/UserRow.tsx
+++ b/packages/manager/src/features/Users/UserRow.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Stack } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import React from 'react';
@@ -7,7 +7,6 @@ import { Chip } from 'src/components/Chip';
import { DateTimeDisplay } from 'src/components/DateTimeDisplay';
import { Hidden } from 'src/components/Hidden';
import { MaskableText } from 'src/components/MaskableText/MaskableText';
-import { Stack } from 'src/components/Stack';
import { StatusIcon } from 'src/components/StatusIcon/StatusIcon';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
diff --git a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice.tsx b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice.tsx
index 66f379fc05c..53220e98caa 100644
--- a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice.tsx
@@ -1,7 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
-
import { CANNOT_CREATE_VPC_MESSAGE } from '../../constants';
export const CannotCreateVPCNotice = (
diff --git a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx
index 313ac63afe1..0e514bec10c 100644
--- a/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreate/FormComponents/SubnetContent.tsx
@@ -1,8 +1,8 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { useLocation } from 'react-router-dom';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { sendLinodeCreateFormInputEvent } from 'src/utilities/analytics/formEventAnalytics';
import { getQueryParamsFromQueryString } from 'src/utilities/queryParams';
diff --git a/packages/manager/src/features/VPCs/VPCCreate/MultipleSubnetInput.tsx b/packages/manager/src/features/VPCs/VPCCreate/MultipleSubnetInput.tsx
index 7c5dc9d88e5..1a4bcf8fcc3 100644
--- a/packages/manager/src/features/VPCs/VPCCreate/MultipleSubnetInput.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreate/MultipleSubnetInput.tsx
@@ -1,8 +1,8 @@
+import { Divider } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { Button } from 'src/components/Button/Button';
-import { Divider } from 'src/components/Divider';
import {
DEFAULT_SUBNET_IPV4_VALUE,
getRecommendedSubnetIPv4,
diff --git a/packages/manager/src/features/VPCs/VPCCreate/SubnetNode.tsx b/packages/manager/src/features/VPCs/VPCCreate/SubnetNode.tsx
index b47d5fa1b12..3bf621de650 100644
--- a/packages/manager/src/features/VPCs/VPCCreate/SubnetNode.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreate/SubnetNode.tsx
@@ -1,6 +1,5 @@
-import { FormHelperText } from '@linode/ui';
+import { FormHelperText, Stack } from '@linode/ui';
import Close from '@mui/icons-material/Close';
-import Stack from '@mui/material/Stack';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
diff --git a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.tsx b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.tsx
index 8995ec53601..161425ee5c4 100644
--- a/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreate/VPCCreate.tsx
@@ -1,4 +1,4 @@
-import { Paper } from '@linode/ui';
+import { Notice, Paper } from '@linode/ui';
import { styled } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import { createLazyRoute } from '@tanstack/react-router';
@@ -7,7 +7,6 @@ import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { DocumentTitleSegment } from 'src/components/DocumentTitle';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Notice } from 'src/components/Notice/Notice';
import { VPC_GETTING_STARTED_LINK } from 'src/features/VPCs/constants';
import { SubnetContent } from 'src/features/VPCs/VPCCreate/FormComponents/SubnetContent';
import { useCreateVPC } from 'src/hooks/useCreateVPC';
diff --git a/packages/manager/src/features/VPCs/VPCCreateDrawer/VPCCreateDrawer.tsx b/packages/manager/src/features/VPCs/VPCCreateDrawer/VPCCreateDrawer.tsx
index f22abc2de96..d477be0dadb 100644
--- a/packages/manager/src/features/VPCs/VPCCreateDrawer/VPCCreateDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCCreateDrawer/VPCCreateDrawer.tsx
@@ -1,11 +1,10 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { CannotCreateVPCNotice } from 'src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice';
import { SubnetContent } from 'src/features/VPCs/VPCCreate/FormComponents/SubnetContent';
import { VPCTopSectionContent } from 'src/features/VPCs/VPCCreate/FormComponents/VPCTopSectionContent';
diff --git a/packages/manager/src/features/VPCs/VPCDetail/AssignIPRanges.tsx b/packages/manager/src/features/VPCs/VPCDetail/AssignIPRanges.tsx
index 8856b1c656a..d743659cbe2 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/AssignIPRanges.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/AssignIPRanges.tsx
@@ -1,11 +1,9 @@
-import { Box } from '@linode/ui';
+import { Box, Divider, Notice } from '@linode/ui';
import { styled, useTheme } from '@mui/material/styles';
import * as React from 'react';
-import { Divider } from 'src/components/Divider';
import { Link } from 'src/components/Link';
import { MultipleIPInput } from 'src/components/MultipleIPInput/MultipleIPInput';
-import { Notice } from 'src/components/Notice/Notice';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
import {
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
index 7a53ece0254..5cac4973cf4 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx
@@ -1,5 +1,5 @@
import { appendConfigInterface } from '@linode/api-v4';
-import { Box, FormHelperText } from '@linode/ui';
+import { Box, FormHelperText, Notice } from '@linode/ui';
import { useTheme } from '@mui/material/styles';
import { useFormik } from 'formik';
import * as React from 'react';
@@ -11,7 +11,6 @@ import { DownloadCSV } from 'src/components/DownloadCSV/DownloadCSV';
import { Drawer } from 'src/components/Drawer';
import { FormControlLabel } from 'src/components/FormControlLabel';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { RemovableSelectionsListTable } from 'src/components/RemovableSelectionsList/RemovableSelectionsListTable';
import { TextField } from 'src/components/TextField';
import { TooltipIcon } from 'src/components/TooltipIcon';
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetCreateDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetCreateDrawer.tsx
index d3d1326a69a..23bf08ab451 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetCreateDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetCreateDrawer.tsx
@@ -1,4 +1,5 @@
import { yupResolver } from '@hookform/resolvers/yup';
+import { Notice, Stack } from '@linode/ui';
import { FormHelperText } from '@linode/ui';
import { createSubnetSchema } from '@linode/validation';
import * as React from 'react';
@@ -6,8 +7,6 @@ import { Controller, useForm } from 'react-hook-form';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { useGrants, useProfile } from 'src/queries/profile/profile';
import { useCreateSubnetMutation, useVPCQuery } from 'src/queries/vpcs/vpcs';
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetEditDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetEditDrawer.tsx
index 28b079c9bb2..9dfb64e400e 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetEditDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetEditDrawer.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { useGrants, useProfile } from 'src/queries/profile/profile';
import { useUpdateSubnetMutation } from 'src/queries/vpcs/vpcs';
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.styles.ts b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.styles.ts
index 066e2105715..4e75344d122 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.styles.ts
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.styles.ts
@@ -1,6 +1,6 @@
+import { WarningIcon } from '@linode/ui';
import { styled } from '@mui/material/styles';
-import Warning from 'src/assets/icons/warning.svg';
import { TableCell } from 'src/components/TableCell';
import { TableRow } from 'src/components/TableRow';
@@ -40,7 +40,7 @@ export const StyledTableHeadCell = styled(TableCell, {
borderTop: 'none !important',
}));
-export const StyledWarningIcon = styled(Warning, {
+export const StyledWarningIcon = styled(WarningIcon, {
label: 'StyledWarningIcon',
})(({ theme }) => ({
fill: theme.color.yellow,
diff --git a/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx b/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
index 8b726a12699..eeda7874cd8 100644
--- a/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCDetail/SubnetUnassignLinodesDrawer.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { Stack, Typography } from '@mui/material';
import { useQueryClient } from '@tanstack/react-query';
import { useFormik } from 'formik';
@@ -8,7 +8,6 @@ import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Autocomplete } from 'src/components/Autocomplete/Autocomplete';
import { DownloadCSV } from 'src/components/DownloadCSV/DownloadCSV';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { RemovableSelectionsListTable } from 'src/components/RemovableSelectionsList/RemovableSelectionsListTable';
import { SUBNET_UNASSIGN_LINODES_WARNING } from 'src/features/VPCs/constants';
import { useFormattedDate } from 'src/hooks/useFormattedDate';
diff --git a/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx b/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx
index d8264de1f43..c9034543df6 100644
--- a/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx
+++ b/packages/manager/src/features/VPCs/VPCLanding/VPCEditDrawer.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import { updateVPCSchema } from '@linode/validation/lib/vpcs.schema';
import { useFormik } from 'formik';
import * as React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
import { TextField } from 'src/components/TextField';
import { useGrants, useProfile } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Volumes/AttachVolumeDrawer.tsx b/packages/manager/src/features/Volumes/AttachVolumeDrawer.tsx
index b71987020a3..6a2d0ffa4b5 100644
--- a/packages/manager/src/features/Volumes/AttachVolumeDrawer.tsx
+++ b/packages/manager/src/features/Volumes/AttachVolumeDrawer.tsx
@@ -1,4 +1,4 @@
-import { Box, FormHelperText } from '@linode/ui';
+import { Box, FormHelperText, Notice } from '@linode/ui';
import { styled } from '@mui/material/styles';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -10,7 +10,6 @@ import { Checkbox } from 'src/components/Checkbox';
import { Drawer } from 'src/components/Drawer';
import { BLOCK_STORAGE_ENCRYPTION_SETTING_IMMUTABLE_COPY } from 'src/components/Encryption/constants';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
-import { Notice } from 'src/components/Notice/Notice';
import { LinodeSelect } from 'src/features/Linodes/LinodeSelect/LinodeSelect';
import { useEventsPollingActions } from 'src/queries/events/events';
import { useGrants } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Volumes/CloneVolumeDrawer.tsx b/packages/manager/src/features/Volumes/CloneVolumeDrawer.tsx
index 1bd690b3043..5a8a21b59d9 100644
--- a/packages/manager/src/features/Volumes/CloneVolumeDrawer.tsx
+++ b/packages/manager/src/features/Volumes/CloneVolumeDrawer.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { CloneVolumeSchema } from '@linode/validation/lib/volumes.schema';
import { useFormik } from 'formik';
import * as React from 'react';
@@ -8,7 +8,6 @@ import { Checkbox } from 'src/components/Checkbox';
import { Drawer } from 'src/components/Drawer';
import { BLOCK_STORAGE_CLONING_INHERITANCE_CAVEAT } from 'src/components/Encryption/constants';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
-import { Notice } from 'src/components/Notice/Notice';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Volumes/DeleteVolumeDialog.tsx b/packages/manager/src/features/Volumes/DeleteVolumeDialog.tsx
index cc0db32476a..b36575e65b6 100644
--- a/packages/manager/src/features/Volumes/DeleteVolumeDialog.tsx
+++ b/packages/manager/src/features/Volumes/DeleteVolumeDialog.tsx
@@ -1,6 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { useEventsPollingActions } from 'src/queries/events/events';
import { useDeleteVolumeMutation } from 'src/queries/volumes/volumes';
diff --git a/packages/manager/src/features/Volumes/DetachVolumeDialog.tsx b/packages/manager/src/features/Volumes/DetachVolumeDialog.tsx
index 4e1d7d6e186..06cf1444af6 100644
--- a/packages/manager/src/features/Volumes/DetachVolumeDialog.tsx
+++ b/packages/manager/src/features/Volumes/DetachVolumeDialog.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import { useSnackbar } from 'notistack';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { TypeToConfirmDialog } from 'src/components/TypeToConfirmDialog/TypeToConfirmDialog';
import { Typography } from 'src/components/Typography';
import { useEventsPollingActions } from 'src/queries/events/events';
diff --git a/packages/manager/src/features/Volumes/EditVolumeDrawer.tsx b/packages/manager/src/features/Volumes/EditVolumeDrawer.tsx
index 94865d8de53..84ba1c888dc 100644
--- a/packages/manager/src/features/Volumes/EditVolumeDrawer.tsx
+++ b/packages/manager/src/features/Volumes/EditVolumeDrawer.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { UpdateVolumeSchema } from '@linode/validation';
import { useFormik } from 'formik';
import React from 'react';
@@ -8,7 +8,6 @@ import { Checkbox } from 'src/components/Checkbox';
import { Drawer } from 'src/components/Drawer';
import { BLOCK_STORAGE_ENCRYPTION_SETTING_IMMUTABLE_COPY } from 'src/components/Encryption/constants';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
-import { Notice } from 'src/components/Notice/Notice';
import { TagsInput } from 'src/components/TagsInput/TagsInput';
import { TextField } from 'src/components/TextField';
import { useGrants } from 'src/queries/profile/profile';
diff --git a/packages/manager/src/features/Volumes/ResizeVolumeDrawer.tsx b/packages/manager/src/features/Volumes/ResizeVolumeDrawer.tsx
index 550e9afa576..d24e6992bba 100644
--- a/packages/manager/src/features/Volumes/ResizeVolumeDrawer.tsx
+++ b/packages/manager/src/features/Volumes/ResizeVolumeDrawer.tsx
@@ -1,4 +1,4 @@
-import { Volume } from '@linode/api-v4';
+import { Notice } from '@linode/ui';
import { ResizeVolumeSchema } from '@linode/validation';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -6,7 +6,6 @@ import React from 'react';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
import { Drawer } from 'src/components/Drawer';
-import { Notice } from 'src/components/Notice/Notice';
import { useEventsPollingActions } from 'src/queries/events/events';
import { useGrants } from 'src/queries/profile/profile';
import {
@@ -22,6 +21,8 @@ import { PRICES_RELOAD_ERROR_NOTICE_TEXT } from 'src/utilities/pricing/constants
import { PricePanel } from './VolumeDrawer/PricePanel';
import { SizeField } from './VolumeDrawer/SizeField';
+import type { Volume } from '@linode/api-v4';
+
interface Props {
onClose: () => void;
open: boolean;
diff --git a/packages/manager/src/features/Volumes/VolumeCreate.tsx b/packages/manager/src/features/Volumes/VolumeCreate.tsx
index cc2ac13e4ea..4ebd1772e17 100644
--- a/packages/manager/src/features/Volumes/VolumeCreate.tsx
+++ b/packages/manager/src/features/Volumes/VolumeCreate.tsx
@@ -1,4 +1,4 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Notice, Paper, Stack } from '@linode/ui';
import { CreateVolumeSchema } from '@linode/validation/lib/volumes.schema';
import { useTheme } from '@mui/material/styles';
import { createLazyRoute } from '@tanstack/react-router';
@@ -22,9 +22,7 @@ import { Encryption } from 'src/components/Encryption/Encryption';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
import { ErrorMessage } from 'src/components/ErrorMessage';
import { LandingHeader } from 'src/components/LandingHeader';
-import { Notice } from 'src/components/Notice/Notice';
import { RegionSelect } from 'src/components/RegionSelect/RegionSelect';
-import { Stack } from 'src/components/Stack';
import { TextField } from 'src/components/TextField';
import { TooltipIcon } from 'src/components/TooltipIcon';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/Volumes/VolumeDetailsDrawer.tsx b/packages/manager/src/features/Volumes/VolumeDetailsDrawer.tsx
index 5be75d6d874..ac7ef2ce153 100644
--- a/packages/manager/src/features/Volumes/VolumeDetailsDrawer.tsx
+++ b/packages/manager/src/features/Volumes/VolumeDetailsDrawer.tsx
@@ -1,11 +1,12 @@
-import { Volume } from '@linode/api-v4';
+import { Stack } from '@linode/ui';
import React from 'react';
import { CopyableTextField } from 'src/components/CopyableTextField/CopyableTextField';
import { Drawer } from 'src/components/Drawer';
-import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
+import type { Volume } from '@linode/api-v4';
+
interface Props {
onClose: () => void;
open: boolean;
diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAddDrawer.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAddDrawer.tsx
index cb0c40d646f..4973aafbad1 100644
--- a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAddDrawer.tsx
+++ b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAddDrawer.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { Drawer } from 'src/components/Drawer';
import { BLOCK_STORAGE_CLIENT_LIBRARY_UPDATE_REQUIRED_COPY } from 'src/components/Encryption/constants';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { LinodeVolumeAttachForm } from './LinodeVolumeAttachForm';
diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAttachForm.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAttachForm.tsx
index 8aa76a1345a..51b4b9e4c0d 100644
--- a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAttachForm.tsx
+++ b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeAttachForm.tsx
@@ -1,10 +1,10 @@
+import { Notice } from '@linode/ui';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
import * as React from 'react';
import { number, object } from 'yup';
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';
-import { Notice } from 'src/components/Notice/Notice';
import { useEventsPollingActions } from 'src/queries/events/events';
import { useGrants } from 'src/queries/profile/profile';
import {
diff --git a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx
index bc07204f6ba..ad3a3ae8d98 100644
--- a/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx
+++ b/packages/manager/src/features/Volumes/VolumeDrawer/LinodeVolumeCreateForm.tsx
@@ -1,4 +1,4 @@
-import { Box } from '@linode/ui';
+import { Box, Notice } from '@linode/ui';
import { CreateVolumeSchema } from '@linode/validation/lib/volumes.schema';
import { useFormik } from 'formik';
import { useSnackbar } from 'notistack';
@@ -13,7 +13,6 @@ import {
} from 'src/components/Encryption/constants';
import { Encryption } from 'src/components/Encryption/Encryption';
import { useIsBlockStorageEncryptionFeatureEnabled } from 'src/components/Encryption/utils';
-import { Notice } from 'src/components/Notice/Notice';
import { TagsInput } from 'src/components/TagsInput/TagsInput';
import { TextField } from 'src/components/TextField';
import { Typography } from 'src/components/Typography';
diff --git a/packages/manager/src/features/components/PlansPanel/DisabledPlanSelectionTooltip.tsx b/packages/manager/src/features/components/PlansPanel/DisabledPlanSelectionTooltip.tsx
index 9a9bd187c8c..5a7d52752e8 100644
--- a/packages/manager/src/features/components/PlansPanel/DisabledPlanSelectionTooltip.tsx
+++ b/packages/manager/src/features/components/PlansPanel/DisabledPlanSelectionTooltip.tsx
@@ -1,5 +1,4 @@
-import { IconButton } from '@linode/ui';
-import { Tooltip } from '@linode/ui';
+import { IconButton, Tooltip } from '@linode/ui';
import HelpOutline from '@mui/icons-material/HelpOutline';
import * as React from 'react';
diff --git a/packages/manager/src/features/components/PlansPanel/DistributedRegionPlanTable.tsx b/packages/manager/src/features/components/PlansPanel/DistributedRegionPlanTable.tsx
index ea927d09792..431570f54d5 100644
--- a/packages/manager/src/features/components/PlansPanel/DistributedRegionPlanTable.tsx
+++ b/packages/manager/src/features/components/PlansPanel/DistributedRegionPlanTable.tsx
@@ -1,8 +1,7 @@
-import { Box, Paper } from '@linode/ui';
+import { Box, Notice, Paper } from '@linode/ui';
import { styled } from '@mui/material/styles';
import React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import type { SxProps, Theme } from '@mui/material/styles';
diff --git a/packages/manager/src/features/components/PlansPanel/MetalNotice.tsx b/packages/manager/src/features/components/PlansPanel/MetalNotice.tsx
index 35ef6810ec4..55044502c6d 100644
--- a/packages/manager/src/features/components/PlansPanel/MetalNotice.tsx
+++ b/packages/manager/src/features/components/PlansPanel/MetalNotice.tsx
@@ -1,6 +1,6 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
-import { Notice } from 'src/components/Notice/Notice';
import { useRegionsQuery } from 'src/queries/regions/regions';
import { StyledTypography } from './PlansPanel.styles';
diff --git a/packages/manager/src/features/components/PlansPanel/PlanContainer.styles.ts b/packages/manager/src/features/components/PlansPanel/PlanContainer.styles.ts
index 6260a155855..dac60cbc026 100644
--- a/packages/manager/src/features/components/PlansPanel/PlanContainer.styles.ts
+++ b/packages/manager/src/features/components/PlansPanel/PlanContainer.styles.ts
@@ -12,14 +12,15 @@ interface StyledTableCellPropsProps extends TableCellProps {
export const StyledTable = styled(Table, {
label: 'StyledTable',
-})(({ theme }) => ({
+})({
overflowX: 'hidden',
-}));
+});
export const StyledTableCell = styled(TableCell, {
label: 'StyledTableCell',
shouldForwardProp: omittedProps(['isPlanCell']),
})(({ theme, ...props }) => ({
+ ...(props.isPlanCell && { width: '30%' }),
'&.emptyCell': {
borderRight: 'none',
},
diff --git a/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx b/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx
index 512bcbb91fb..d0cf1a7231d 100644
--- a/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx
+++ b/packages/manager/src/features/components/PlansPanel/PlanContainer.tsx
@@ -1,10 +1,9 @@
-import { LinodeTypeClass } from '@linode/api-v4/lib/linodes';
+import { Notice } from '@linode/ui';
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
import { useLocation } from 'react-router-dom';
import { Hidden } from 'src/components/Hidden';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { useFlags } from 'src/hooks/useFlags';
import { PLAN_SELECTION_NO_REGION_SELECTED_MESSAGE } from 'src/utilities/pricing/constants';
@@ -14,7 +13,8 @@ import { PlanSelectionTable } from './PlanSelectionTable';
import type { PlanWithAvailability } from './types';
import type { Region } from '@linode/api-v4';
-
+import type { LinodeTypeClass } from '@linode/api-v4/lib/linodes';
+import type { Theme } from '@mui/material/styles';
export interface PlanContainerProps {
allDisabledPlans: PlanWithAvailability[];
currentPlanHeading?: string;
@@ -50,7 +50,8 @@ export const PlanContainer = (props: PlanContainerProps) => {
// Show the Transfer column if, for any plan, the api returned data and we're not in the Database Create flow
const showTransfer =
- showLimits && plans.some((plan: PlanWithAvailability) => plan.transfer);
+ showLimits &&
+ plans.some((plan: PlanWithAvailability) => plan.transfer !== undefined);
// Show the Network throughput column if, for any plan, the api returned data (currently Bare Metal does not)
const showNetwork =
@@ -64,6 +65,10 @@ export const PlanContainer = (props: PlanContainerProps) => {
const shouldDisplayNoRegionSelectedMessage =
!selectedRegionId && !isDatabaseCreateFlow && !isDatabaseResizeFlow;
+ const isDatabaseGA =
+ !flags.dbaasV2?.beta &&
+ flags.dbaasV2?.enabled &&
+ (isDatabaseCreateFlow || isDatabaseResizeFlow);
interface PlanSelectionDividerTable {
header?: string;
planFilter?: (plan: PlanWithAvailability) => boolean;
@@ -141,6 +146,18 @@ export const PlanContainer = (props: PlanContainerProps) => {
return (
+ {isCreate && isDatabaseGA && (
+ ({
+ marginBottom: theme.spacing(2),
+ marginLeft: theme.spacing(1),
+ marginTop: theme.spacing(1),
+ })}
+ >
+ Usable storage is smaller than the actual plan storage due to the
+ overhead from the database platform.
+
+ )}
{shouldDisplayNoRegionSelectedMessage ? (
{
}
key={`plan-filter-${idx}`}
planFilter={table.planFilter}
+ plans={plans}
showNetwork={showNetwork}
showTransfer={showTransfer}
/>
@@ -213,6 +231,7 @@ export const PlanContainer = (props: PlanContainerProps) => {
renderPlanSelection={renderPlanSelection}
showNetwork={showNetwork}
showTransfer={showTransfer}
+ showUsableStorage={isDatabaseCreateFlow || isDatabaseResizeFlow}
/>
)
)}
diff --git a/packages/manager/src/features/components/PlansPanel/PlanInformation.tsx b/packages/manager/src/features/components/PlansPanel/PlanInformation.tsx
index 56c159989a0..3d45ad31d42 100644
--- a/packages/manager/src/features/components/PlansPanel/PlanInformation.tsx
+++ b/packages/manager/src/features/components/PlansPanel/PlanInformation.tsx
@@ -1,7 +1,7 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { Link } from 'src/components/Link';
-import { Notice } from 'src/components/Notice/Notice';
import { Typography } from 'src/components/Typography';
import { StyledNoticeTypography } from 'src/features/components/PlansPanel/PlansAvailabilityNotice.styles';
import { useFlags } from 'src/hooks/useFlags';
@@ -45,6 +45,7 @@ export const PlanInformation = (props: PlanInformationProps) => {
return Boolean(disabledClasses?.includes(thisClass));
};
const showGPUEgressBanner = Boolean(useFlags().gpuv2?.egressBanner);
+ const showTransferBanner = Boolean(useFlags().gpuv2?.transferBanner);
return (
<>
@@ -68,6 +69,23 @@ export const PlanInformation = (props: PlanInformationProps) => {
)}
+ {showTransferBanner && (
+
+ theme.font.bold}
+ fontSize="1rem"
+ >
+ Some plans do not include bundled network transfer. If the
+ transfer allotment is 0, all outbound network transfer is
+ subject to charges.
+
+
+ Learn more about transfer costs
+
+ .
+
+
+ )}
{
{showTransfer ? (
- {plan.transfer ? <>{plan.transfer / 1000} TB> : ''}
+ {plan.transfer !== undefined ? (
+ <>{plan.transfer / 1000} TB>
+ ) : (
+ ''
+ )}
) : null}
{showNetwork ? (
diff --git a/packages/manager/src/features/components/PlansPanel/PlanSelectionTable.tsx b/packages/manager/src/features/components/PlansPanel/PlanSelectionTable.tsx
index ee13cbe28b0..624a6605045 100644
--- a/packages/manager/src/features/components/PlansPanel/PlanSelectionTable.tsx
+++ b/packages/manager/src/features/components/PlansPanel/PlanSelectionTable.tsx
@@ -4,10 +4,14 @@ import { TableBody } from 'src/components/TableBody';
import { TableHead } from 'src/components/TableHead';
import { TableRow } from 'src/components/TableRow';
import { TableRowEmpty } from 'src/components/TableRowEmpty/TableRowEmpty';
+import { TooltipIcon } from 'src/components/TooltipIcon';
+import { useFlags } from 'src/hooks/useFlags';
import { PLAN_SELECTION_NO_REGION_SELECTED_MESSAGE } from 'src/utilities/pricing/constants';
import { StyledTable, StyledTableCell } from './PlanContainer.styles';
-import { PlanWithAvailability } from './types';
+
+import type { PlanWithAvailability } from './types';
+import type { TooltipIconStatus } from 'src/components/TooltipIcon';
interface PlanSelectionFilterOptionsTable {
header?: string;
@@ -17,12 +21,14 @@ interface PlanSelectionFilterOptionsTable {
interface PlanSelectionTableProps {
filterOptions?: PlanSelectionFilterOptionsTable;
planFilter?: (plan: PlanWithAvailability) => boolean;
+ plans?: PlanWithAvailability[];
renderPlanSelection: (
filterOptions?: PlanSelectionFilterOptionsTable | undefined
) => React.JSX.Element[];
shouldDisplayNoRegionSelectedMessage: boolean;
showNetwork?: boolean;
showTransfer?: boolean;
+ showUsableStorage?: boolean;
}
const tableCells = [
@@ -45,12 +51,51 @@ const tableCells = [
export const PlanSelectionTable = (props: PlanSelectionTableProps) => {
const {
filterOptions,
+ plans,
renderPlanSelection,
shouldDisplayNoRegionSelectedMessage,
showNetwork: shouldShowNetwork,
showTransfer: shouldShowTransfer,
+ showUsableStorage,
} = props;
+ const flags = useFlags();
+
+ const showTransferTooltip = React.useCallback(
+ (cellName: string) =>
+ plans?.some((plan) => {
+ return (
+ flags.gpuv2?.transferBanner &&
+ plan.class === 'gpu' &&
+ filterOptions?.header?.includes('Ada') &&
+ cellName === 'Transfer'
+ );
+ }),
+ [plans, filterOptions, flags.gpuv2]
+ );
+
+ const showUsableStorageTooltip = (cellName: string) =>
+ cellName === 'Usable Storage';
+ const showTooltip = (
+ status: TooltipIconStatus,
+ text: JSX.Element | string,
+ width?: number
+ ) => {
+ return (
+
+ );
+ };
return (
{
) {
return null;
}
+ if (
+ showUsableStorage &&
+ !flags.dbaasV2?.beta &&
+ flags.dbaasV2?.enabled &&
+ cellName === 'Storage'
+ ) {
+ cellName = 'Usable Storage';
+ }
return (
{
{isPlanCell && filterOptions?.header
? filterOptions?.header
: cellName}
+ {showTransferTooltip(cellName) &&
+ showTooltip(
+ 'help',
+ 'Some plans do not include bundled network transfer. If the transfer allotment is 0, all outbound network transfer is subject to charges.'
+ )}
+ {showUsableStorageTooltip(cellName) &&
+ showTooltip(
+ 'help',
+ 'Usable storage is smaller than the actual plan storage due to the overhead from the database platform.',
+ 240
+ )}
);
})}
diff --git a/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.tsx b/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.tsx
index a839965ee10..c80c5be86bb 100644
--- a/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.tsx
+++ b/packages/manager/src/features/components/PlansPanel/PlansAvailabilityNotice.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { ListItem } from 'src/components/ListItem';
-import { Notice } from 'src/components/Notice/Notice';
-import { getCapabilityFromPlanType } from 'src/utilities/planNotices';
import { formatPlanTypes } from 'src/utilities/planNotices';
+import { getCapabilityFromPlanType } from 'src/utilities/planNotices';
import {
StyledFormattedRegionList,
diff --git a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx
index 833cd24a11e..3cf6cc8a6bf 100644
--- a/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx
+++ b/packages/manager/src/features/components/PlansPanel/PlansPanel.tsx
@@ -1,9 +1,9 @@
+import { Notice } from '@linode/ui';
import * as React from 'react';
import { useLocation } from 'react-router-dom';
-import { Notice } from 'src/components/Notice/Notice';
-import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils';
import { getIsDistributedRegion } from 'src/components/RegionSelect/RegionSelect.utils';
+import { useIsGeckoEnabled } from 'src/components/RegionSelect/RegionSelect.utils';
import { isDistributedRegionSupported } from 'src/components/RegionSelect/RegionSelect.utils';
import { TabbedPanel } from 'src/components/TabbedPanel/TabbedPanel';
import { useFlags } from 'src/hooks/useFlags';
diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts
index a1bf4dfe4bf..971878662c1 100644
--- a/packages/manager/src/mocks/serverHandlers.ts
+++ b/packages/manager/src/mocks/serverHandlers.ts
@@ -225,11 +225,8 @@ const databases = [
const dedicatedTypes = databaseTypeFactory.buildList(7, {
class: 'dedicated',
});
- const premiumTypes = databaseTypeFactory.buildList(7, {
- class: 'premium',
- });
return HttpResponse.json(
- makeResourcePage([...standardTypes, ...dedicatedTypes, ...premiumTypes])
+ makeResourcePage([...standardTypes, ...dedicatedTypes])
);
}),
@@ -238,32 +235,32 @@ const databases = [
const engine2 = databaseEngineFactory.buildList(3, {
engine: 'postgresql',
});
- const engine3 = databaseEngineFactory.buildList(3, {
- engine: 'mongodb',
- });
- const combinedList = [...engine1, ...engine2, ...engine3];
+ const combinedList = [...engine1, ...engine2];
return HttpResponse.json(makeResourcePage(combinedList));
}),
http.get('*/databases/:engine/instances/:id', ({ params }) => {
- const database = databaseFactory.build({
- compression_type: params.engine === 'mongodb' ? 'none' : undefined,
+ const isDefault = Number(params.id) % 2 !== 0;
+ const db: Record = {
engine: params.engine as 'mysql',
id: Number(params.id),
label: `database-${params.id}`,
- replication_commit_type:
- params.engine === 'postgresql' ? 'local' : undefined,
- replication_type:
+ platform: isDefault ? 'rdbms-default' : 'rdbms-legacy',
+ };
+ if (!isDefault) {
+ db.replication_commit_type =
+ params.engine === 'postgresql' ? 'local' : undefined;
+ db.replication_type =
params.engine === 'mysql'
? pickRandom(possibleMySQLReplicationTypes)
: params.engine === 'postgresql'
? pickRandom(possiblePostgresReplicationTypes)
- : (undefined as any),
- ssl_connection: true,
- storage_engine: params.engine === 'mongodb' ? 'wiredtiger' : undefined,
- });
+ : (undefined as any);
+ db.ssl_connection = true;
+ }
+ const database = databaseFactory.build(db);
return HttpResponse.json(database);
}),
@@ -392,7 +389,17 @@ const nanodeType = linodeTypeFactory.build({ id: 'g6-nanode-1' });
const standardTypes = linodeTypeFactory.buildList(7);
const dedicatedTypes = dedicatedTypeFactory.buildList(7);
const proDedicatedType = proDedicatedTypeFactory.build();
-
+const gpuTypesAda = linodeTypeFactory.buildList(7, {
+ class: 'gpu',
+ gpus: 5,
+ label: 'Ada Lovelace',
+ transfer: 0,
+});
+const gpuTypesRX = linodeTypeFactory.buildList(7, {
+ class: 'gpu',
+ gpus: 1,
+ transfer: 5000,
+});
const proxyAccountUser = accountUserFactory.build({
email: 'partner@proxy.com',
last_login: null,
@@ -586,6 +593,8 @@ export const handlers = [
nanodeType,
...standardTypes,
...dedicatedTypes,
+ ...gpuTypesAda,
+ ...gpuTypesRX,
proDedicatedType,
])
);
diff --git a/packages/manager/src/queries/types.ts b/packages/manager/src/queries/types.ts
index 8e736bfa1af..c40a91db098 100644
--- a/packages/manager/src/queries/types.ts
+++ b/packages/manager/src/queries/types.ts
@@ -25,7 +25,7 @@ export const useSpecificTypes = (types: string[], enabled = true) => {
return useQueries({
queries: types.map>((type) => ({
- enabled,
+ enabled: enabled && Boolean(type),
...linodeQueries.types._ctx.type(type),
...queryPresets.oneTimeFetch,
initialData() {
diff --git a/packages/manager/src/utilities/getEventsActionLink.ts b/packages/manager/src/utilities/getEventsActionLink.ts
index efd25755d06..0584e4b195c 100644
--- a/packages/manager/src/utilities/getEventsActionLink.ts
+++ b/packages/manager/src/utilities/getEventsActionLink.ts
@@ -6,6 +6,10 @@ export const getEngineFromDatabaseEntityURL = (url: string) => {
return url.match(/databases\/(\w*)\/instances/i)?.[1];
};
+export const getRegionFromObjectStorageEntityURL = (url: string) => {
+ return url.match(/\/buckets\/([^/]+)/)?.[1];
+};
+
export const getLinkForEvent = (action: EventAction, entity: Entity | null) => {
const type = entity?.type;
const id = entity?.id;
@@ -143,10 +147,14 @@ export const getLinkTargets = (entity: Entity | null) => {
return '/images';
case 'longview':
return '/longview';
- case 'volume':
- return '/volumes';
+ case 'object_storage_bucket':
+ return `/object-storage/buckets/${getRegionFromObjectStorageEntityURL(
+ entity.url
+ )}/${entity.label}`;
case 'placement_group':
return `/placement-groups/${entity.id}`;
+ case 'volume':
+ return '/volumes';
case 'vpc':
return `/vpcs/${entity.id}`;
default:
diff --git a/packages/ui/.changeset/pr-11125-added-1729871688954.md b/packages/ui/.changeset/pr-11125-added-1729871688954.md
deleted file mode 100644
index 98553459363..00000000000
--- a/packages/ui/.changeset/pr-11125-added-1729871688954.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-Tooltip component and story ([#11125](https://github.com/linode/manager/pull/11125))
diff --git a/packages/ui/.changeset/pr-11138-upcoming-features-1730101798188.md b/packages/ui/.changeset/pr-11138-upcoming-features-1730101798188.md
deleted file mode 100644
index bb0bd1164c4..00000000000
--- a/packages/ui/.changeset/pr-11138-upcoming-features-1730101798188.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Upcoming Features
----
-
-Add Alias tokens to theme ([#11138](https://github.com/linode/manager/pull/11138))
diff --git a/packages/ui/.changeset/pr-11157-tech-stories-1729787461166.md b/packages/ui/.changeset/pr-11157-tech-stories-1729787461166.md
deleted file mode 100644
index 92c48e1e383..00000000000
--- a/packages/ui/.changeset/pr-11157-tech-stories-1729787461166.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Tech Stories
----
-
-Remove `@types/node` dependency ([#11157](https://github.com/linode/manager/pull/11157))
diff --git a/packages/ui/.changeset/pr-11158-added-1729864026236.md b/packages/ui/.changeset/pr-11158-added-1729864026236.md
deleted file mode 100644
index 0f0762718da..00000000000
--- a/packages/ui/.changeset/pr-11158-added-1729864026236.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-IconButton component ([#11158](https://github.com/linode/manager/pull/11158))
diff --git a/packages/ui/.changeset/pr-11159-added-1729806253949.md b/packages/ui/.changeset/pr-11159-added-1729806253949.md
deleted file mode 100644
index f6fdef00aaf..00000000000
--- a/packages/ui/.changeset/pr-11159-added-1729806253949.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-Migrate `FormControl`, `FormHelperText`, `Input`, `InputAdornment`, and `InputLabel` from `manager` to `ui` package ([#11159](https://github.com/linode/manager/pull/11159))
diff --git a/packages/ui/.changeset/pr-11163-added-1729870035646.md b/packages/ui/.changeset/pr-11163-added-1729870035646.md
deleted file mode 100644
index 715546f8923..00000000000
--- a/packages/ui/.changeset/pr-11163-added-1729870035646.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-`Box` component from `manager` to `ui` package, part 1 ([#11163](https://github.com/linode/manager/pull/11163))
diff --git a/packages/ui/.changeset/pr-11164-added-1729871599808.md b/packages/ui/.changeset/pr-11164-added-1729871599808.md
deleted file mode 100644
index bf250e40f84..00000000000
--- a/packages/ui/.changeset/pr-11164-added-1729871599808.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-`Box` component from `manager` to `ui` package, part 2 ([#11164](https://github.com/linode/manager/pull/11164))
diff --git a/packages/ui/.changeset/pr-11174-added-1730757183801.md b/packages/ui/.changeset/pr-11174-added-1730757183801.md
new file mode 100644
index 00000000000..13ad8e0ff69
--- /dev/null
+++ b/packages/ui/.changeset/pr-11174-added-1730757183801.md
@@ -0,0 +1,5 @@
+---
+"@linode/ui": Added
+---
+
+Move `Notice` and `Tooltip` components to UI package ([#11174](https://github.com/linode/manager/pull/11174))
diff --git a/packages/ui/.changeset/pr-11183-added-1730215173323.md b/packages/ui/.changeset/pr-11183-added-1730215173323.md
deleted file mode 100644
index c5a6464588a..00000000000
--- a/packages/ui/.changeset/pr-11183-added-1730215173323.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/ui": Added
----
-
-Migrate `Paper` from `manager` to `ui` package ([#11183](https://github.com/linode/manager/pull/11183))
diff --git a/packages/ui/.changeset/pr-11205-added-1730725947069.md b/packages/ui/.changeset/pr-11205-added-1730725947069.md
new file mode 100644
index 00000000000..ea4ab9ebe4c
--- /dev/null
+++ b/packages/ui/.changeset/pr-11205-added-1730725947069.md
@@ -0,0 +1,5 @@
+---
+"@linode/ui": Added
+---
+
+Migrate Divider to ui package ([#11205](https://github.com/linode/manager/pull/11205))
diff --git a/packages/ui/.changeset/pr-11228-added-1730992441169.md b/packages/ui/.changeset/pr-11228-added-1730992441169.md
new file mode 100644
index 00000000000..7ff25354ed9
--- /dev/null
+++ b/packages/ui/.changeset/pr-11228-added-1730992441169.md
@@ -0,0 +1,5 @@
+---
+"@linode/ui": Added
+---
+
+`Stack` component to `ui` package ([#11228](https://github.com/linode/manager/pull/11228))
diff --git a/packages/ui/.eslintrc.json b/packages/ui/.eslintrc.json
index 3388926d8ea..c3e7d4466ad 100644
--- a/packages/ui/.eslintrc.json
+++ b/packages/ui/.eslintrc.json
@@ -56,7 +56,7 @@
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/interface-name-prefix": "off",
- "sonarjs/cognitive-complexity": "warn",
+ "sonarjs/cognitive-complexity": "off",
"sonarjs/no-duplicate-string": "warn",
"sonarjs/prefer-immediate-return": "warn",
"sonarjs/no-identical-functions": "warn",
diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md
index 2cd676b2c6c..95daf390d8c 100644
--- a/packages/ui/CHANGELOG.md
+++ b/packages/ui/CHANGELOG.md
@@ -1,3 +1,23 @@
+## [2024-11-12] - v0.3.0
+
+### Added:
+
+- Tooltip component and story ([#11125](https://github.com/linode/manager/pull/11125))
+- IconButton component ([#11158](https://github.com/linode/manager/pull/11158))
+- VisibilityIcon component and story ([#11143](https://github.com/linode/manager/pull/11143))
+- Migrate `FormControl`, `FormHelperText`, `Input`, `InputAdornment`, and `InputLabel` from `manager` to `ui` package ([#11159](https://github.com/linode/manager/pull/11159))
+- `Box` component from `manager` to `ui` package, part 1 ([#11163](https://github.com/linode/manager/pull/11163))
+- `Box` component from `manager` to `ui` package, part 2 ([#11164](https://github.com/linode/manager/pull/11164))
+- Migrate `Paper` from `manager` to `ui` package ([#11183](https://github.com/linode/manager/pull/11183))
+
+### Tech Stories:
+
+- Remove `@types/node` dependency ([#11157](https://github.com/linode/manager/pull/11157))
+
+### Upcoming Features:
+
+- Add Alias tokens to theme ([#11138](https://github.com/linode/manager/pull/11138))
+
## [2024-10-28] - v0.2.0
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 11fa556f13e..f4bac6c85eb 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -2,7 +2,7 @@
"name": "@linode/ui",
"author": "Linode",
"description": "Linode UI component library",
- "version": "0.2.0",
+ "version": "0.3.0",
"type": "module",
"main": "src/index.ts",
"module": "src/index.ts",
diff --git a/packages/manager/src/assets/icons/alert.svg b/packages/ui/src/assets/icons/alert.svg
similarity index 100%
rename from packages/manager/src/assets/icons/alert.svg
rename to packages/ui/src/assets/icons/alert.svg
diff --git a/packages/manager/src/assets/icons/check.svg b/packages/ui/src/assets/icons/check.svg
similarity index 100%
rename from packages/manager/src/assets/icons/check.svg
rename to packages/ui/src/assets/icons/check.svg
diff --git a/packages/ui/src/assets/icons/index.ts b/packages/ui/src/assets/icons/index.ts
new file mode 100644
index 00000000000..0103e50c33e
--- /dev/null
+++ b/packages/ui/src/assets/icons/index.ts
@@ -0,0 +1,3 @@
+export { default as AlertIcon } from './alert.svg';
+export { default as CheckIcon } from './check.svg';
+export { default as WarningIcon } from './warning.svg';
diff --git a/packages/manager/src/assets/icons/warning.svg b/packages/ui/src/assets/icons/warning.svg
similarity index 100%
rename from packages/manager/src/assets/icons/warning.svg
rename to packages/ui/src/assets/icons/warning.svg
diff --git a/packages/ui/src/assets/index.ts b/packages/ui/src/assets/index.ts
new file mode 100644
index 00000000000..838008a0b2f
--- /dev/null
+++ b/packages/ui/src/assets/index.ts
@@ -0,0 +1 @@
+export * from './icons';
diff --git a/packages/manager/src/components/Divider.stories.tsx b/packages/ui/src/components/Divider/Divider.stories.tsx
similarity index 73%
rename from packages/manager/src/components/Divider.stories.tsx
rename to packages/ui/src/components/Divider/Divider.stories.tsx
index 52619e8223f..364e02f1308 100644
--- a/packages/manager/src/components/Divider.stories.tsx
+++ b/packages/ui/src/components/Divider/Divider.stories.tsx
@@ -1,7 +1,7 @@
import { Meta, StoryObj } from '@storybook/react';
import React from 'react';
-import { Divider } from 'src/components/Divider';
+import { Divider } from './Divider';
const meta: Meta = {
component: Divider,
@@ -11,6 +11,12 @@ const meta: Meta = {
type Story = StoryObj;
export const Default: Story = {
+ args: {
+ absolute: false,
+ light: true,
+ variant: 'inset',
+ },
+
render: (args) => ,
};
diff --git a/packages/manager/src/components/Divider.tsx b/packages/ui/src/components/Divider/Divider.tsx
similarity index 88%
rename from packages/manager/src/components/Divider.tsx
rename to packages/ui/src/components/Divider/Divider.tsx
index 6186797e1e3..202d428a716 100644
--- a/packages/manager/src/components/Divider.tsx
+++ b/packages/ui/src/components/Divider/Divider.tsx
@@ -1,9 +1,8 @@
-import { omittedProps } from '@linode/ui';
import _Divider from '@mui/material/Divider';
import { styled } from '@mui/material/styles';
import * as React from 'react';
-
import type { DividerProps as _DividerProps } from '@mui/material/Divider';
+import { omittedProps } from '../../utilities';
export interface DividerProps extends _DividerProps {
dark?: boolean;
@@ -24,7 +23,7 @@ const StyledDivider = styled(_Divider, {
'light',
'dark',
]),
-})(({ theme, ...props }) => ({
+})(({ ...props }) => ({
marginBottom: props.spacingBottom,
marginTop: props.spacingTop,
}));
diff --git a/packages/ui/src/components/Divider/index.ts b/packages/ui/src/components/Divider/index.ts
new file mode 100644
index 00000000000..1f84888dc70
--- /dev/null
+++ b/packages/ui/src/components/Divider/index.ts
@@ -0,0 +1 @@
+export * from './Divider';
diff --git a/packages/ui/src/components/IconButton.tsx b/packages/ui/src/components/IconButton/IconButton.tsx
similarity index 100%
rename from packages/ui/src/components/IconButton.tsx
rename to packages/ui/src/components/IconButton/IconButton.tsx
diff --git a/packages/ui/src/components/IconButton/index.ts b/packages/ui/src/components/IconButton/index.ts
new file mode 100644
index 00000000000..1a85f0f7251
--- /dev/null
+++ b/packages/ui/src/components/IconButton/index.ts
@@ -0,0 +1 @@
+export * from './IconButton';
diff --git a/packages/manager/src/components/Notice/Notice.stories.tsx b/packages/ui/src/components/Notice/Notice.stories.tsx
similarity index 100%
rename from packages/manager/src/components/Notice/Notice.stories.tsx
rename to packages/ui/src/components/Notice/Notice.stories.tsx
diff --git a/packages/manager/src/components/Notice/Notice.styles.ts b/packages/ui/src/components/Notice/Notice.styles.ts
similarity index 100%
rename from packages/manager/src/components/Notice/Notice.styles.ts
rename to packages/ui/src/components/Notice/Notice.styles.ts
diff --git a/packages/manager/src/components/Notice/Notice.test.tsx b/packages/ui/src/components/Notice/Notice.test.tsx
similarity index 96%
rename from packages/manager/src/components/Notice/Notice.test.tsx
rename to packages/ui/src/components/Notice/Notice.test.tsx
index e7d536cd907..3e1e343d900 100644
--- a/packages/manager/src/components/Notice/Notice.test.tsx
+++ b/packages/ui/src/components/Notice/Notice.test.tsx
@@ -1,9 +1,9 @@
import { fireEvent } from '@testing-library/react';
import React from 'react';
-import { renderWithTheme } from 'src/utilities/testHelpers';
-
import { Notice } from './Notice';
+import { expect, describe, it, vi } from 'vitest';
+import { renderWithTheme } from '../../utilities/testHelpers';
describe('Notice Component', () => {
it('renders without errors with proper spacing', () => {
diff --git a/packages/manager/src/components/Notice/Notice.tsx b/packages/ui/src/components/Notice/Notice.tsx
similarity index 92%
rename from packages/manager/src/components/Notice/Notice.tsx
rename to packages/ui/src/components/Notice/Notice.tsx
index 55d7950def6..a75c8f428b7 100644
--- a/packages/manager/src/components/Notice/Notice.tsx
+++ b/packages/ui/src/components/Notice/Notice.tsx
@@ -1,15 +1,14 @@
import Grid from '@mui/material/Unstable_Grid2';
import * as React from 'react';
-import Error from 'src/assets/icons/alert.svg';
-import Check from 'src/assets/icons/check.svg';
-import Warning from 'src/assets/icons/warning.svg';
-import { Typography } from 'src/components/Typography';
+import { WarningIcon, AlertIcon as Error, CheckIcon } from '../../assets/icons';
+
+import { Typography } from '@mui/material';
import { useStyles } from './Notice.styles';
import type { Grid2Props } from '@mui/material/Unstable_Grid2';
-import type { TypographyProps } from 'src/components/Typography';
+import type { TypographyProps } from '@mui/material';
export type NoticeVariant =
| 'error'
@@ -181,10 +180,10 @@ export const Notice = (props: NoticeProps) => {
>
{important &&
((variantMap.success && (
-
+
)) ||
((variantMap.warning || variantMap.info) && (
-
+
)) ||
(variantMap.error && (
diff --git a/packages/ui/src/components/Notice/index.ts b/packages/ui/src/components/Notice/index.ts
new file mode 100644
index 00000000000..c2b2fea9b2b
--- /dev/null
+++ b/packages/ui/src/components/Notice/index.ts
@@ -0,0 +1 @@
+export * from './Notice';
diff --git a/packages/manager/src/components/Stack.stories.tsx b/packages/ui/src/components/Stack/Stack.stories.tsx
similarity index 93%
rename from packages/manager/src/components/Stack.stories.tsx
rename to packages/ui/src/components/Stack/Stack.stories.tsx
index 07d01cd91bc..d28537ad374 100644
--- a/packages/manager/src/components/Stack.stories.tsx
+++ b/packages/ui/src/components/Stack/Stack.stories.tsx
@@ -1,8 +1,8 @@
-import { Paper } from '@linode/ui';
import React from 'react';
-import { Divider } from './Divider';
import { Stack } from './Stack';
+import { Divider } from '../Divider';
+import { Paper } from '../Paper';
import type { Meta, StoryObj } from '@storybook/react';
diff --git a/packages/manager/src/components/Stack.tsx b/packages/ui/src/components/Stack/Stack.tsx
similarity index 78%
rename from packages/manager/src/components/Stack.tsx
rename to packages/ui/src/components/Stack/Stack.tsx
index abaec23cbf8..40e4bb915c2 100644
--- a/packages/manager/src/components/Stack.tsx
+++ b/packages/ui/src/components/Stack/Stack.tsx
@@ -1,6 +1,8 @@
-import { default as _Stack, StackProps } from '@mui/material/Stack';
+import { default as _Stack } from '@mui/material/Stack';
import React from 'react';
+import type { StackProps } from '@mui/material/Stack';
+
/**
* A Stack is a layout component that uses flexbox to
* vertically or horizontally align elements with optional spacing.
diff --git a/packages/ui/src/components/Stack/index.ts b/packages/ui/src/components/Stack/index.ts
new file mode 100644
index 00000000000..453d31cff2a
--- /dev/null
+++ b/packages/ui/src/components/Stack/index.ts
@@ -0,0 +1 @@
+export * from './Stack';
diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts
index d1887cebe1c..377df45a01b 100644
--- a/packages/ui/src/components/index.ts
+++ b/packages/ui/src/components/index.ts
@@ -1,12 +1,15 @@
export * from './BetaChip';
export * from './Box';
export * from './Chip';
+export * from './Divider';
export * from './FormControl';
export * from './FormHelperText';
export * from './IconButton';
export * from './Input';
export * from './InputAdornment';
export * from './InputLabel';
+export * from './Notice';
export * from './Paper';
+export * from './Stack';
export * from './Tooltip';
export * from './VisibilityTooltip';
diff --git a/packages/ui/src/env.d.ts b/packages/ui/src/env.d.ts
new file mode 100644
index 00000000000..f36c722baed
--- /dev/null
+++ b/packages/ui/src/env.d.ts
@@ -0,0 +1,4 @@
+declare module '*.svg' {
+ const src: ComponentClass;
+ export default src;
+}
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index 952d61ff3b1..f43dcafbcfd 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -1,3 +1,4 @@
+export * from './assets';
export * from './components';
export * from './foundations';
export * from './utilities';
diff --git a/packages/ui/src/utilities/omittedProps.ts b/packages/ui/src/utilities/omittedProps.ts
index 330b95f7f02..49af7e93bbd 100644
--- a/packages/ui/src/utilities/omittedProps.ts
+++ b/packages/ui/src/utilities/omittedProps.ts
@@ -15,10 +15,10 @@ export const omittedProps = (props: Array) => (
): boolean => !props.includes(prop);
/**
- * Helper to filter out props we spread into a component.
- * This helpers differs from `omittedProps` in that it omits the props
- * from the object instead of returning a boolean.
- * This util is a direct replacement for `omit` from lodash.
+ * Helper to filter out props we spread into a component.
+ * This helpers differs from `omittedProps` in that it omits the props
+ * from the object instead of returning a boolean.
+ * This util is a direct replacement for `omit` from lodash.
* @param props Array of props to filter out
* @param toRemove Array of props to remove
diff --git a/packages/ui/src/utilities/testHelpers.tsx b/packages/ui/src/utilities/testHelpers.tsx
new file mode 100644
index 00000000000..1fb55370691
--- /dev/null
+++ b/packages/ui/src/utilities/testHelpers.tsx
@@ -0,0 +1,28 @@
+import { StyledEngineProvider, ThemeProvider } from '@mui/material';
+import { render, RenderResult } from '@testing-library/react';
+import * as React from 'react';
+
+import * as themes from '../foundations/themes';
+
+interface Options {
+ theme?: 'dark' | 'light';
+}
+
+export const wrapWithTheme = (ui: any, options: Options = {}) => (
+
+
+ {ui.children ?? ui}
+
+
+);
+
+export const renderWithTheme = (
+ ui: React.ReactNode,
+ options: Options = {}
+): RenderResult => {
+ const renderResult = render(wrapWithTheme(ui, options));
+ return {
+ ...renderResult,
+ rerender: (ui) => renderResult.rerender(wrapWithTheme(ui, options)),
+ };
+};
diff --git a/packages/ui/testSetup.ts b/packages/ui/testSetup.ts
index e42051f8ee3..141cd45f9a4 100644
--- a/packages/ui/testSetup.ts
+++ b/packages/ui/testSetup.ts
@@ -1,5 +1,8 @@
+import * as matchers from '@testing-library/jest-dom/matchers';
import { cleanup } from '@testing-library/react';
-import { afterEach } from 'vitest';
+import { afterEach, expect } from 'vitest';
+
+expect.extend(matchers);
afterEach(() => {
cleanup();
diff --git a/packages/validation/.changeset/pr-11157-tech-stories-1729787428923.md b/packages/validation/.changeset/pr-11157-tech-stories-1729787428923.md
deleted file mode 100644
index c00c591cd64..00000000000
--- a/packages/validation/.changeset/pr-11157-tech-stories-1729787428923.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/validation": Tech Stories
----
-
-Remove `@types/node` dependency ([#11157](https://github.com/linode/manager/pull/11157))
diff --git a/packages/validation/CHANGELOG.md b/packages/validation/CHANGELOG.md
index f5ca2e4dac9..743ff5202bc 100644
--- a/packages/validation/CHANGELOG.md
+++ b/packages/validation/CHANGELOG.md
@@ -1,3 +1,10 @@
+## [2024-11-12] - v0.56.0
+
+
+### Tech Stories:
+
+- Remove `@types/node` dependency ([#11157](https://github.com/linode/manager/pull/11157))
+
## [2024-10-28] - v0.55.0
diff --git a/packages/validation/package.json b/packages/validation/package.json
index 4aaeb1f109f..37f62119cb8 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@linode/validation",
- "version": "0.55.0",
+ "version": "0.56.0",
"description": "Yup validation schemas for use with the Linode APIv4",
"type": "module",
"main": "lib/index.cjs",
diff --git a/packages/validation/src/databases.schema.ts b/packages/validation/src/databases.schema.ts
index 4830427c621..9cc4edd9b7f 100644
--- a/packages/validation/src/databases.schema.ts
+++ b/packages/validation/src/databases.schema.ts
@@ -14,37 +14,8 @@ export const createDatabaseSchema = object({
cluster_size: number()
.oneOf([1, 2, 3], 'Nodes are required')
.required('Nodes are required'),
- replication_type: string().when('engine', {
- is: (engine: string) => Boolean(engine.match(/mysql|postgres/g)),
- then: string()
- .when('engine', {
- is: (engine: string) => Boolean(engine.match(/mysql/)),
- then: string().oneOf(['none', 'semi_synch', 'asynch']),
- })
- .when('engine', {
- is: (engine: string) => Boolean(engine.match(/postgres/)),
- then: string().oneOf(['none', 'synch', 'asynch']),
- })
- .optional(),
- otherwise: string().notRequired().nullable(true),
- }),
- replication_commit_type: string().when('engine', {
- is: (engine: string) => Boolean(engine.match(/postgres/)),
- then: string()
- .oneOf(['off', 'on', 'local', 'remote_write', 'remote_apply'])
- .optional(),
- otherwise: string().notRequired().nullable(true),
- }),
- storage_engine: string().when('engine', {
- is: (engine: string) => Boolean(engine.match(/mongodb/)),
- then: string().oneOf(['wiredtiger', 'mmapv1']).notRequired(),
- otherwise: string().notRequired().nullable(true),
- }),
- compression_type: string().when('engine', {
- is: (engine: string) => Boolean(engine.match(/mongodb/)),
- then: string().oneOf(['none', 'snappy', 'zlib']).notRequired(),
- otherwise: string().notRequired().nullable(true),
- }),
+ replication_type: string().notRequired().nullable(true), // TODO (UIE-8214) remove POST GA
+ replication_commit_type: string().notRequired().nullable(true), // TODO (UIE-8214) remove POST GA
});
export const updateDatabaseSchema = object({