diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 3e32c06fb03..dc9433606f5 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -19,7 +19,7 @@ "@cap/utils": "workspace:*", "@cap/web-api-contract": "workspace:*", "@corvu/tooltip": "^0.2.1", - "@kobalte/core": "^0.13.7", + "@kobalte/core": "^0.13.11", "@radix-ui/colors": "^3.0.0", "@rive-app/canvas": "^2.32.2", "@solid-primitives/bounds": "^0.0.122", @@ -75,13 +75,16 @@ }, "devDependencies": { "@fontsource/geist-sans": "^5.0.3", - "@webgpu/types": "^0.1.44", "@iconify/json": "^2.2.239", + "@tailwindcss/postcss": "^4.2.2", + "@tailwindcss/typography": "^0.5.9", "@tauri-apps/cli": ">=2.1.0", "@total-typescript/ts-reset": "^0.6.1", "@types/dom-webcodecs": "^0.1.11", "@types/uuid": "^9.0.8", + "@webgpu/types": "^0.1.44", "cross-env": "^7.0.3", + "tailwind-scrollbar": "^3.1.0", "typescript": "^5.8.3", "vite": "^6.3.5", "vite-plugin-top-level-await": "^1.4.4", diff --git a/apps/desktop/postcss.config.cjs b/apps/desktop/postcss.config.cjs index a1d89157e45..eebbe271c7d 100644 --- a/apps/desktop/postcss.config.cjs +++ b/apps/desktop/postcss.config.cjs @@ -1 +1,6 @@ -module.exports = require("@cap/ui/postcss"); +module.exports = { + plugins: { + "@tailwindcss/postcss": {}, + autoprefixer: {}, + }, +}; diff --git a/apps/desktop/src/components/CapErrorBoundary.tsx b/apps/desktop/src/components/CapErrorBoundary.tsx index 5bf7fc132e6..2dca68d1d47 100644 --- a/apps/desktop/src/components/CapErrorBoundary.tsx +++ b/apps/desktop/src/components/CapErrorBoundary.tsx @@ -9,9 +9,9 @@ export function CapErrorBoundary(props: ParentProps) { fallback={(e: Error) => { console.error(e); return ( -
+
-

+

An Error Occured

diff --git a/apps/desktop/src/components/Cropper.tsx b/apps/desktop/src/components/Cropper.tsx index 6509ce71cf6..2a22e1b5f90 100644 --- a/apps/desktop/src/components/Cropper.tsx +++ b/apps/desktop/src/components/Cropper.tsx @@ -1018,7 +1018,7 @@ export function Cropper( return (

{(transform) => ( @@ -1110,7 +1110,7 @@ export function Cropper( handle.isCorner ? (
)} -
+
{ if (part.toLowerCase() === lowercaseQuery) { return ( - {part} + {part} ); } return part; @@ -314,12 +314,12 @@ export default function TargetCard(props: TargetCardProps) { disabled={local.disabled} data-variant={local.variant} class={cx( - "group flex flex-col overflow-hidden rounded-lg border border-transparent bg-gray-3 text-left outline-none transition-colors duration-100 hover:bg-gray-4 focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1", + "group flex flex-col overflow-hidden rounded-lg border border-transparent bg-gray-3 text-left outline-hidden transition-colors duration-100 hover:bg-gray-4 focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1", local.disabled && "pointer-events-none opacity-60", local.class, )} > -
+
-
+
-
+
{recordingFailed() ? "Recording failed" : "Upload failed"} @@ -391,7 +391,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleOpenEditor} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -401,7 +401,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleCopy} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -411,7 +411,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleSave} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -436,7 +436,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleOpenRecordingEditor} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -453,7 +453,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleReupload} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -475,7 +475,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleOpenRecordingLink} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -486,7 +486,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleOpenRecordingFolder} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -496,7 +496,7 @@ export default function TargetCard(props: TargetCardProps) { role="button" tabIndex={-1} onClick={handleDeleteRecording} - class="flex-1 flex items-center justify-center p-1 rounded hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" + class="flex-1 flex items-center justify-center p-1 rounded-sm hover:bg-gray-5 text-gray-11 hover:text-gray-12 transition-colors" >
@@ -522,12 +522,12 @@ export function TargetCardSkeleton(props: { class?: string }) { props.class, )} > -
+
-
-
-
+
+
+
diff --git a/apps/desktop/src/routes/(window-chrome)/new-main/TargetDropdownButton.tsx b/apps/desktop/src/routes/(window-chrome)/new-main/TargetDropdownButton.tsx index 5865e5c8602..4c6c7b26194 100644 --- a/apps/desktop/src/routes/(window-chrome)/new-main/TargetDropdownButton.tsx +++ b/apps/desktop/src/routes/(window-chrome)/new-main/TargetDropdownButton.tsx @@ -27,7 +27,7 @@ export default function TargetDropdownButton< aria-expanded={local.expanded ? "true" : "false"} data-expanded={local.expanded ? "true" : "false"} class={cx( - "flex w-5 shrink-0 items-center justify-center rounded-lg bg-gray-4 text-gray-12 transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1 hover:bg-gray-5", + "flex w-5 shrink-0 items-center justify-center rounded-lg bg-gray-4 text-gray-12 transition-colors duration-150 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1 hover:bg-gray-5", local.expanded && "bg-gray-5", local.disabled && "pointer-events-none opacity-60", local.class, diff --git a/apps/desktop/src/routes/(window-chrome)/new-main/TargetTypeButton.tsx b/apps/desktop/src/routes/(window-chrome)/new-main/TargetTypeButton.tsx index eea046c313b..c295d46de89 100644 --- a/apps/desktop/src/routes/(window-chrome)/new-main/TargetTypeButton.tsx +++ b/apps/desktop/src/routes/(window-chrome)/new-main/TargetTypeButton.tsx @@ -24,7 +24,7 @@ function TargetTypeButton(props: TargetTypeButtonProps) { disabled={local.disabled} aria-pressed={local.selected ? "true" : "false"} class={cx( - "flex flex-1 flex-col items-center justify-end gap-1 rounded-lg border border-gray-5 bg-gray-3 py-2 text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1", + "flex flex-1 flex-col items-center justify-end gap-1 rounded-lg border border-gray-5 bg-gray-3 py-2 text-center transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1", local.selected ? "text-gray-12" : "text-gray-12 hover:bg-gray-4", local.disabled && "pointer-events-none opacity-60", local.class, diff --git a/apps/desktop/src/routes/(window-chrome)/new-main/index.tsx b/apps/desktop/src/routes/(window-chrome)/new-main/index.tsx index 82ce03f14f0..e7540576503 100644 --- a/apps/desktop/src/routes/(window-chrome)/new-main/index.tsx +++ b/apps/desktop/src/routes/(window-chrome)/new-main/index.tsx @@ -327,7 +327,7 @@ function CameraListItem(props: { return (
@@ -1016,7 +1016,7 @@ function DeviceListPanel(props: DeviceListPanelProps) { disabled={props.disabled} onClick={() => handleSelect(null)} class={cx( - "flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm text-left outline-none", + "flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm text-left outline-hidden", isNoneSelected() ? "bg-blue-500 text-white" : focusedIndex() === 0 @@ -1289,7 +1289,7 @@ function TargetMenuPanel(props: TargetMenuPanelProps & SharedTargetMenuProps) { onClick={() => props.onBack()} class="flex gap-1 items-center rounded-md px-1.5 text-xs text-gray-11 transition-opacity hover:opacity-70 hover:text-gray-12 - focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1" + focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-blue-9 focus-visible:ring-offset-2 focus-visible:ring-offset-gray-1" > Back @@ -1497,7 +1497,7 @@ function MainWindowHelpButton() { onClick={() => { commands.showWindow("Onboarding"); }} - class="flex shrink-0 justify-center items-center size-5 focus:outline-none" + class="flex shrink-0 justify-center items-center size-5 focus:outline-hidden" > @@ -2415,7 +2415,7 @@ function Page() { return (
@@ -2451,7 +2451,7 @@ function Page() { return next; }); }} - class="flex justify-center items-center size-5 focus:outline-none" + class="flex justify-center items-center size-5 focus:outline-hidden" > @@ -2470,7 +2470,7 @@ function Page() { return next; }); }} - class="flex justify-center items-center size-5 focus:outline-none" + class="flex justify-center items-center size-5 focus:outline-hidden" > @@ -2482,7 +2482,7 @@ function Page() { onClick={() => { new WebviewWindow("debug", { url: "/debug" }); }} - class="flex justify-center items-center focus:outline-none" + class="flex justify-center items-center focus:outline-hidden" > @@ -2494,7 +2494,7 @@ function Page() {
-
+
@@ -1347,7 +1347,7 @@ function RecordingBar(props: {