From 4913f72da9d1b9af102435c8a9ceac7148075faa Mon Sep 17 00:00:00 2001 From: Benjamin Leonard Date: Thu, 9 Oct 2025 12:44:01 +0100 Subject: [PATCH 01/18] First pass --- app/components/AccordionItem.tsx | 4 +- app/components/AttachFloatingIpModal.tsx | 2 +- app/components/CapacityBar.tsx | 28 +- app/components/CapacityBars.tsx | 2 +- app/components/CopyCode.tsx | 6 +- app/components/DocsPopover.tsx | 22 +- app/components/ErrorBoundary.tsx | 2 +- app/components/ErrorPage.tsx | 14 +- app/components/ExternalIps.tsx | 6 +- app/components/InstanceAutoRestartPopover.tsx | 18 +- app/components/ListPlusCell.tsx | 2 +- app/components/MoreActionsMenu.tsx | 2 +- app/components/MswBanner.tsx | 6 +- app/components/PageSkeleton.tsx | 6 +- app/components/ProtocolBadge.tsx | 2 +- app/components/RefetchIntervalPicker.tsx | 6 +- app/components/RouteTabs.tsx | 2 +- app/components/Sidebar.tsx | 25 +- app/components/StateBadge.tsx | 2 +- app/components/Terminal.tsx | 4 +- app/components/TimeAgo.tsx | 2 +- app/components/TimeSeriesChart.tsx | 26 +- app/components/ToastStack.tsx | 2 +- app/components/TopBar.tsx | 26 +- app/components/form/Form.tsx | 9 +- .../form/fields/DateTimeRangePicker.tsx | 4 +- app/components/form/fields/NumberField.tsx | 2 +- app/components/form/fields/RadioField.tsx | 4 +- app/components/form/fields/SshKeysField.tsx | 2 +- app/components/form/fields/TextField.tsx | 2 +- app/forms/floating-ip-edit.tsx | 2 +- app/forms/idp/create.tsx | 2 +- app/forms/idp/shared.tsx | 2 +- app/forms/image-edit.tsx | 2 +- app/forms/image-upload.tsx | 20 +- app/forms/instance-create.tsx | 20 +- app/forms/ssh-key-edit.tsx | 2 +- app/layouts/LoginLayout.tsx | 8 +- app/layouts/RootLayout.tsx | 4 +- app/layouts/helpers.tsx | 8 +- app/pages/DeviceAuthSuccessPage.tsx | 10 +- app/pages/DeviceAuthVerifyPage.tsx | 10 +- app/pages/LoginPage.tsx | 6 +- app/pages/LoginPageSaml.tsx | 4 +- app/pages/SiloUtilizationPage.tsx | 2 +- .../project/instances/AutoRestartCard.tsx | 2 +- app/pages/project/instances/InstancePage.tsx | 10 +- app/pages/project/instances/InstancesPage.tsx | 6 +- .../project/instances/SerialConsolePage.tsx | 20 +- .../project/vpcs/internet-gateway-edit.tsx | 6 +- app/pages/settings/ProfilePage.tsx | 4 +- app/pages/system/UtilizationPage.tsx | 6 +- app/pages/system/inventory/sled/SledPage.tsx | 2 +- app/pages/system/networking/IpPoolPage.tsx | 2 +- app/pages/system/silos/SiloPage.tsx | 4 +- app/table/cells/BooleanCell.tsx | 4 +- app/table/cells/DefaultPoolCell.tsx | 2 +- app/table/cells/EnabledCell.tsx | 4 +- app/table/cells/TypeValueCell.tsx | 2 +- app/table/columns/action-col.tsx | 2 +- app/ui/lib/ActionMenu.tsx | 20 +- app/ui/lib/AuthCodeInput.tsx | 2 +- app/ui/lib/Badge.tsx | 18 +- app/ui/lib/BulkActionMenu.tsx | 6 +- app/ui/lib/Button.tsx | 2 +- app/ui/lib/CalendarCell.tsx | 20 +- app/ui/lib/CalendarGrid.tsx | 4 +- app/ui/lib/CardBlock.tsx | 6 +- app/ui/lib/Checkbox.tsx | 6 +- app/ui/lib/Combobox.tsx | 20 +- app/ui/lib/CopyableIp.tsx | 2 +- app/ui/lib/CreateButton.tsx | 2 +- app/ui/lib/DateField.tsx | 6 +- app/ui/lib/DatePicker.tsx | 14 +- app/ui/lib/DateRangePicker.tsx | 14 +- app/ui/lib/DialogOverlay.tsx | 2 +- app/ui/lib/Divider.tsx | 2 +- app/ui/lib/EmptyMessage.tsx | 2 +- app/ui/lib/FieldLabel.tsx | 4 +- app/ui/lib/FileInput.tsx | 20 +- app/ui/lib/InlineCode.tsx | 2 +- app/ui/lib/Listbox.tsx | 20 +- app/ui/lib/Message.tsx | 12 +- app/ui/lib/MiniTable.tsx | 6 +- app/ui/lib/Modal.tsx | 12 +- app/ui/lib/ModalLinks.tsx | 4 +- app/ui/lib/NumberInput.tsx | 10 +- app/ui/lib/PageHeader.tsx | 2 +- app/ui/lib/Pagination.tsx | 10 +- app/ui/lib/Popover.tsx | 2 +- app/ui/lib/Progress.tsx | 4 +- app/ui/lib/PropertiesTable.tsx | 10 +- app/ui/lib/Radio.tsx | 14 +- app/ui/lib/RangeCalendar.tsx | 4 +- app/ui/lib/SideModal.tsx | 22 +- app/ui/lib/Slash.tsx | 2 +- app/ui/lib/Spinner.tsx | 4 +- app/ui/lib/Table.tsx | 14 +- app/ui/lib/Tag.tsx | 2 +- app/ui/lib/TextInput.tsx | 10 +- app/ui/lib/Toast.tsx | 16 +- app/ui/styles/components/Tabs.css | 10 +- app/ui/styles/components/button.css | 2 +- app/ui/styles/components/menu-button.css | 6 +- app/ui/styles/components/menu-list.css | 10 +- app/ui/styles/components/mini-table.css | 6 +- app/ui/styles/components/table.css | 22 +- app/ui/styles/components/tooltip.css | 2 +- app/ui/styles/index.css | 318 +- app/ui/styles/vars.css | 13 + app/ui/util/story-section.tsx | 4 +- package-lock.json | 4714 ++++++++++------- package.json | 9 +- postcss.config.mjs | 17 - tailwind.config.ts | 91 - vite.config.ts | 2 + 116 files changed, 3322 insertions(+), 2676 deletions(-) create mode 100644 app/ui/styles/vars.css delete mode 100644 postcss.config.mjs delete mode 100644 tailwind.config.ts diff --git a/app/components/AccordionItem.tsx b/app/components/AccordionItem.tsx index c23a078b4d..e458884e65 100644 --- a/app/components/AccordionItem.tsx +++ b/app/components/AccordionItem.tsx @@ -29,9 +29,9 @@ export const AccordionItem = ({ children, isOpen, label, value }: AccordionItemP return ( - +
{label}
- +
-
+
{fip.description}
diff --git a/app/components/CapacityBar.tsx b/app/components/CapacityBar.tsx index 39fc075cd7..d07497cfb4 100644 --- a/app/components/CapacityBar.tsx +++ b/app/components/CapacityBar.tsx @@ -34,15 +34,15 @@ export const CapacityBar = ({ const unitElt = includeUnit ? <> {unit} : null return ( -
+
-
+
-
+
@@ -55,9 +55,9 @@ function TitleCell({ icon, title, unit }: TitleCellProps) { return (
- {icon} - {title} - ({unit}) + {icon} + {title} + ({unit})
) @@ -67,8 +67,8 @@ function PctCell({ pct }: { pct: number }) { // NaN happens when both top and bottom are 0 if (Number.isNaN(pct)) { return ( -
-
+
+
%
) @@ -77,7 +77,7 @@ function PctCell({ pct }: { pct: number }) { const [wholeNumber, decimal] = splitDecimal(pct) return (
-
{wholeNumber}
+
{wholeNumber}
{decimal}%
) @@ -87,10 +87,10 @@ function Bar({ pct }: { pct: number }) { return (
-
+
) } @@ -103,9 +103,9 @@ type ValueCellProps = { function ValueCell({ label, value, unit }: ValueCellProps) { return ( -
-
{label}
-
+
+
{label}
+
{unit}
diff --git a/app/components/CapacityBars.tsx b/app/components/CapacityBars.tsx index f5d415cf1c..b78da863ec 100644 --- a/app/components/CapacityBars.tsx +++ b/app/components/CapacityBars.tsx @@ -23,7 +23,7 @@ export const CapacityBars = ({ allocatedLabel: string }) => { return ( -
+
} title="CPU" diff --git a/app/components/CopyCode.tsx b/app/components/CopyCode.tsx index 15187abe37..9441388ec4 100644 --- a/app/components/CopyCode.tsx +++ b/app/components/CopyCode.tsx @@ -46,7 +46,7 @@ export function CopyCodeModal({ return ( -
+        
           {children}
         
@@ -71,7 +71,7 @@ export function CopyCodeModal({ animate={{ opacity: 1, y: '-50%', x: '-50%' }} initial={{ opacity: 0, y: 'calc(-50% - 25px)', x: '-50%' }} transition={{ type: 'spring', duration: 0.3, bounce: 0 }} - className="absolute left-1/2 top-1/2 flex items-center" + className="absolute top-1/2 left-1/2 flex items-center" > @@ -108,7 +108,7 @@ export function EquivalentCliCommand({ project, instance }: EquivProps) { isOpen={isOpen} onDismiss={() => setIsOpen(false)} > - $ + $ {cmdParts.join(' \\\n ')} diff --git a/app/components/DocsPopover.tsx b/app/components/DocsPopover.tsx index 88b6793b82..1d1cda2860 100644 --- a/app/components/DocsPopover.tsx +++ b/app/components/DocsPopover.tsx @@ -22,14 +22,14 @@ type DocsPopoverLinkProps = { export const DocsPopoverLink = ({ href, linkText }: DocsPopoverLinkProps) => ( -
-
- {linkText} - +
+
+ {linkText} +
@@ -54,18 +54,18 @@ export const DocsPopover = ({ heading, icon, summary, links }: DocsPopoverProps)
-

-
{icon}
+

+
{icon}
{title}

-

{summary}

+

{summary}

-
-

Guides

+
+

Guides

{links.map((link) => ( ))} diff --git a/app/components/ErrorBoundary.tsx b/app/components/ErrorBoundary.tsx index be419ffa09..00cb74b893 100644 --- a/app/components/ErrorBoundary.tsx +++ b/app/components/ErrorBoundary.tsx @@ -19,7 +19,7 @@ import { ErrorPage, NotFound } from './ErrorPage' const IdpMisconfig = () => ( diff --git a/app/components/ErrorPage.tsx b/app/components/ErrorPage.tsx index 3e6b6522c1..ab831301f6 100644 --- a/app/components/ErrorPage.tsx +++ b/app/components/ErrorPage.tsx @@ -17,7 +17,7 @@ import { Button } from '~/ui/lib/Button' const GradientBackground = () => (
- + Back to console - +
-
+
-
- +
+
{children}
diff --git a/app/components/ExternalIps.tsx b/app/components/ExternalIps.tsx index 5baebea038..1a9518e3c1 100644 --- a/app/components/ExternalIps.tsx +++ b/app/components/ExternalIps.tsx @@ -44,14 +44,14 @@ export function ExternalIps({ project, instance }: PP.Instance) { return (
- {intersperse(links, )} + {intersperse(links, )} {/* if there are more than 2 ips, add a link to the instance networking page */} {overflowCount > 0 && ( <> - + … diff --git a/app/components/InstanceAutoRestartPopover.tsx b/app/components/InstanceAutoRestartPopover.tsx index 54599937ba..50217e5b7f 100644 --- a/app/components/InstanceAutoRestartPopover.tsx +++ b/app/components/InstanceAutoRestartPopover.tsx @@ -43,14 +43,14 @@ export const InstanceAutoRestartPopover = ({ instance }: { instance: Instance }) return ( @@ -92,7 +92,7 @@ export const InstanceAutoRestartPopover = ({ instance }: { instance: Instance }) )} )} -
+

{enabled ? restartingSoon @@ -106,13 +106,13 @@ export const InstanceAutoRestartPopover = ({ instance }: { instance: Instance }) target="_blank" rel="noreferrer" > - + Learn about{' '} Instance Auto-Restart - +

@@ -121,10 +121,8 @@ export const InstanceAutoRestartPopover = ({ instance }: { instance: Instance }) } const PopoverRow = ({ label, children }: { label: string; children: ReactNode }) => ( -
-
{label}
-
- {children} -
+
+
{label}
+
{children}
) diff --git a/app/components/ListPlusCell.tsx b/app/components/ListPlusCell.tsx index 92628d95d2..e6fd1f8016 100644 --- a/app/components/ListPlusCell.tsx +++ b/app/components/ListPlusCell.tsx @@ -37,7 +37,7 @@ export const ListPlusCell = ({ const rest = array.slice(numInCell) const content = (
-
{tooltipTitle}
+
{tooltipTitle}
{...rest}
) diff --git a/app/components/MoreActionsMenu.tsx b/app/components/MoreActionsMenu.tsx index 3c78ef84e6..b92afad7af 100644 --- a/app/components/MoreActionsMenu.tsx +++ b/app/components/MoreActionsMenu.tsx @@ -30,7 +30,7 @@ export const MoreActionsMenu = ({
diff --git a/app/components/MswBanner.tsx b/app/components/MswBanner.tsx index 4e6996aeca..96685833fb 100644 --- a/app/components/MswBanner.tsx +++ b/app/components/MswBanner.tsx @@ -49,11 +49,11 @@ export function MswBanner({ disableButton }: Props) { return ( <> {/* The [&+*]:pt-10 style is to ensure the page container isn't pushed out of screen as it uses 100vh for layout */} -